- Ya
- 20 Agosti 2026, 02:44 UTC
- Mwandishi
- Kamo
- Ahadi ya
- 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.