July 4, 2026 · 8 min read · Infrastructure
I named it enjen because I wanted an engine — one domain that would run a whole fleet of little apps. Then domains got cheap, the good apps grew up and moved into their own homes, and the engine slowly emptied out. Today I'm switching it off. Here's the story, plus a one-box converter that turns any old enjen.net link into its modern equivalent.
enjen.netasn.ipinfo.appMigrationDecommissionASNInfrastructure
July 4, 2026 · 13 min read · Infrastructure
I spent the weekend upgrading phoenix, my main k3s cluster, from the ground up: Debian 12 to 13, k3s 1.30 all the way to 1.34, kube-vip and MetalLB off their original versions, and finally Flux 2.9. One node at a time, apps staying up the whole time. Mostly.
Kubernetesk3sDebianFluxMetalLBkube-vipLonghornHomelabInfrastructure
July 4, 2026 · 3 min read · Personal
America turns 250 today, and my small town marked it the way it marks everything — a giant flag hung off a crane, a pair of old Navy trainers over Main Street, and a whole town in lawn chairs. A few photos from the Semiquincentennial.
PersonalCaliforniaFourth of July
June 10, 2026 · 11 min read · Infrastructure
My hypervisor sat at 40% iowait for days and survived every reboot. The SSDs were healthy, the RAID controller was healthy, memory was idle — and the real cause was a kernel I'd pinned during a major upgrade and never moved off. A walk from iostat through PSI to proxmox-boot-tool, and why a 2026 QEMU on a 2024 kernel manufactures phantom iowait.
ProxmoxKernelio_uringQEMUDebuggingHomelabInfrastructure
June 8, 2026 · 5 min read · Infrastructure
Caddy 2.11.4 landed on June 3rd — a security-heavy patch release with four hardening fixes and a pile of TLS and reverse-proxy bugfixes. Here's what changed, the one breaking caveat worth reading before you upgrade, and how I rebuild it as 47 ready-to-pull DNS-provider images for DNS-01 ACME.
CaddyDockerTLSDNSLet's EncryptSecurityHomelab