Blog post
The Trade-offs of a Static-First Site
What a fully static deploy gives up, and why we still chose it over an edge runtime.
Static means every URL is a file in dist/. That removes a long list of failure modes — but it also rules out a few
things people sometimes assume the site can do.
What goes away
- Per-request personalization. The site does not know who is viewing it.
- Live previews of unpublished content without a build. A new post needs
bun run build(or a branch deploy) to appear at a URL. - A/B tests that branch on the server. Anything dynamic moves to the client and runs against a public endpoint.
What we get back
- Cache rules become trivial. Cloudflare serves the same bytes to every visitor, indefinitely, until the next deploy.
- The blast radius of a bad change is the next build, not the next request.
- Local dev matches production almost exactly, because there is no runtime layer to diverge from.
When we would change our mind
If a feature genuinely needs server-side context — geolocated content, authenticated dashboards, signed URLs — that feature gets its own service rather than reshaping the marketing site. The split keeps both halves small.