This site deploys as a folder of HTML files to the same shared hosting that runs a thousand WordPress blogs. There is no Node server, no container, nothing to patch at 2 a.m. And yet it accepts comments, sells work, files support tickets, and rebuilds itself when the content changes. The trick is refusing to choose between static and dynamic.
Split by what the reader needs§
Everything SEO-critical — essays, case studies, the copy on this very page — is baked at build time from the database. Everything conversational — comment threads, view counts, form submissions — is fetched or written client-side against Supabase, with row-level security as the actual wall rather than a server middleware pretending to be one.
The database is the backend. The build step is just a very thorough cache warmer.
Publishing without a server§
When a post is published, an edge function pokes a GitHub Action; the Action rebuilds the export and ferries it to the host over FTPS. Two minutes later the new essay is plain HTML in a folder, indistinguishable from a site hand-written in 1998 — except it was assembled by a robot with excellent taste in typography.
The constraint turned out to be the feature. Static hosting forces every dynamic pathway to justify itself, and most of them, examined honestly, were never dynamic at all.
Letters to the editor
Correspondence