Recent
A Culver's Flavor of the Day Dashboard, and the Sanitizer That Ate My CSS
·1931 words·10 mins
Culver’s rotates a different frozen custard flavor every day at every location, and the flavors are not synchronized between stores. Four restaurants within a reasonable drive means four different answers to “is it worth going tonight,” and the only way to find out has been to open the app four times.
Building a Fantasy Football Draft Engine for Seven Leagues at Once
I play in seven fantasy football leagues. Five on Sleeper, two on Yahoo. Six snake drafts and one auction. Team counts of 10 and 12. PPR, half-PPR, and one league that pays a point for every first down. One of them scores individual defensive players. One scores kickers purely on field goal yardage with no penalty for a miss. Five are ordinary redrafts, one is a keeper league, and one is a dynasty league where rosters carry over whole.
How K3s Silently Grew a 40 GB SQLite Database and Took Down My Cluster
My cluster — a single-node K3s instance running about 60 ArgoCD-managed applications — had been slowly dying for months. Pods crash-looped with “context deadline exceeded” errors. Leader elections failed. The metrics server stopped working entirely. I assumed it was resource pressure and tuned probe timeouts. The real problem was underneath all of it: K3s’s SQLite datastore had silently grown to 40 GB.
Fleet-Managing Fire Tablets from Kubernetes
·1025 words·5 mins
I have three Amazon Fire tablets mounted around the house running Fully Kiosk Browser as Home Assistant dashboards. They’re cheap ($35-50 each during sales), they have decent screens, and Fully Kiosk turns them into locked-down kiosks that show a dashboard and nothing else.
Whole-Home Audio with Music Assistant: Kubernetes Gotchas and a Silent Raspberry Pi
·1889 words·9 mins
My music setup had accreted into a mess. Across two Kubernetes clusters I was running Navidrome, Lyrion Music Server (LMS), beets, and my own AI radio station (SUB/WAVE) - plus a Raspberry Pi running piCorePlayer wired into a Dayton DAX66 matrix amp for whole-home audio. Four things that all “played music,” none of which talked to each other, and no single place to control any of it from Home Assistant.
The LoadBalancer That Never Worked: Migrating MetalLB from L2 to BGP
·2180 words·11 mins
I started the day asking why one of my Frigate cameras was using more CPU than the others. I finished it having moved every LoadBalancer in my Kubernetes cluster onto BGP-routed addresses, because along the way I found a service that had been silently unreachable for two years.