the archive
Writing
Everything I've written, newest first. Deep dives and field notes on AI, .NET, system design, and the home lab.
k3s: Kubernetes That Fits in a Homelab
k3s gives a homelab the same orchestration primitives as production Kubernetes, at a fraction of the hardware cost — the honest head-to-head.
Consistent AI-generated covers for a static blog
Brand consistency with AI images isn't a prompting problem — it's a pipeline problem. Here's the one I built in a weekend.
Using AI to hunt homelab deals in South Africa
Finding a good deal on secondhand hardware takes digging. Pointing an AI agent at it got me three k3s nodes for less than one new one would've cost.
I Just Wanted Two Terminals to Talk to Each Other
The thing that started the-bureau wasn't a vision for agent orchestration. It was a Linux box I didn't want to babysit.
Skills vs MCP: when 50 tool calls is the smell
45 MCP tools and the parameter fatigue to match — forever tweaking arguments to do something simple. The fix was a skill that read my grudging docs.
Ship the agent's code review, then ship an agent to doubt it
A single agent pass is plausible-but-unverified. The fix isn't more prompting — it's a separate agent whose only job is to refute the first one.
I gave Claude an ESP32
I gave Claude an ESP32 and four stepper motors. The loop ran. The clearance didn't.
The single ConnectionMultiplexer that wasn't the problem
Reads spiking from 1ms to 3 seconds under load looked like a connection-pool problem. It wasn't Redis — two configs we never read and a starved thread pool.
The Tronxy that didn't want to live: a Klipper conversion
I spent three evenings fighting the undocumented v10 board to prove I could — the board that just worked in one try had been in storage the whole time.
Trust in AI is at an all-time low and your tests are why
84% of developers use AI tools. 46% don't trust the output. The gap isn't a PR problem — it's a testing problem, and I watched it happen.
I gave an LLM root and lived to write about it
I handed a language model root on my gaming PC. It restarted my network to investigate the packet loss it had just caused. Hard lessons followed.
Don't underestimate SQLite: a benchmark I didn't expect
I pointed SQLite at 82,000 documents, expected it to tap out, and had to double-check my benchmark code.
Your conversation doesn't survive the terminal
Inspiration strikes in your browser; your agent lives in the terminal — here's the handoff schema that bridges the gap.