Site Build Stats
Large language models make it cheap to build software fitted exactly to the job at hand. Widely used frameworks are great, but when you don't need all their features, dropping down to something simpler is now easy. So in 2026, I migrated the site off Next.js onto Astro. It's still completely static with no server side rendering, nothing computed per request, but also now no unnecessary middleware. This also makes everything quite small: the fully static pages carry no JavaScript at all, and what weight the site does have is almost entirely from two interactive widgets. Everything below measures what a browser actually downloads, and is regenerated on every build.
Landing on the homepage downloads 81.9 KB gzipped. A static page here is 3.3 KB.
By file type
| Type | Gzipped | Raw |
|---|---|---|
| HTML | 121.4 KB | 366.1 KB |
| JavaScript | 49.8 KB | 160.6 KB |
| Images | 915.1 KB | 939.9 KB |
| Other | 149.4 KB | 153.9 KB |
| Total | 1.21 MB | 1.58 MB |
CSS is inlined into the HTML (no separate stylesheet requests): 3.5 KB gzipped, already counted within HTML above. These totals cover the site's own 37 files; the search bundle is measured separately below.
By page
| Route | Gzipped | Raw |
|---|---|---|
| /posts | 101.0 KB | 296.2 KB |
| / | 81.9 KB | 286.5 KB |
| /sports | 51.4 KB | 170.0 KB |
| /stats | 4.8 KB | 18.0 KB |
| /saved-on-hosting | 3.3 KB | 11.2 KB |
Each page counts only the HTML and JavaScript it actually loads, so fully static pages stay tiny; the pages with interactive islands (/, /sports) also pull a shared React bundle, and / the search widget on top of it. Images aren't included here; they're in the site total above. /postsrolls up all blog posts rather than counting as a single page.
Search
Search is Pagefind, which is static too: there's no search server, just an index the browser downloads a piece at a time. Almost none of it loads unless you actually search.
| When | Gzipped | Raw |
|---|---|---|
| On page load the search widget, wherever the box appears | 32.0 KB | 131.3 KB |
| On your first search the engine and this site's language index | 95.4 KB | 155.7 KB |
| Per query index and content chunks, a few of the 18 at a time | 99.2 KB | 98.8 KB |
The index and language payloads are already compressed on disk and for the chunks it reads slightly larger because gzip is actually adding framing. Pagefind also ships 343.4 KB across 6 files that nothing on the site ever requests so those bytes aren't counted above.