Use after visual-identity is complete and a build prompt exists (from audience-site-brief). Scaffolds a Vite + GSAP + Lenis project, implements the design system, builds all page sections with choreographed animations, sources images from Unsplash, and documents video slots for Replicate. Targets Awwwards-quality execution.
Installation
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Use after visual-identity is complete and a build prompt exists (from audience-site-brief). Scaffolds a Vite + GSAP + Lenis project, implements the design system, builds all page sections with choreographed animations, sources images from Unsplash, and documents video slots for Replicate. Targets Awwwards-quality execution.
Motion Web Design
Build the site. This skill takes a complete build prompt (generated by audience-site-brief Phase 10, grounded in visual-identity output) and produces a coded, running landing page with choreographed scroll animations, micro-interactions, and polished visual design.
Stack: Vite + GSAP + ScrollTrigger + Lenis. This is the industry standard used by Locomotive, Active Theory, and the studios that win Awwwards SOTD. It provides full animation control, excellent performance, and no framework overhead for single landing pages.
Distinction:ux-methodology-design determines what design rules apply. visual-identity defines the visual language. This skill implements both into working code.
When to Apply
After audience-site-brief Phase 10 has produced a build prompt
After visual-identity has produced a design-system.md
When you need a coded, running page — not a mockup or spec
When updating an existing site to add choreographed motion
auto=format — Serves WebP where supported (automatic)
fit=crop — Maintains aspect ratio
w={WIDTH} — Set to the actual rendered width (not 2x; the CDN handles resolution)
q=80 — Quality vs. file size balance
Search strategy by content type:
Content
Unsplash search terms
Athlete running
athlete running marathon trail
Strength training
gym workout strength barbell
Cycling performance
cyclist road bike performance
Recovery/wellness
athlete recovery stretch yoga
Product lifestyle
sports drink water bottle gym
Team/social proof
fitness group training class
Implementation:
<!-- Hero background athlete --><imgsrc="https://images.unsplash.com/photo-{ID}?auto=format&fit=crop&w=1400&q=80"alt="Athlete in training"class="hero-bg-image"loading="eager"fetchpriority="high"
/><!-- Testimonial avatar (fallback if no photo) --><imgsrc="https://images.unsplash.com/photo-{ID}?auto=format&fit=crop&w=80&q=80"alt="Marcus R., marathon runner"class="author-avatar-img"loading="lazy"
/>
Always provide width and height attributes to prevent CLS
Phase 10: Video Slots (Replicate)
Video generation requires a separate Replicate integration. Document video slots in the build so they can be filled when available.
Pattern — video slot with gradient placeholder:
<divclass="video-slot"data-video-slot="hero-background"><!-- Replicate video fills here when generated --><!-- Prompt for generation documented in VIDEO_PROMPTS.md --><divclass="video-placeholder"aria-hidden="true"></div></div>
Write VIDEO_PROMPTS.md in the project root:
# Video Generation Prompts (Replicate)## Slot: hero-background**Dimensions:** 1920×1080, 10-15s loop, no audio
**Model:** Use a video generation model on Replicate
**Prompt:**
Athletic runner in slow motion on a misty trail, early morning light,
cinematic 4K, shot on ARRI, lens flare, depth of field, performance energy.
Color grade: desaturated with green accent highlights. Loop-ready.
## Slot: product-lifestyle**Dimensions:** 800×600, 6-8s loop
**Prompt:**
Sports drink can on a wet gym surface, condensation dripping in slow motion,
dark moody lighting with one key light, lime/electric green color cast.
Phase 11: Mobile & Performance Pass
Mobile animation rules:
// Disable complex animations on small screens or reduced motion preferenceconst prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
const isMobile = window.innerWidth < 768;
if (prefersReducedMotion || isMobile) {
// Replace all GSAP animations with instant opacity reveals
gsap.set('[data-animate]', { opacity: 1, y: 0, x: 0, clipPath: 'none' });
ScrollTrigger.disable();
}