Homelab as Production/Series launch

I Spent 2-3 Weeks Talking to AI Agents and Getting Nowhere. Then I Built a Production Platform in 2.5 Weeks.

The story behind Homelab as Production — and what I actually learned about working with AI.

My wife is not always happy about the 3am coding sessions.

I’m a software engineer of 8 years, recently turned engineering manager. Seven years at NASA JPL, three at Terran Orbital. I’ve done software engineering, app development, model-based systems engineering, some flight software for Europa Clipper, and DevOps. The hobby projects don’t stop when the work day ends — they just move to a different desk.

A while back, I decided to build a proper homelab. Not “a few Docker containers on an old laptop” homelab. Production-grade: Kubernetes, GitOps, high-availability PostgreSQL, SSO on every application, a CI/CD pipeline that actually validates before merging, observability from day one. The kind of platform I’d build at work if I had full control of the stack.

I also wanted to learn Terraform. And I figured I’d use AI to help.


The Wrong Way First

Here’s what my setup looked like before I figured it out:

VS Code with the Cline extension — an AI coding agent that takes autonomous actions. Reads files, writes files, runs commands, chains operations together without you triggering each step. TaskMaster on top of that, an AI task management layer for breaking projects into subtasks. Several MCP servers configured because everyone said that was the move. Claude as the underlying model for all of it.

I had a docs/memory-bank/ directory full of files like activeContext.md and systemPatterns.md — generated by TaskMaster. I had 11 AI-generated standards documents in docs/standards/: Ansible standards, Kubernetes standards, Terraform standards, naming conventions, git workflow. Well-formatted. Thorough. Almost entirely disconnected from the actual state of my repository.

Sessions were hitting 100,000+ tokens and ending preemptively. The AI was doing things. I was watching. When things went wrong, I’d describe the problem and wait.

What I thought I was doing: using AI agents to write infrastructure code.

What I was actually doing: pressing buttons and hoping.

After 2-3 weeks of this, I had a repository full of AI artifacts and very little working infrastructure.


Stripping It Back

The fix wasn’t a better agent or a better prompt. It was removing layers.

I uninstalled Cline. Dropped TaskMaster. Cleared the MCP servers I didn’t understand. Started fresh with the Claude Code CLI — a terminal-first interface with no autonomous agent layer, no background task manager, no memory files I hadn’t written myself.

The immediate effect: I understood what was happening again. I could see the conversation. I could evaluate the output. When Claude produced something wrong, I could trace exactly why.

The secondary effect: I started actually learning. When an agent had been doing things autonomously, I was observing. When I was writing the prompt, reviewing the output, and deciding whether to apply it, I was participating.

Within 2.5 weeks of working this way, the platform was done.


What Got Built

43 working sessions. 185 pull requests. All of them human-reviewed before merging.

The result: a production-grade Kubernetes platform running on five physical mini-PCs. GitOps-managed with FluxCD. SSO on every application via Keycloak. High-availability PostgreSQL with tested failover (~15 seconds recovery time). A software supply chain through Nexus Repository Manager. CI/CD validation on every PR. 20+ applications deployed with the same repeatable pattern.

The token counter for that period: roughly 1.5 billion tokens processed through Claude Code, 97% of them cache reads of existing project context. API-equivalent cost: ~$994. Actual cost: ~$120 in flat monthly subscriptions ($100 Claude Max, $20 Codex).

I went from 2-3 weeks of confused progress with tool soup to 2.5 weeks of complete, documented, production-grade infrastructure.


What the Series Is

I documented every session. Every architectural decision. Every failure — and there were real ones: a JVM truststore problem that took three sessions to trace, a containerd path bug that cost hours, a Terraform SSH username mistake that Claude confidently got wrong until I showed it the error.

The series, Homelab as Production: AI-Assisted Infrastructure from Zero to GitOps, covers all of it across 16 posts:

  • Terraform provisioning and the SSH username bug that taught me to build a gotchas registry
  • FluxCD GitOps from day one, and why the dependency chain is not optional
  • The platform layer nobody writes tutorials about (MetalLB, cert-manager, NFS provisioner)
  • SSO for everything with Keycloak — including the KC_HOSTNAME_URL problem that Claude got wrong the first time
  • Secrets that never touch git, ever
  • The repeatable 7-manifest deployment pattern that scaled to 20+ applications
  • Nexus Repository Manager and the /v2 path bug documented nowhere
  • Three sessions to fix a single missing SSO button in Dependency-Track
  • And a full retrospective on what Claude got right, what it got wrong, and what the numbers actually mean

The full series is on Medium. It’s a technical series — real code, real debugging arcs, real failures. If you’re building infrastructure, running Kubernetes, or thinking about how to actually work with AI over dozens of sessions instead of one-shot prompts, that’s where the depth lives.

This newsletter is the higher-altitude version. Methodology, lessons, the “why” behind the decisions. What I’d tell someone starting where I started.

If that’s useful, subscribe. The series is already written — I’ll be linking each post as it goes live.

And if you want to start with the technical deep dives now: [Homelab as Production on Medium] → [link to be added when live]


The public IaC repository with all the code (sanitized) is available at homelab-as-production-iac. Every post links to the relevant directory.