The reading list
Essays, tech notes, and the in-between.
Reading paths
Read end to end.
Building My Homelab
Inside my home infrastructure: the hardware, network topology, storage and virtual machines, followed by the move to 10G networking and two Minisforum XCP-ng hosts.
Start →Campsite for Agents: Self-Hosting a Team Chat for AI Coworkers
A five-part series on running Campsite, an open-sourced Slack alternative with an MCP server, in my homelab so AI agents can post and read alongside people: why self-host, where it runs, deploying it with Kamal, the in-progress move from MySQL to PostgreSQL with Patroni, and how coding agents did much of the work.
Start →Local AI Toolkit: Runtimes, GPU Backends, and Model Files
Three practical primers on choosing llama.cpp, vLLM, or LM Studio; understanding CUDA, ROCm, Vulkan, and Metal; and reading GGUF, quantization, dense-model, and MoE labels. A companion to the standalone model-architecture guide and Running AI Yourself.
Start →Running AI Yourself: Where the Time and Memory Go
Six practical explainers following a coding assistant from its first repository question to a shared local service: inference, memory budgets, PCIe topology, prompt caching, scheduling, and hardware placement.
Start →Browse all series →
See every reading path on the site.
- Homelab·3 min read
Building My AI Shed: A 10G Server Backbone and 160 GB Across Two Minisforum Hosts
Why I moved my homelab to a 10G server backbone: an always-on AI shed on my tailnet, where agents, builders and local models share fast storage. Includes measured throughput.

- Homelab·3 min read
Letting Coding Agents Build It: An Orchestrator, Parallel Lanes and Verification Over Trust
Much of the Campsite work in this series was implemented by coding agents in parallel worktrees, coordinated by another agent. What made that work was re-checking every result before it merged, and learning from the times it went wrong.

- Homelab·3 min read
From MySQL to PostgreSQL with Patroni HA: A Migration in Progress
Campsite is moving from MySQL to PostgreSQL. The test suite now passes on both, a small Ruby copier replaced pgloader, and a Patroni cluster is live across three hosts. Production still runs on MySQL, and here's why.

- Homelab·3 min read
Deploying Campsite with Kamal: Split Configs, Exact-Commit Images and a Secrets Preflight
Six Kamal configs for six runtimes, a background worker that can't be started by accident, images tagged with the exact commit they came from, and a secrets check that never prints a value.

- AI·3 min read
Agent Config, Installed Tool, and Live Behavior Are Three Different Things
A model or workflow can be correct in source and still be absent from the installed runtime. Verify each layer before claiming it works.

- Homelab·3 min read
An SLO Needs a User-Visible Alert
A target and a Prometheus query are only part of an SLO. The measurement must run, missing data must matter, and alerts must reach someone.

- AI·3 min read
Running Independent AI Research Trials
Two isolated research environments can work from the same source material while keeping their analysis independent and reviewable.

- Homelab·3 min read
A Backup File Is Not a Restore Drill
A schedule, a completed backup job, a verified artifact, and a usable restore are different claims. Here is how to keep their evidence straight.

- Engineering·3 min read
The PostgreSQL Spike That Found the Work
A database adapter spike is valuable when it turns an intimidating migration into a measured inventory of incompatibilities and tests.

- Engineering·3 min read
Safe Retries for Email Automation
An engineering pattern for preventing duplicate drafts when a mail provider may have completed a request but the application lost the response.
