Category
Homelab
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 →Browse all series →
See every reading path on the site.
- ·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.

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

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

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

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

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

- ·3 min read
Why My NVMe Benchmark Was Misleading
A slow region on one SSD looked like wear. Matching offsets, data state, temperature, and concurrent load changed the diagnosis.

- ·3 min read
Restoring a VM Is Not the Same as Restoring a Service
A virtual machine can boot while its database, workers, or network assumptions remain broken. An isolated restore needs application-level proof.

- ·3 min read
Where Campsite Runs: VMs, Placement and Failure Domains in My Homelab
Campsite runs across three virtual machines on two XCP-ng pools, with storage on a Synology NAS and nothing exposed to the internet. Here's what lives where, why, and what breaks when each machine goes away.

- ·3 min read
Why I Self-Host Campsite for My AI Agents
My AI agents post updates, read notes and reply in threads the same way people do. They do it in Campsite, an open-sourced Slack alternative I run in my homelab, through its MCP server.
