Scroll-driven hero sequence
A pinned canvas plays back 162 WebP frames at 60fps as you scroll the page.
A playground to showcase my scroll animations. Built with Next.js, GSAP ScrollTrigger, Motion, Lenis, and a high-performance canvas image sequence renderer.
A pinned canvas plays back 162 WebP frames as you scroll — decoded once via createImageBitmap, redrawn with cover-fit math, coalesced through a single requestAnimationFrame.
Five technologies, one cohesive runtime — chosen for cinematic motion, predictable timing, and 60fps under load.
Every decision optimises for smooth scroll, low memory, and a clean main thread.
1920×1080 WebP, streamed lazily.
RAF-coalesced canvas writes.
Zero <img> nodes on screen.
Below the fold; first paint instant.
Performance, A11y, Best Practices.
A growing collection of scroll, pointer, and time-based motion studies.
A pinned canvas plays back 162 WebP frames at 60fps as you scroll the page.
Layered depth-of-field driven by pointer + scroll position, GPU-only.
Variable-font weight and tracking lerped to scroll progress with Lenis.
Pointer-following affordances with spring physics, motion/react driven.
Crossfade + scale page chapters using React 19 View Transitions.
AnalyserNode amplitude piped into a custom 2D shader for ambient visuals.