Skip to content

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

“Own JS” is what a route adds on top of the lightest route's file set — the shell — and “Total” is everything it loads. Both are read from the compiled entry manifest for each route. Module attribution is not cost: /lab/layers shows an own figure of hundreds of kilobytes because it mounts a demo through an imported component, which is exactly the weight a reader would fetch.
RouteOwn JSTotal JSCSSHTMLFilesRenderingWhy this size
/components/[slug]266.9 KB957 KB243.4 KB9on demandasset-detail.tsx · 2908 linesuser-feedback.tsx · 66 lines
/admin/moderation193 KB848.7 KB243.4 KB39.6 KB10prerenderedadmin-ui-2.tsx · 879 linesadmin-ui-4.tsx · 754 lines
/admin/pipeline164.3 KB820 KB243.4 KB35.9 KB10prerenderedadmin-ui-2.tsx · 879 lines
/admin/audit159.3 KB815 KB243.4 KB31.1 KB10prerenderedadmin-ui-2.tsx · 879 lines
/admin/content159.3 KB815 KB243.4 KB50.9 KB10prerenderedadmin-ui-2.tsx · 879 lines
/admin/schedule159.3 KB815 KB243.4 KB48.7 KB10prerenderedadmin-ui-2.tsx · 879 lines
/admin/search159.3 KB815 KB243.4 KB32 KB10prerenderedadmin-ui-2.tsx · 879 lines
/admin/duplicates158.1 KB813.8 KB243.4 KB35.8 KB10prerenderedadmin-ui-4.tsx · 754 lines
/admin/escalation158.1 KB813.8 KB243.4 KB32 KB10prerenderedadmin-ui-4.tsx · 754 lines
/admin/exports158.1 KB813.8 KB243.4 KB38.3 KB10prerenderedadmin-ui-4.tsx · 754 lines
/admin/stats158.1 KB813.8 KB243.4 KB39.4 KB10prerenderedadmin-ui-4.tsx · 754 lines
/admin/theme158.1 KB813.8 KB243.4 KB42.4 KB10prerenderedadmin-ui-4.tsx · 754 lines
/admin/ops132.4 KB788.1 KB243.4 KB37.5 KB10prerenderedpage.tsx · 173 lines
/admin/assets127.3 KB783 KB243.4 KB269.3 KB10prerenderedpage.tsx · 230 lines
/lab125.6 KB815.7 KB243.4 KB202.3 KB9prerenderedcards.tsx · 509 lineslab-tools.tsx · 491 lines
/admin/settings125.5 KB781.2 KB243.4 KB34.6 KB10prerenderedpage.tsx · 136 lines
/admin/prompts124 KB779.7 KB243.4 KB310 KB10prerenderedpage.tsx · 128 lines
/admin119.9 KB775.6 KB243.4 KB53.4 KB9prerenderedpage.tsx · 168 lines
/admin/billing119.9 KB775.6 KB243.4 KB48.6 KB9prerenderedpage.tsx · 60 lines
/admin/changelog119.9 KB775.6 KB243.4 KB34.1 KB9prerenderedadmin-ui-3.tsx · 821 lines
/admin/health119.9 KB775.6 KB243.4 KB1168.1 KB9prerenderedpage.tsx · 149 lines
/admin/inspector119.9 KB775.6 KB243.4 KB56.2 KB9prerenderedadmin-ui-3.tsx · 821 lines
/admin/mobile119.9 KB775.6 KB243.4 KB56.8 KB9prerenderedpage.tsx · 92 lines
/admin/notifications119.9 KB775.6 KB243.4 KB38.1 KB9prerenderedadmin-ui-3.tsx · 821 lines
/admin/rerun119.9 KB775.6 KB243.4 KB44.9 KB9prerenderedadmin-ui-3.tsx · 821 lines
/prompts/[slug]89.2 KB779.3 KB243.4 KB9on demandprompt-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 →