Web · 2026
This site
The one codebase here I can hand over in full, since my production work is under NDA. Server Components are the default and I only cross the boundary where crossing it buys something: the case-study route is an async Server Component that awaits its params, highlights its code with Shiki on the server behind the server-only package, and hands the client finished HTML — so the tokenizer never reaches the browser. Every route is prerendered; the ones that quote a figure derived from a date revalidate hourly, so the number stays right without a redeploy. It also carries the record of a layout-shift bug I caused and then found properly: the case accordion animated flexGrow, which is a layout property, and my first hypothesis about the cause was wrong. It is fixed; the note stays because the diagnosis is the interesting part.
What it was for
Where the server/client boundary actually pays for itself — and that a client component is still prerendered, so "use client" spends bundle, not first paint.
- Next.js
- React
- Server Components
- TypeScript
- Tailwind CSS
- Shiki (build-time)
- ISR