Writing & build logs.
Essays on software development, web builds, and AI tooling. Plus build notes from what I'm actually working on right now.
The prompt that made Haiku hallucinate, every single time
Every iteration of the UK Calculators redraft loop produced the same failure: Haiku returning plausible-sounding figures with no real source. The fix wasn't better prompting. It was removing the question entirely.
Three newsletter hotfixes. The events table found all of them.
The newsletter form went live on 9 June. I subscribed from my own address and got nothing. No row, no email, no error. Three consecutive bugs followed, all found the same way: reading the events log, not the code.
No Composer, no autoloader: the newsletter backend cPanel rewarded
The deployment target was a cPanel shared host with FTP access. Composer wants SSH or a committed vendor directory. Neither fits cleanly on shared hosting. The alternative was require_once, six PHP classes, and a 190-line schema that doubles as documentation. Six sprints in, the backend is completely understood.
One osascript harness, two consumers — how skipping Archon kept the article pipeline stack composable
After the variant-picker shipped, the next call was architectural. Route thesis generation through Archon, or build a project-owned harness and own the primitive. The harness won. What emerged was a two-consumer pattern — thesis generation and voice rewriting off the same base — that Archon would have made awkward.
Scheduling articles through Telegram taught me that cron is the wrong model
The article pipeline pipeline could draft and voice-fix articles but had no scheduling layer. Adding one took six sprints, not because the cron was hard but because scheduling through Telegram needs to capture intent, not timestamps. The grammar parser, the 2×2 keyboard, and the 48-hour grace policy are the same design decision expressed three different ways.




