This site, measured by its own tooling.
Core Web Vitals, bundle budgets and interaction latency for every route — the same numbers that gate a release here, published including the regressions. These are lab measurements from one machine under simulated throttling, not field data from real visitors; the method section says exactly what that does and does not tell you.
- MEASURED
- 28 Jul 2026
- COMMIT
- 3d147a4+
- PROFILE
- 4× CPU · Slow 4G
- SNAPSHOTS
- 3
Headline metrics
Each headline is the WORST route, not an average — a visitor lands on one page, and a fast average cannot rescue the slow page they landed on. Sparklines track that worst value across snapshots.
Per-route measurements
scroll for the full table →
| ROUTE | LCP | CLS | TBT | JS | TRANSFER | BUDGET USED | LCP TREND |
|---|---|---|---|---|---|---|---|
| / | 1284 | 0.025 | 76 | 395 | 498 / 520 | 96% | |
| /demo/skills-orbit | — | — | — | 543 | 645 / 680 | 95% | |
| /demo/solarsystem3js | — | — | — | 643 | 745 / 800 | 93% | |
| /music | 980 | 0.023 | 47 | 307 | 409 / 440 | 93% | |
| /project | 924 | 0.000 | 9 | 322 | 424 / 460 | 92% | |
| /resource | 896 | 0.000 | 1 | 321 | 423 / 460 | 92% | |
| /frontend | 892 | 0.000 | 2 | 299 | 402 / 440 | 91% | |
| /frontend/layout-thrashing | — | — | — | 299 | 402 / 440 | 91% | |
| /perfTHIS PAGE | 916 | 0.000 | 0 | 299 | 401 / 440 | 91% | |
| /tools/image-edit | — | — | — | 297 | 399 / 440 | 91% | |
| /blog | 1052 | 0.000 | 96 | 332 | 434 / 480 | 90% | |
| /models | 896 | 0.000 | 0 | 293 | 395 / 440 | 90% | |
| /changelog | — | — | — | 291 | 394 / 440 | 89% | |
| /terminal | — | — | — | 273 | 375 / 420 | 89% | |
| /tools | 928 | 0.000 | 7 | 290 | 393 / 440 | 89% | |
| /tools/typing | — | — | — | 308 | 410 / 460 | 89% | |
| /lab | — | — | — | 290 | 392 / 440 | 89% |
9 of 17 routes carry vitals — the throttled run covers the routes a visitor is most likely to land on, while transfer size is measured for all of them. A dash means that tool did not cover that route.
Interaction latency
scroll for the full table →
| SCENARIO | INP | p50 | PHASE BREAKDOWN | MS |
|---|---|---|---|---|
| Language toggle | 216 | 104 | 1 · 1 · 214 | |
| Theme toggle | 96 | 88 | 7 · 2 · 87 | |
| Artist switch | 88 | 40 | 4 · 0 · 84 | |
| Header dropdown | 72 | 32 | 3 · 1 · 68 | |
| Command palette — open and type | 48 | 32 | 0 · 1 · 47 | |
| Blog search typing | 40 | 16 | 3 · 0 · 36 | |
| Planner controls | 40 | 16 | 1 · 1 · 38 | |
| Typing trainer keystrokes | 24 | 16 | 1 · 0 · 23 |
Snapshots
- 28 Jul 20263d147a4+Public performance dashboard — /perf ships and measures itselfworst LCP 1284 ms▲ 24
- 28 Jul 20263d147a4+Core Web Vitals pass — first paint, icons, fontsworst LCP 1260 ms▼ 6592
- 28 Jul 20263d147a4Baseline — before the Core Web Vitals passworst LCP 7852 ms
Method
TOOLING
Three commands, all in this repo. pnpm vitals drives a real production build in a real browser and reads LCP, FCP, CLS and TBT off the PerformanceObserver. pnpm size sums the encoded bytes a cold, prefetch-blocked first load actually pulls. pnpm inp scripts real interactions and reads the Event Timing API. pnpm perf:snapshot condenses whichever ran into the committed history this page renders.
PROFILE
Vitals and interaction runs use Lighthouse's mobile profile — 4× CPU slowdown, Slow 4G, a 412×823 viewport — because on an unthrottled desktop over localhost nearly everything reports as instant and no defect is visible. Each route gets a fresh browser context so nothing is served from cache. Reported values are the median of several runs.
LAB, NOT FIELD
Everything here is synthetic: one machine, a simulated network, scripted interactions. It is reproducible and it catches regressions before they ship, which field data cannot do. It is not a claim about what any particular visitor experienced — real devices, real networks and real interaction patterns all differ.
WHY PUBLISH IT
A budget you only look at when you remember to is not a budget. These numbers already gate work in this repo, so publishing them costs nothing extra and makes a regression awkward to ignore. The history keeps the bad snapshots too — a dashboard that only shows improvements is marketing.