JDWLab Build Log
The lab's own blog, rescued from a WordPress container and reborn as a static Astro site on a Cloudflare Worker.

The build log ran as WordPress and MariaDB inside the lab, which meant a database, PHP, an OAuth plugin and a public attack surface just to serve eight posts. In July 2026 it was exported through the WordPress API, converted to Markdown and rebuilt as an Astro site served by an assets-only Worker, with every original permalink and media path preserved so nothing 404s.
Architecture downgrade as upgrade
Database and PHP replaced by Markdown in git. Hosting cost to roughly zero. And the lab's blog no longer depends on the lab being up.
Guardrails
The permalink field is validated by the same regular expression in the Astro content schema and in the CMS field definition, so the browser editor cannot produce content the build would reject. A WordPress-compatible slug function keeps category URLs matching the old ones. Two authoring paths exist: a repo-local publishing skill, or browser editing through Sveltia CMS committing straight to the main branch.
The voice guide
The publishing skill contains a written style specification derived from the existing posts: Australian spelling, comma-joined clauses, parenthetical self-deprecation and budget asides, no em-dashes, no tutorial second person. It ends with the test: does this sound like a mate in InfoSec telling you what he did on the weekend? It also enforces a build verification step and a human approval gate, and it never edits a published permalink.
Screenshots



