Performance · measured, not estimated
The numbers we can stand behind
Every figure on this page is read from the build report or the changelog at build time — nothing here is typed in by hand, and the two exceptions (Lighthouse and field metrics) are named at the bottom rather than gestured at.
build eoCv1yhT4V · measured 2026-09-12 06:33Z
JavaScript shipped
3087.1 KB
76 chunks across 136 prerendered routes
CSS
243.4 KB
one stylesheet, no runtime CSS-in-JS
Fonts
80 KB
preloaded on 497/498 pages
Shared shell
690.1 KB
The file set 91 of 155 routes share — the shell those routes start from. Owner: /accessibility.
The split that halved two numbers
The largest single win in this project's log was not an optimisation — it was noticing that a layout import dragged the whole demo module onto 82 routes that render no demo. Splitting it out moved the numbers below, both taken from the build report on the builds either side of the change.
JavaScript on a route with no demo
743.1 KB→429.5 KB
batch 55 (commit 1fb5142) → batch 60
Fonts preloaded
261.4 KB→80 KB
The font drop came from the same audit: the layout imported seven subsets for an English site, and the two latin files cover every glyph the catalog uses.
Recorded size changes
- JS on a component detail page-416.2 KBbatch 85
- JS on a route that renders no demo-315.5 KBbatch 56
Entries in the changelog without a figure are older than the build report; they say so on their own pages.
Where the weight is now
The four heaviest HTML documents in the build, for scale — note that all four are interactive consoles rather than content pages:
- admin/health.html1168.1 KB
- quality.html916.7 KB
- components/kind/element.html504.7 KB
- prompts.html453.9 KB
Sample routes checked with JavaScript off: /components, /backgrounds, /prompts, /components/combo-box, /learn. The pages render, the copy is present, and the interactive panels say they need the client instead of showing an empty box.
JavaScript budget per route
A weight nobody checks is a dashboard. These are the limits the export harness enforces on every build: the unit is own JS — the JavaScript a route adds beyond the shared shell — because that is the part a change to a page can move. Budgets sit about a third above the measured build, so they fail on an accident rather than on ordinary work, and raising one means editing this table in the same commit as the code.
- /components/[slug]the playground: a demo scene, the theme and property controls, the read-next rail and the scenes that rail previews. Still the heaviest page on the site by design.330 KB
- /admin/*the demo consoles are the largest client surfaces; they are also noindex and never a first impression.260 KB
- /labeight interactive tools on one page, each with its own controls.140 KB
- /studiothe token editor mounts its panels lazily, so the route itself stays small.120 KB
- /prompts/[slug]prompt viewer with the run log, the copy blocks and one preview scene.110 KB
- /searchclient-side search over the whole catalog; the index is the payload.95 KB
- /the homepage carries scene previews and the stat band.95 KB
- /componentscatalog index with filters, sort and lazy card previews.95 KB
- /promptsprompt catalog with its own filter set.80 KB
- /backgroundsbackground catalog with live previews per card.80 KB
- /shufflethe shuffle view previews scenes, so it pays for the scenes it shows and not for the rest.80 KB
- /pricingthe plan comparison renders a live scene; that scene is now the only scene code it loads.80 KB
- /embed/[slug]one demo and nothing else — the embed must stay cheap because other sites pay for it.70 KB
- everything elsecontent pages: markup, prose and links. Anything above this has pulled a client module onto pages that render no interactive surface.70 KB
Heaviest routes in this build
- /components/[slug]266.9 / 330
- /admin/moderation193.0 / 260
- /admin/pipeline164.3 / 260
- /admin/audit159.3 / 260
- /admin/content159.3 / 260
- /admin/schedule159.3 / 260
- /admin/search159.3 / 260
- /admin/duplicates158.1 / 260
No route is over budget at this commit.
The scene split, in the same numbers
Every scene used to live in one module, so a page that rendered one demo paid for all 162 of them, and three routes needed their own line in the table because of it. The scenes now load per module: the registry in `src/components/demos/Demo.tsx` maps each key to a dynamic import of the set that holds it, and a page downloads the set it renders plus the shared kit. Measured on the builds either side of the change:
- /components/halo-button1112.4 → 696.2 KB
- /pricing900.6 → 484.4 KB
- /shuffle901.6 → 485.5 KB
- /lab955.7 → 539.5 KB
- /embed/halo-button866.2 → 54.2 KB
Total JavaScript per route in the two builds either side of the split, read from the build report. The scene sets are chunks of their own now — ten more chunk files than before it — so a route that renders no scene never downloads one, and the routes above lost 416–812 KB each. These are the figures measured when the split shipped; the report from the current build sits beside this page.
CSS budget per route
one stylesheet for the whole site. Any route adding a second one, or the sheet itself growing past the cap, fails the build rather than shipping quietly.
Own JS has had a ratchet since the budget table above; the stylesheet had none. The build emits one sheet every route loads, so a page's own CSS is zero — and the budget is exactly that zero, plus a cap on the sheet itself. #400, the trade-off in one sentence: there is no per-route critical CSS because the sheet is the critical CSS — 219 KB once, then cached everywhere, beats extracting 30 KB per route and shipping the runtime to do it. The same export harness that enforces the JavaScript budgets enforces this one, from the numbers in the build report.
Shared stylesheet
243.4 KB
the sheet set 155 routes load
Own CSS budget
0 KB
no route may add a stylesheet of its own
Sheet cap
290 KB
about a third above the measured sheet
Own CSS is zero for every route
The build emits one stylesheet that every route loads, so the most-shared CSS set is the whole sheet and a page adds nothing on top of it. The budget mirrors the own-JS ratchet: own CSS may not move off zero, and the sheet itself may not grow past the cap — the export harness fails a build that breaks either.
Measured: 155 routes, every one at 0 KB of own CSS, against a shared sheet of 243.4 KB.
No route is over the CSS budget at this commit.
What this page does not claim
- No Lighthouse score. Lighthouse was not run against this build — the sandbox that produced it has no browser runtime. A number would have to come from a real run, on a named machine, with the report kept; until that exists, this page prints kilobytes instead of a grade.
- No field metrics. There is no analytics on this site by design, so no LCP, INP or CLS percentiles exist to quote. Inventing them would contradict the rest of the site.
- No comparative claim. These numbers describe this build; they are not a statement about anybody else's.
- No claim that every scene is now cheap. The split moved the cost of a scene to the pages that render it: a component page still loads the set its scene lives in, and a catalog grid that previews many scenes loads several. What changed is that a page which renders no scene no longer pays for anyone else's.
If a Lighthouse run happens, the plan is a dated table here with the machine, the config and the report file — one run is an anecdote, a series is evidence, and the series is what the build report already gives us.
Related: the performance registry, the craft excerpts and the crawl surface.