Why this site has no backend
I am hired to make systems simpler to run. It would be strange to build my own site as a system that needs running.
So the constraints were fixed before the first line: cheap to host, fast on a phone in a train, impossible to break at two in the morning, and still legible in five years. Those constraints rule out a server.
The first load is about 70 KB — 6.6 KB of HTML, 9 KB of CSS, two font files. No JavaScript.
What runs
- Astro builds static HTML. Component syntax without shipping a framework to the browser.
- Content collections: posts are Markdown files. The build validates the front matter (title, description, date, draft flag) and generates pages and RSS from the same source.
- Cloudflare Workers static assets: a push builds the site and publishes it to the edge. No container, no server.
- One Worker of twelve lines turns
wwwinto a 301 to the apex; everything else it serves is a file that already existed. - Self-hosted fonts: no request to a font CDN, no third-party cookie.
- Cookieless analytics: page views without a consent banner.
Why not WordPress
WordPress is the right answer far more often than developers admit. It gives editors a familiar interface, a plugin for everything, and a large pool of people who can maintain it. When five people publish content every day, a static site is the wrong tool.
For a single author with a handful of pages, though, WordPress brings a PHP runtime, a MySQL database, a login page exposed to the internet, plugins that need updating, and a hosting bill that follows. That is a second system to maintain so that I can type text into a form instead of into a file.
Why not Next.js
Next would work. It also brings a server runtime, a routing framework and build configuration for features this site does not have: no authentication, no per-request personalisation, no database. Astro ships HTML and a stylesheet — that is the entire deployment.
Why the blog is a folder
src/content/blog/en and src/content/blog/fr. Each post is a Markdown file
with a header. The build turns them into pages, and a missing title fails the
build instead of shipping broken metadata. No database, no admin panel, nothing
to log into.
The trade-off is real: publishing means committing. That is a requirement, not an inconvenience — every article is versioned, and written as if someone will read it later.
Bilingual without a translation service
English at /, French at /fr/. Both are written by hand; nothing is
machine-translated. A page declares hreflang only when the other language
actually exists. Declaring an alternate that returns 404 is a common mistake, and
search engines learn to ignore it.
Articles are written in one language, not both. A mediocre translation is worse than an honest gap.
When I would not do this
- Fifty editors → WordPress or Django CMS. Editors matter more than build times.
- Accounts, payments, permissions → a real backend, and a database.
- Real-time collaboration → a server, and probably a queue.
- Content that changes per visitor → server-side rendering.
The stack follows the constraint. Most sites I build for clients are not this one: they need an admin, a login, an integration, a workflow. This one needs a domain name.
What it costs
The domain, roughly eleven euros a year. Hosting nothing. Build time under a second. There is nothing to patch, nothing to monitor, and no bill that grows with traffic.
That is the point: the cheapest system is the one that does not run.