the robot and the boy in the cap kneeling on the floor around one large central machine core, deliberately choosing which of several smaller plug-in modules to connect to it — a few modules attached and softly glowing, several others set aside in a neat pile beside them; careful, thoughtful, deciding rather than installing everything

Self-hosting the thing I paid not to think about

A managed service is a deal: you pay to not think about what’s underneath. I self-hosted Supabase on a 16GB box over a weekend, with AI help, and made every component earn its place. What I bought back was understanding.

the boy in the cap leaning over a network diagram spread on a table with a magnifying glass, while the robot beside him points at one box on the map — the two of them auditing the layout together

🧱 An Agent Audited My Homelab — and the Useful Part Was Telling It 'No'

I gave a second AI read access to the Git repos that define my k3s homelab. The findings were fine — the work was validating each: which to accept, which to recalibrate, and which the scanner was confidently wrong about.

the robot pointing at an open cardboard box while the boy in the cap sweeps small cubes marked with an X toward it, a recycling arrow looping in the air above them

📝 Dev Notes

Running notes on things I’ve hit, fixed, or found worth remembering.

the robot holding up a phone showing a message bubble, an arrow curving across to the boy in the cap who holds his own phone showing the same bubble as it arrives

Every Robot in My House Can Text Me Now

My house is full of automation that never told me anything — until I gave it one push bus. The first thing I taught it to do was warn me before Claude Code cuts out mid-task.

a large alarm bell ringing between the robot and the boy in the cap, with the boy holding the bell's unplugged power cord and plug in his hands

Is Anyone Knocking? A Security Pass on My Homelab

I set out to answer a simple worry — is someone trying to get into my server? — and found the scarier question underneath it: if they did, would I even know? My front door was solid. The inside had an alarm with the wires cut, a web terminal sitting on the open internet, and no floor under the blast radius. Here’s the audit, and the three things I fixed.

Audiobookshelf library: the same tale with stock narrator and the cloned dad voice

🎙️ Cloning My Own Voice for My Kid's Audiobooks

Zero-shot voice cloning with XTTS-v2 on a CPU-only k3s node: 26 seconds of phone audio in, a cloned-voice audiobook out — and an honest verdict from the bedtime jury. Every manual step, including the ones that went wrong.

Brew Buddy batch detail with fermentation log

🫙 I Built a Tracker for My Kombucha. The Data Model Was the Hard Part.

Brewing kombucha looks simple until you try to model it: one batch splits into many flavored bottles, every jar generates a stream of pH and taste readings, and a SCOBY has a lineage. Here’s the little app I built to keep track — and why the schema, not the code, was the real work.

Three walls of multi-tenant isolation on Kubernetes, verified end-to-end

🧱 How Do You Isolate Two n8n Tenants on Kubernetes — and Prove Each Wall Holds?

Multi-tenant isolation is easy to assert and hard to verify. Three walls — network, secret, resource — and the actual 403s, timeouts, and admission rejections that prove each one holds.

n8n workflow canvas

🍵 I A/B-Tested Cloud vs Local LLMs in One n8n Agent. The Local One Faked It.

I built an AI agent in self-hosted n8n over my kombucha-tracking app, then gave it two brains — NVIDIA’s 70B and a local Phi-3.5 — sharing the same tools. The cloud model called the tools and answered from real data. The local one couldn’t, so it made things up.

the boy in the cap holding a wrench and a blueprint scroll of stacked layers, the robot beside him pointing toward an open chest of neatly filed gear-marked folders; on the ground a heap of loose scattered blocks leads into a single tidy line of blocks

📦 Five Ways to Manage Kubernetes Manifests (and Why They're Not All Equal)

Raw YAML, Kustomize, Helm, Jsonnet — there’s more than one way to describe what you want running in a cluster. Here’s what each actually looks like in practice and where each one breaks.