Performance & delivery
The weight of every page, measured
155 routes, each one's own JavaScript separated from the bundle every page shares, read out of the compiled entry files. The "why this size" column is derived from the import graph, not written by hand — it follows the route's own imports and lists the client modules it pulls in, with their line counts.
Measured from the completed build on 2026-09-12 06:33 UTC (build eoCv1yhT4VQe) by npm run build && npm run measure, and committed as docs/build-report.json. The numbers are not re-derived while the page renders, because a build cannot see its own output.
Routes measured
155
136 with a prerendered body
Shell baseline
690.1 KB
the file set of /accessibility, which every other route adds to
Heaviest own JS
266.9 KB
/components/[slug]
Routes at baseline
91
pages that add no chunk of their own
Heaviest HTML
1168.1 KB
health.html
JS chunks
76
3087.1 KB emitted in total
CSS
243.4 KB
2 stylesheets
Fonts
80 KB
2 files, all preloaded
Prerendered HTML
24599.7 KB
across 498 files
| Route | Own JS | Total JS | CSS | HTML | Files | Rendering | Why this size |
|---|---|---|---|---|---|---|---|
| /components/[slug] | 266.9 KB | 957 KB | 243.4 KB | — | 9 | on demand | asset-detail.tsx · 2908 linesuser-feedback.tsx · 66 lines |
| /admin/moderation | 193 KB | 848.7 KB | 243.4 KB | 39.6 KB | 10 | prerendered | admin-ui-2.tsx · 879 linesadmin-ui-4.tsx · 754 lines |
| /admin/pipeline | 164.3 KB | 820 KB | 243.4 KB | 35.9 KB | 10 | prerendered | admin-ui-2.tsx · 879 lines |
| /admin/audit | 159.3 KB | 815 KB | 243.4 KB | 31.1 KB | 10 | prerendered | admin-ui-2.tsx · 879 lines |
| /admin/content | 159.3 KB | 815 KB | 243.4 KB | 50.9 KB | 10 | prerendered | admin-ui-2.tsx · 879 lines |
| /admin/schedule | 159.3 KB | 815 KB | 243.4 KB | 48.7 KB | 10 | prerendered | admin-ui-2.tsx · 879 lines |
| /admin/search | 159.3 KB | 815 KB | 243.4 KB | 32 KB | 10 | prerendered | admin-ui-2.tsx · 879 lines |
| /admin/duplicates | 158.1 KB | 813.8 KB | 243.4 KB | 35.8 KB | 10 | prerendered | admin-ui-4.tsx · 754 lines |
| /admin/escalation | 158.1 KB | 813.8 KB | 243.4 KB | 32 KB | 10 | prerendered | admin-ui-4.tsx · 754 lines |
| /admin/exports | 158.1 KB | 813.8 KB | 243.4 KB | 38.3 KB | 10 | prerendered | admin-ui-4.tsx · 754 lines |
| /admin/stats | 158.1 KB | 813.8 KB | 243.4 KB | 39.4 KB | 10 | prerendered | admin-ui-4.tsx · 754 lines |
| /admin/theme | 158.1 KB | 813.8 KB | 243.4 KB | 42.4 KB | 10 | prerendered | admin-ui-4.tsx · 754 lines |
| /admin/ops | 132.4 KB | 788.1 KB | 243.4 KB | 37.5 KB | 10 | prerendered | page.tsx · 173 lines |
| /admin/assets | 127.3 KB | 783 KB | 243.4 KB | 269.3 KB | 10 | prerendered | page.tsx · 230 lines |
| /lab | 125.6 KB | 815.7 KB | 243.4 KB | 202.3 KB | 9 | prerendered | cards.tsx · 509 lineslab-tools.tsx · 491 lines |
| /admin/settings | 125.5 KB | 781.2 KB | 243.4 KB | 34.6 KB | 10 | prerendered | page.tsx · 136 lines |
| /admin/prompts | 124 KB | 779.7 KB | 243.4 KB | 310 KB | 10 | prerendered | page.tsx · 128 lines |
| /admin | 119.9 KB | 775.6 KB | 243.4 KB | 53.4 KB | 9 | prerendered | page.tsx · 168 lines |
| /admin/billing | 119.9 KB | 775.6 KB | 243.4 KB | 48.6 KB | 9 | prerendered | page.tsx · 60 lines |
| /admin/changelog | 119.9 KB | 775.6 KB | 243.4 KB | 34.1 KB | 9 | prerendered | admin-ui-3.tsx · 821 lines |
| /admin/health | 119.9 KB | 775.6 KB | 243.4 KB | 1168.1 KB | 9 | prerendered | page.tsx · 149 lines |
| /admin/inspector | 119.9 KB | 775.6 KB | 243.4 KB | 56.2 KB | 9 | prerendered | admin-ui-3.tsx · 821 lines |
| /admin/mobile | 119.9 KB | 775.6 KB | 243.4 KB | 56.8 KB | 9 | prerendered | page.tsx · 92 lines |
| /admin/notifications | 119.9 KB | 775.6 KB | 243.4 KB | 38.1 KB | 9 | prerendered | admin-ui-3.tsx · 821 lines |
| /admin/rerun | 119.9 KB | 775.6 KB | 243.4 KB | 44.9 KB | 9 | prerendered | admin-ui-3.tsx · 821 lines |
| /prompts/[slug] | 89.2 KB | 779.3 KB | 243.4 KB | — | 9 | on demand | prompt-detail.tsx · 299 lines |
Showing the 26 heaviest of 155 measured routes. The rest are lighter than the last row here; the threshold is a display limit, not a judgement.
How to read a budget
“Own JS” is what a route adds on top of the lightest route's file set, which is 690.1 KB in this build, and “Total” is everything it loads. The two columns answer different questions: own tells you what a page brought with it, total tells you what a reader downloads on a cold visit. The bundle-splitting page shows the layout import that changed that arithmetic for pages which render no demo at all.
What ships where →Every page in this section
One item in this section is not a page: #412 puts the measured size change on every changelog entry from 2026-09-10 onward, including the entry that describes the fix itself — see the changelog.
- Font loading#401Two subsets instead of nine, both preloaded — before and after numbers.
- Zero-JS showcase#402What the site looks like with JavaScript switched off, read from its own HTML.
- Lazy mounting#403Demos mount when you scroll near them, and the trade-off that creates.
- No images#404Why there is no image pipeline, and what would break the rule.
- Cache headers#405Every rule this build serves, in order, plus the invalidation plan for a CMS.
- Bundle splitting#406What ships where, and the layout import that put 485 KB on every page.
- Blur budget#407Every backdrop-blur in the project, classified by how much surface it covers.
- Layer inspector#408Mount a demo and read every property it animates, classified by what the compositor can take.
- Prefetch strategy#409Why catalog cards wait for intent, with the payload of one prefetch measured.
- Timers & listeners#410Registrations against cleanups, file by file, from the source.
- Device matrix#411The three device classes this site is tested against — and what has not been run.
- Build report#413What the production build compiles in: routes, chunks, fonts, HTML.
- Service worker plan#414Offline for the catalog after the API lands, and why it is not shipped yet.