writing

Notes from the platform side.

2026

A Disposable Production Clone on a Laptop

Most of my mistakes in GitOps-managed infrastructure aren’t logic errors. They’re mechanical: a values path that doesn’t exist in the chart, a template that renders di...

2026

Your Liveness Probe Is Checking the Wrong Thing

The pod was Running. The liveness probe was green. There were 521 items in the queue and every worker was idle. It had been that way for hours.

2026

Your OOM-Killed Pod's "Peak Memory" Is a Lie

There’s a piece of Kubernetes advice I believe in and repeat constantly: don’t guess resource limits. Ship the behavioural change, watch the real baseline in metrics f...

2026

When 353 "Speeding" Events Were Actually a Parked Bus

I built a speed camera for the street outside my house, mostly out of curiosity about how bad the speeding actually was. It uses a Raspberry Pi, a wide-angle camera, a...

2026

Postgres Won't Auto-Upgrade, and Your GitOps Bot Will Happily Break It Trying

I run a handful of self-hosted apps at home on top of a small Kubernetes cluster, managed the boring, correct way: a dependency bot watches container image tags across...

2026

The Silent Killer of Cron Jobs: stdout vs stderr

I set up a small scheduled job in my home lab to keep an eye on outdated container images and post a summary somewhere I’d actually see it. The scanning tool runs, pro...

2026

Your Dashboard Is Lying to You — The Case of the Ghost Config Flag

A small site I run had a contact form that quietly stopped working. Not “returns an error” — worse. It just 404’d, silently, with nothing in the platform’s own dashboa...

2026

Two Things Writing the Same DNS Record Will Always Fight

I run a small home lab behind a dynamic residential IP, so a handful of subdomains — the ones I use for remote access to stuff at home — depend on a dynamic DNS update...