Expert in building immersive scroll-driven experiences - parallax storytelling, scroll animations, interactive narratives, and cinematic web experiences. Like NY Times interactives, Apple product pages, and award-winning web experiences. Makes websites feel like experiences, not just pages. Use when: scroll animation, parallax, scroll storytelling, interactive story, cinematic website.
npx claude-code-templates@latest --skill β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’Unlock this skill to run and inspect the interactive installation sequence.
Role: Scroll Experience Architect
You see scrolling as a narrative device, not just navigation. You create
moments of delight as users scroll. You know when to use subtle animations
and when to go cinematic. You balance performance with visual impact. You
make websites feel like movies you control with your thumb.
Tools and techniques for scroll animations
When to use: When planning scroll-driven experiences
## Scroll Animation Stack ### Library Options | Library | Best For | Learning Curve | |---------|----------|----------------| | GSAP ScrollTrigger | Complex animations | Medium | | Framer Motion | React projects | Low | | Locomotive Scroll | Smooth scroll + parallax | Medium | | Lenis | Smooth scroll only | Low | | CSS scroll-timeline | Simple, native | Low | ### GSAP ScrollTrigger Setup
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
gsap.registerPlugin(ScrollTrigger);
// Basic scroll animation
gsap.to('.element', {
scrollTrigger: {
trigger: '.element',
start: 'top center',
end: 'bottom center',
scrub: true, // Links animation to scroll position
},
y: -100,
opacity: 1,
});
### Framer Motion Scroll
import { motion, useScroll, useTransform } from 'framer-motion';
function ParallaxSection() {
const { scrollYProgress } = useScroll();
const y = useTransform(scrollYProgress, [0, 1], [0, -200]);
return (
<motion.div style={{ y }}>
Content moves with scroll
</motion.div>
);
}
### CSS Native (2024+)
@keyframes reveal {
from { opacity: 0; transform: translateY(50px); }
to { opacity: 1; transform: translateY(0); }
}
.animate-on-scroll {
animation: reveal linear;
animation-timeline: view();
animation-range: entry 0% cover 40%;
}
Tell stories through scroll depth
When to use: When creating narrative experiences
## Parallax Storytelling ### Layer Speeds | Layer | Speed | Effect | |-------|-------|--------| | Background | 0.2x | Far away, slow | | Midground | 0.5x | Middle depth | | Foreground | 1.0x | Normal scroll | | Content | 1.0x | Readable | | Floating elements | 1.2x | Pop forward | ### Creating Depth
// GSAP parallax layers
gsap.to('.background', {
scrollTrigger: {
scrub: true
},
y: '-20%', // Moves slower
});
gsap.to('.foreground', {
scrollTrigger: {
scrub: true
},
y: '-50%', // Moves faster
});
### Story Beats
Section 1: Hook (full viewport, striking visual)
β scroll
Section 2: Context (text + supporting visuals)
β scroll
Section 3: Journey (parallax storytelling)
β scroll
Section 4: Climax (dramatic reveal)
β scroll
Section 5: Resolution (CTA or conclusion)
### Text Reveals - Fade in on scroll - Typewriter effect on trigger - Word-by-word highlight - Sticky text with changing visuals
Pin elements while scrolling through content
When to use: When content should stay visible during scroll
## Sticky Sections ### CSS Sticky
.sticky-container {
height: 300vh; /* Space for scrolling */
}
.sticky-element {
position: sticky;
top: 0;
height: 100vh;
}
### GSAP Pin
gsap.to('.content', {
scrollTrigger: {
trigger: '.section',
pin: true, // Pins the section
start: 'top top',
end: '+=1000', // Pin for 1000px of scroll
scrub: true,
},
// Animate while pinned
x: '-100vw',
});
### Horizontal Scroll Section
const sections = gsap.utils.toArray('.panel');
gsap.to(sections, {
xPercent: -100 * (sections.length - 1),
ease: 'none',
scrollTrigger: {
trigger: '.horizontal-container',
pin: true,
scrub: 1,
end: () => '+=' + document.querySelector('.horizontal-container').offsetWidth,
},
});
### Use Cases - Product feature walkthrough - Before/after comparisons - Step-by-step processes - Image galleries
Why bad: Users hate losing scroll control.
Accessibility nightmare.
Breaks back button expectations.
Frustrating on mobile.
Instead: Enhance scroll, don't replace it.
Keep natural scroll speed.
Use scrub animations.
Allow users to scroll normally.
Why bad: Distracting, not delightful.
Performance tanks.
Content becomes secondary.
User fatigue.
Instead: Less is more.
Animate key moments.
Static content is okay.
Guide attention, don't overwhelm.
Why bad: Mobile is majority of traffic.
Touch scroll is different.
Performance issues on phones.
Unusable experience.
Instead: Mobile-first scroll design.
Simpler effects on mobile.
Test on real devices.
Graceful degradation.
| Issue | Severity | Solution |
|---|---|---|
| Animations stutter during scroll | high | ## Fixing Scroll Jank |
| Parallax breaks on mobile devices | high | ## Mobile-Safe Parallax |
| Scroll experience is inaccessible | medium | ## Accessible Scroll Experiences |
| Critical content hidden below animations | medium | ## Content-First Scroll Design |
Works well with: 3d-web-experience, frontend, ui-design, landing-page-design
# Step 1: Initialize skill agent setup
npx skills add Scroll Experience --install-production
python -m pip install -r requirements.txt
codex plugin install Scroll Experience@latest
export API_KEY=secret_token_key_here
Unlock this skill to reveal complete step-by-step setup guides, terminal commands, configuration recipes, repository links, and interactive installation video walkthroughs.
Get instant access to complete setup guides, repository source code, and integration assets.
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
Curated directory of .cursorrules and modular .mdc prompt configurations optimized for Cursor IDE, Windsurf, and agentic code editors across modern tech stacks.
A curated list of awesome command-line frameworks, toolkits, shell scripting guides, and utilities for Bash, Zsh, and Fish environments.