Writing & build logs.
Essays on software development, web builds, and AI tooling. Plus build notes from what I'm actually working on right now.
AdSense said 'low value content'. Mapping that to actual pages took a day.
The ads.txt was authorised. The rejection still came back 'low value content' on 10 July — a content quality judgement that maps to three specific gaps: thin surfaces, empty hub listings, and zero images across 38 articles. Passing the re-review required treating Google's inventory-value policy as a content brief, not a configuration checklist.
Five days, ten operator publishes, two cron drafts: where the ukcalculators pipeline actually breaks
Running a 14-day pillar schedule with a parallel operator-publish path made the bottleneck legible: the cron fires on schedule, triage completes, 150 clusters rank — then the ground-and-extract stage drops everything silently. The schedule is not the problem.
Ten of thirteen: why verification without correction is just expensive triage
The morning cron produced a draft with 10 of 13 sentences passing the verifier. Without a corrective step, that's a triage ticket, not a publish. Four days of cron output showed the rescue pattern fires once in four — and what covers the other three.
150 clusters ranked, zero drafted: ground attrition is the load-bearing constraint
Five days of autonomous publishing logs made the pattern clear. The cron fired on schedule every morning. Ground attrition killed the drafts before the drafter ran. One usable cron draft across five days; ten articles published via a different route entirely.
Seven navigation phases. The prerequisite chips encoded the one thing the others couldn't.
The learning navigation spec ran seven phases from foundational structure to site-wide search. P5 — prerequisite chips, a static 'Read first' link at each chapter head — was the smallest implementation. It was also the highest return: every other phase encoded page structure, and P5 encoded reader intent.




