Promo Website Development
A promo website is a temporary or permanent site for a specific campaign, product, event, or launch. It differs from a corporate site and landing page: it lives within one idea, often has high saturation with interactive elements, non-standard animations, visual storytelling. Examples: new car promotion, game or app page, conference website, FMCG product promotion.
How Promo Differs from Landing
Landing page is conversion-oriented: minimal distractions, maximum path to target action. Promo can convert, but primary goal is engagement, memorability, creating buzz around a product. Animation and visual budget is significantly higher. User staying longer is expected.
Technical Stack
Promo sites are one of the few contexts where heavy JavaScript animation libraries are justified:
GSAP (GreenSock) — standard for scroll-based animations and timeline scenarios. ScrollTrigger plugin allows synchronizing animation with scroll position:
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
gsap.registerPlugin(ScrollTrigger);
gsap.to('.product-image', {
y: -100,
scale: 1.2,
ease: 'none',
scrollTrigger: {
trigger: '.product-section',
start: 'top center',
end: 'bottom top',
scrub: 1.5,
}
});
Three.js / R3F (React Three Fiber) — for 3D elements. Car promotion, interactive 3D product, particle systems. Requires mobile optimization: LOD (levels of detail), FPS limiting, fallback for weak devices.
import { Canvas } from '@react-three/fiber';
import { useGLTF, OrbitControls, Environment } from '@react-three/drei';
function ProductModel() {
const { scene } = useGLTF('/models/product.glb');
return <primitive object={scene} />;
}
export function ProductViewer() {
return (
<Canvas camera={{ position: [0, 0, 3], fov: 45 }}>
<Environment preset="studio" />
<ProductModel />
<OrbitControls enableZoom={false} />
</Canvas>
);
}
Lenis — library for smooth scroll, replaces native scroll with more controllable one. Often used with GSAP ScrollTrigger.
Framer Motion — for React projects with less complex animations. Sufficient for most promos with section transitions.
Typical Promo Site Blocks
Hero with video or 3D. Video autoplay without sound, muted + playsinline for iOS:
<video
autoplay muted loop playsinline
poster="/poster.jpg"
preload="none"
>
<source src="/hero.webm" type="video/webm">
<source src="/hero.mp4" type="video/mp4">
</video>
Scroll storytelling. Each section reveals as user scrolls. Technically — pinned sections via ScrollTrigger + synchronized timelines:
const tl = gsap.timeline({
scrollTrigger: {
trigger: '.story-section',
pin: true,
start: 'top top',
end: '+=300%',
scrub: true,
}
});
tl.from('.chapter-1', { opacity: 0, y: 50 })
.to('.chapter-1', { opacity: 0 })
.from('.chapter-2', { opacity: 0, y: 50 });
Interactive Element. Cursor changes style, elements respond to mousemove, image hotspots with tooltips. All engagement features, not conversion.
Counters and Dynamic Data. Animated numbers, live updates (if product/event is real-time via WebSocket).
Promo Performance
Promo site paradox: it should be visually rich yet load fast. Balance methods:
- progressive reveal — load content as user scrolls, not all at once
- preload critical resources — hero video, first 3D asset
- defer everything not on first screen
- WebP/AVIF for all images, draco compression for 3D models
- code splitting — each section as separate chunk
-
reduced-motion — disable animations for users with
prefers-reduced-motion:
@media (prefers-reduced-motion: reduce) {
.animated-element {
animation: none;
transition: none;
}
}
In JS:
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (!prefersReduced) {
initAnimations();
}
Mobile Version of Promo
Promo sites are often developed with desktop focus, mobile version simplified. This is normal practice if simplification is conscious and documented in spec. Heavy scroll-based animations on mobile work worse: lower performance, native scroll less predictable.
Alternative: separate mobile scenario without pinned sections — auto-transition by click instead of scroll, simplified CSS animations.
Lifetime and Support
Promo for event (conference, product launch) lives 2-6 months. This should be considered when choosing infrastructure: no need to set up full VPS with CI/CD for page running 3 months. Vercel/Netlify with auto-deploy from Git — optimal.
After campaign: either redirect to main domain or static archive (disable JS, preserve visual state).
Typical Timeline
Promo without 3D, with GSAP animations and custom design — 3-4 weeks. With 3D models, interactive product viewer or custom WebGL effects — 5-8 weeks. Large-scale promos with multiple languages, A/B tests and integrations — from 8 weeks.







