Static-first publishing as a discipline
Updated:
Also available in: فارسی
Most personal sites do not need a runtime. They need files, checks, and a deploy step you can explain in one sentence.
Static-first publishing means the production artifact is HTML on disk. The server — if there is one — handles the exceptions: forms, webhooks, admin tools. Not page rendering. Not content queries. Not template compilation at request time.
What you gain
- Speed by default. No hydration tax, no framework boot, no layout shift from client rendering.
- Inspectable output. You can open
dist/en/writing/my-post/index.htmland see exactly what ships. - Cheap hosting. Any object store or CDN works. Scale is someone else's problem.
- A real review surface. Content changes are diffs. Translation pairing is a build error, not a production surprise.
What you give up
- Instant publish without a build. Acceptable. A two-minute CI run is cheaper than operating a CMS database.
- Per-request personalization. Not missed on a personal site.
- Plugin ecosystems. Replaced by typed code you own.
The discipline
Treat the build as part of the product. Translation validators, link checkers, and draft guards are not "nice to have" — they are how you keep a bilingual site honest without hiring an editor.
The contact form posts to /api/contact. Everything else is already HTML when the first byte leaves the CDN.