This domain has pointed at a reverse proxy that served nothing for six years. Every plan for it died the same death: after the next migration, I'll set up the blog properly. There was always a next migration.

Why now

July 2026 was the month the excuses ran out. The whole portfolio — 21 domains, six Hetzner boxes — got consolidated into one working directory with machine-readable inventory: every domain, server, mailbox and DNS record lives in a CSV with a source and a last_updated_at column, refreshed by scripts instead of memory.

Inbound mail moved off the last paid provider onto a bespoke MTA — a one-file Bun daemon with its own webmail, spam scoring and a token-gated API that agents can read. When your mail server is a file you wrote, a blog stops being infrastructure and starts being an afternoon.

The stack

The engine is borrowed from the newest rewrite in the fleet: Bun + Hono + bun:sqlite, server-side rendering via tagged template literals. One service, one dependency, no bundler, no JSX, no build step. The whole thing — routing, post store, admin editor, GitHub OAuth, first-party analytics, sitemap, JSON-LD — is about 1,500 lines across seven files.

  • Posts are JSON sections in SQLite, seeded from a canonical content.json — prose edits go live on deploy, the in-browser editor works between deploys.
  • Static pages are inert HTML files — drop pages/<slug>.html in the repo and it is live at /<slug>, in the nav and in the sitemap.
  • Analytics is a first-party beacon writing to the same SQLite file — no third-party script, no cookies beyond the session, bots excluded by the honest signals only.
  • SEO is structural: every route renders through one layout, so canonical URLs, OpenGraph and a connected JSON-LD graph exist by construction, not by checklist.
<!--meta {
  "name": "about",
  "title": "About",
  "description": "Who runs martymonero.com and why."
} -->
<main id="main" class="page">…</main>
A page declares its own metadata; the sitemap, nav and structured data all derive from the same scan.

What to expect

Build logs from the fleet: the bespoke mail stack and what running your own MX in 2026 actually involves; search-traffic experiments across a network of collector price guides; browser-native retro tooling over at hexenwerkzeug; and the automation that keeps a one-person operation semi-passive.

No cadence promises — that's how the six years happened. But the pipeline is now shorter than the excuse.