What I'm working on

Self-hosted media ops

Operating a production Arr-stack day-to-day — Radarr, Sonarr, Lidarr, Readarr, Prowlarr, plus a download client and request manager. Most public work comes from scraping that experience into reusable tools.

AI-assisted homelab tooling

I lean on Claude Code as a homelab operator's toolbelt — configuration sync, TRaSH-Guides profile application, health sweeps, and other things I'd rather not do by hand at 2am.

Usenet streaming

Contributing to the nzbdav super-fork: WebDAV-mounted NZBs, on-demand streaming, and a SABnzbd-compatible API so Sonarr/Radarr treat it as a drop-in download client.

Projects

Claude Code skills for running a self-hosted Arr-stack (Radarr/Sonarr/Lidarr/Readarr/Prowlarr) — config backup & diff, TRaSH-Guides quality profiles, request-manager wiring, download-client queue ops, path validation, secrets handling, health sweeps, and compose lifecycle. Talks to each app's real REST API; no bespoke dashboard, no hardcoded infra.

claude-code homelab self-hosted radarr sonarr arr-stack
Python 1 repo →
WhispersOfJ/nzbdav active super-fork mit

A maintained super-fork of nzbdav-dev/nzbdav. Mounts NZBs as a virtual filesystem over WebDAV and streams straight from Usenet with full seeking — no full download required. Also exposes a SABnzbd-compatible API so Sonarr/Radarr can use it as a drop-in download client. Early adopters report ~2× network throughput and ~4× faster seek times vs. v0.6.4.

webdav usenet nzb sabnzbd-api sonarr radarr
C# TypeScript repo → docs →

Small gedit plugin that adds a status-bar label with a live word count of the active document. Word is defined as [a-zA-Z0-9]+[a-zA-Z0-9\-']*. Kept around for historical reasons — I still use it on the rare day I open gedit.

gedit plugin python
Python repo →