ONLINE · OPEN FOR FREELANCE BUILDS// BUILDING IN PUBLIC
$ whoami → captain-random

I BUILDRANDOMTHINGS

YEARS WEB DEV
20+yrs
YEARS IN RETAIL
23yrs
POSTS PUBLISHED
251articles
RECENT COMMITS
324/30d

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.

Recent writing.

Essays, notes & build logs
Build LogGodot
#01
2026-09-216 min read

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.

Read post
Build LogTesting
#02
2026-09-215 min read

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.

Read post
Build LogGodot
#03
2026-09-206 min read

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.

Read post
Build LogTesting
#04
2026-09-196 min read

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.

Read post
ObservabilitySEO
#05
2026-08-235 min read

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.

Read post
Build LogUKCalculators
#06
2026-08-235 min read

`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.

Read post
Build LogContent Pipeline
#07
2026-08-235 min read

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.

Read post
Build LogContent Pipeline
#08
2026-08-235 min read

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.

Read post
AdSenseSEO
#09
2026-08-225 min read

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.

Read post

Build log.
In your inbox.

What shipped, what broke, what worked. No marketing. No sponsorships. Sent when there's something worth sending.

Plain-text only. Unsubscribe in one click. We store your email, the date you confirmed, and a one-way hash of your IP (for abuse triage). Nothing else. Privacy policy.