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 NAPA SEASON blurb gave Suno the credit. That was the obvious one.
Five copy edits across captainrandom.co.uk in six weeks. None were about finding better words. Each one was correcting the record on who made what — the album, the production chain, the catalogue, the offer.
The third AdSense rejection forced the integrity sweep the site already needed
Three 'Low value content' verdicts in six weeks, ads.txt clean each time. The root cause wasn't a configuration gap — fabricated trust signals, undated stale rate articles, and thirty-eight pillar pages with zero images. AdSense named the problem accurately.
Accurate to me, misleading to you: every copy fix this month was the same bug
Every copy change I made to captainrandom in July traced back to the same failure mode: wording that was accurate to my intent and misleading to the person reading it. That’s a different bug from a factual error. Factual errors you catch by verifying; this one only shows up when you read from the wrong seat.
Ten drafts at 08:35, zero at 08:22: ground-fetch quality was always the variable
Four days into the 14-day pillar sprint, the cron ran on time, ranked 150 clusters, and produced nothing. On day six, it produced ten drafts. The schedule hadn't changed. The source layer had.
The git hook matters more than the /privacy page
Adding a /privacy route tells users what you do with their data. A pre-commit hook stops your own data leaking into published content. On a personal site these are different problems with different solutions: one prevents incidents, the other documents them.




