← All posts

How this site is built

A static Astro site, posts written as Markdown, and Cloudflare Pages deploying every push. No database, no CMS, nothing to patch.

astrocloudflaremeta

This site is deliberately boring infrastructure. I spend my days on systems that have to stay online, so the place I write about them should need no attention at all.

The stack

  • Astro renders every page to static HTML at build time. The homepage, this blog and the RSS feed are all plain files by the time they reach you.
  • Markdown for posts. Each post is one file in src/content/blog/, with a few lines of front matter for the title, date, description and tags.
  • Cloudflare Pages builds and serves it. The domain lives on Cloudflare too, so DNS, TLS and hosting sit in one place.
  • GitHub holds the source. Pushing to main is the only publish button.

Writing a post

A post is a file like this:

---
title: Notes on running agents behind NAT
description: What it takes to keep a local agent reachable from anywhere.
date: 2026-11-02
tags: [mercury, networking]
---

The body goes here, in plain Markdown.

Set draft: true in the front matter to keep a post off the live site while it’s in progress. Drafts still show up locally with npm run dev.

What happens on push

  1. GitHub tells Cloudflare Pages about the new commit.
  2. Pages runs npm run build, which turns every Markdown file into a page, refreshes the sitemap, the RSS feed and /llms.txt.
  3. The new build goes live on shehzen.com within a minute or two. Pushes to any other branch get their own preview URL first.

That’s the whole system. If something here breaks, it will be because I broke it in a commit, and the previous deploy is one click away.