I BUILDRANDOMTHINGSon purpose,
in public.
Hey — this is Captain Random. I build production software and experiment with how far I can push my imagination into the digital realm, bridging the gap between technology and the problems worth solving. This site is for everyone — here you can see real projects, real workflows, and honest evaluations of the tools I use and build. It's a new project, and it'll grow with every commit. Stick around and watch it take shape.
What's new
What I build,
and what gets solved
when I do.
AGENTIC AI & ARCHITECTURE
Building when code generation is free. How I architect agentic-first systems, what works in practice, what doesn't.
01RETAIL & HOSPITALITY OPS
23 years in operations and leadership across UK retail and hospitality. Real workflows, real failure points, real software-meets-floor knowledge.
02AI TOOL EVALS
Honest, practical assessments of the tools I'm experimenting and shipping with. Includes what didn't work.
03CREATIVE AI
AI music workflows, generative art, and video — for work and for play. Real output, shared as it's made.
04BUILD IN PUBLIC
Projects from idea to implementation. The process is the point — failures included. Shared live, in public.
05LEARNING LOG
What I'm currently studying and learning, and whether it was worth the time.
06Recent writing.
ga-telemetry shipped the same morning as the Phase 1.6 sitemap push — they're the same job
Two pull requests landed on 2026-06-20: a stdlib-only GA skill and an operator-side sitemap push. One queried Google Analytics. The other filed Request-Indexing nudges. Underneath both was the same question — did Google see this? That's one discipline, not two.
`mortgage-abandoned-about-above`: Title-Mangling, Claim Blocks, and the Corrective Pass That Held Fourteen Pillars Together
The Day 2 cron draft came with an unusable slug and three claim blocks that would have shipped unverified. Both got caught and corrected. That pattern — not just the gate, but the corrective pass — is what held a fourteen-pillar streak together.
The pipeline ran every day in July. Every published article started as a rescue.
Five publish events across July. Every one required a human to notice the cron had failed and pull a piece through by hand. The one exception — a two-day autonomous streak on 16–17 July — proved the pipeline can work. The rescue rate is the metric no one was tracking.
Zombie draft, dead zone, zero-draft cron: three failure modes from one misread index
Ten cron cycles between 30 June and 13 July produced exactly one ready draft while the skip counter climbed from 2 to 7. Three distinct failure modes were active simultaneously—a zombie IHT draft reaching its third PR, a dead-zone mortgage cluster that never re-drafted, and zero-draft mornings with clean exit codes. The root cause was identical in each case: draft.py could not tell failure from success.
AdSense re-review submitted: the last fix was deleting content, not adding it
AdSense rejected the UK Calculators site for low-value content on 10 July. The fix over fourteen days was real hub listings, six verified SVG diagrams, and a quality sweep that removed fabricated trust signals — not more pages. Most remediation write-ups budget for additions; this one ends with a deletion sprint.
The GSC and GA crons failed silently for two weeks. That's a telemetry blindspot, not a cron problem.
The nightly GSC and GA telemetry crons for UK Calculators had been dying every night since 20 June. On 4 July a Saturday morning review found the gap — fourteen days of dark data, no alerts, clean-looking logs. The fix took an afternoon. The monitoring lesson took longer.
Branded card names rot. /work's don't any more.
Two corrections arrived within the same hour: one product had rebranded six months earlier, one client project couldn't be named publicly. Both pointed at the same design gap. Closing it required a policy, not a patch.
The cadence clock resets on zero-draft runs. The publishing schedule is manual rescue.
On 17 July the approval gate worked exactly as designed: the first multi-day autonomous streak since the pipeline launched. By 20 July I was writing another manual rescue. The 14-day cadence clock had reset again.
The Pipeline Conflated failed-* with Successful Publishes. Skipped Hit 7.
Ten cron cycles from 30 June to 13 July produced one ready draft and zero auto-publishes while every log showed a clean exit. The mechanism: draft.py treated failed-* index entries identically to successful publishes — permanently consumed. Skipped climbed from 2 to 7 before the root cause surfaced.
Workshop.
Build log.
In your inbox.
What shipped, what broke, what worked. No marketing. No sponsorships. Sent when there's something worth sending.








