Performance, in public
This site claims performance as a specialty, so its own numbers are public: the measured weight of the home page as served, the budget that CI enforces on every push, and a changelog of what changed — including the embarrassing parts. Methodology and a guided tour live in How This Site Loads in Under One Second.
Scoreboard
measured 2026-08-16 · gzip, as served · home route
| Metric | Measured | Budget | Status |
|---|---|---|---|
| First-load JavaScript | 106.1 kB | ≤ 120 kB | PASS |
| HTML document | 16.3 kB | ≤ 40 kB | PASS |
| Stylesheet | 10.5 kB | ≤ 20 kB | PASS |
| Images on the home page | 177.1 kB | ≤ 300 kB | PASS |
| Render-blocking requests | 1 (the stylesheet) | ≤ 1 | PASS |
| Third-party requests | 0 | 0 | PASS |
An honest caveat: ~102 kB of the JavaScript is the Next.js 15 App Router framework baseline (React, router, hydration). The parts I control add 4 kB on top. A zero-hydration rewrite would drop the floor to ~10 kB — it's on the roadmap as an experiment.
How it's enforced
- Every push runs a CI workflow that rebuilds the site, re-measures every number above from the actual export, and fails the build if a budget is exceeded.
- Lighthouse runs against the static export with assertions on performance, accessibility, SEO, CLS, and total blocking time.
- Telemetry: a ~3 kB first-party beacon reports anonymous LCP, INP, and CLS (no cookies, no identifiers, no third parties). That's the field data behind future case studies.
Performance changelog
Wins and regressions both — publishing only the wins is marketing, not engineering.
2026-08-16
Removed the animation library entirely (scroll effects now CSS-driven), rebuilt the shell as server components.
first-load JS down again; runtime animation JS: 0
2026-08-16
Killed the effect stack: full-viewport canvas glitch hero, tsparticles titles, animated SVG card borders, 96-image marquee, a universal `* { transition }` rule, and 8 infinite-loop animations in the theme toggle.
first-load JS 173 → 157 kB; continuous rAF/canvas cost → 0
2026-08-16
Re-encoded six project screenshots from raw PNG to display-sized WebP at build time.
16.2 MB → 167 kB (−99%)