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.
The proxy proved it; Meshy delivered it — Mixamo was never in the chain
The plan called for Mixamo at step three of five. Instead: Meshy API, Blender retarget, Godot import — two tools, one afternoon, no Mixamo. The proxy rig was why the swap cost nothing.
Three tests broke when I turned the flag back on. The fixtures were reading from the real database.
Turning auto_mode back on in production on 2026-09-17 broke three tests in tests/the article pipeline/test_post.py with assert 0 == 2. No code had changed. post_today opens its own database connection to read config, and the tests had never controlled that connection. They passed for months because production state happened to match the test assumption.
The proxy rig that made Mixamo optional
Building a 22-bone stand-in to test the Godot avatar pipeline revealed the actual bottleneck: Mixamo, the auto-rigger with no API. A Meshy API key arrived the next day and scripted around it entirely.
I turned a flag back on and broke three tests that weren't testing the flag
On 2026-09-17 I switched auto_mode back on in production. The next morning, three tests in test_post.py were red — assert 0 == 2. No code had changed. The tests weren't testing auto_mode; they were reading it from the operator's the article pipeline.db and calling that isolation.
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.
Workshop.
Build log.
In your inbox.
What shipped, what broke, what worked. No marketing. No sponsorships. Sent when there's something worth sending.








