Remove gsap, the second animation runtime on the homepage

Performancekamo-marketing
Shipped
August 20, 2026 at 2:44 AM UTC
Author
Kamo
Commit
0bbc753

Framer was the chunk Lighthouse named. GSAP is the one it did not, because it arrives late enough to fall outside "unused JavaScript" — but it is 69 KB in its own chunk and it was fetched and parsed on every homepage load, and the reason is worth stating plainly: HomeEasterEggs mounts KonamiCode and HiddenAnimations with `ssr: false`, which defers rendering, not loading. Both statically imported the library, so both pulled it down immediately after hydration. What it was being kept ready for is a keyboard sequence and a triple scroll-to-bottom. On the device the mobile score is measured on, the Konami code cannot be typed at all. The third trigger — five logo clicks — was already unreachable: its handler sits on a `<div>` inside `display: none`. The tweens themselves were `gsap.to("body", …)`: a yoyoing hue rotation and one full turn. Two keyframe tracks, driven by a helper that adds a class and removes it on `animationend`. The same dead-code pattern as framer-motion, in the same proportion. 31 files imported gsap and 28 are referenced by nothing — every GSAPPageTransition variant, ScrollTriggerExpanded, TimelineOrchestration and the rest. Two more, AnimatedIcon and Card3DFlip, were imported by Features.tsx and never rendered: dead imports on a homepage component, which is the worst place for one. ReducedMotion loses its branch-loaded import too. It reached for GSAP's global timeline to slow running tweens; there are none left to slow, so what remains is the two custom properties the stylesheet actually reads. gsap is uninstalled. With framer-motion gone in the previous commit, neither animation runtime can return without failing the build. Verified: clean build, typecheck, all three guards.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing