Contact →

More personal notes: what I learn tinkering with my own infra, maintaining open source projects, and chasing a bug to the end.

Watching my own infra

Uptime Kuma and CrowdSec have been running on my homelab ever since I stopped trusting a SaaS dashboard to tell me whether my services are actually up. The difference isn't just cost: when an alert fires, I know exactly which container, which node, which log to check, because I set up every piece myself. I ended up sending a fix to Uptime Kuma (a stats column overflow) and to CrowdSec (a missing heartbeat metric), two small annoyances that only bothered me because I run into them every day.

One Go core, every platform

FLACidal runs on desktop (Wails, a single binary for Windows, macOS and Linux) and on mobile (Flutter, via FFI), with the same business logic written in Go at the center. The hard part wasn't writing that logic twice, it was keeping it as one: a single Go module compiled as a shared library, called from two completely different frontends. That means a strict interface between the two worlds, but it avoids ending up with two implementations that quietly diverge the first time a bug gets fixed on only one side.

Fixing the software you actually use

Jellyswarrm is the proxy that lets my two Jellyfin servers coexist, and I ended up sending it three PRs: device matching, an authentication bypass, remapping virtual artist IDs. Nothing groundbreaking on its own, but the same instinct each time: instead of opening an issue and waiting, open the code, understand exactly why it breaks at that one spot, and send a tested fix. The tools we use every day deserve that kind of attention, they're never really finished.