Build LogAnalytics
#66
2026-08-024 min read

One visitor, seven minutes, no exit: the data that wrote the brief

A GA4 segment query ran before any design work started on /work/, the homepage, or the contact page. What it found wasn't a vague underperformance signal — it named a specific gap. Every build that followed was a direct response.

Read post→
SEOAdSense
#67
2026-08-025 min read

Seven of eight green, still rejected: the AdSense hub-listing gap the checklist doesn't cover

ukcalculators passed every automated AdSense readiness check — 78.6% indexed, eight pillar articles live, image diversity closed. Seven of eight green. Google rejected it for Low value content anyway. The issue wasn't content depth. It was navigation: pillar pages with no hub listing are orphans a reviewer can't reach.

Read post→
DevOpsPrivacy
#68
2026-08-025 min read

The pre-commit hook that exists because four lines made it to the live site

A build-log article shipped with an absolute path in a plist example: the macOS username, live on the site, publicly indexed. The immediate fix was four file edits. The structural fix was a hook that enforces the constraint at commit time.

Read post→
Build LogContent Pipeline
#69
2026-08-016 min read

Five articles shipped in July. Every one of them needed a hand.

July's cadence log records five published articles. Behind four of them is a distinct failure mode — composer crash, checklist casualty, CLI error, day-cap, or coverage-screening gap — that the operator patched by hand. The July 17 exception shows what the pipeline looks like when everything holds; the rest of the month shows what it looks like when the operator is the error-correction layer.

Read post→
Build LogDevOps
#70
2026-08-015 min read

Fourteen nights of missing telemetry: the four-part skeleton every new skill now inherits

The GSC and GA nightly crons had been logging clean exits and producing nothing for a fortnight. Found out on a Saturday. The fix was straightforward; what it exposed was a pattern gap: three telemetry reads with no single surface for their output. The skeleton that closed that is now the template every new read inherits.

Read post→