Two nodes — Nargothrond (UNRAID) and a Proxmox node — fully containerised, every entry point proxied, zero open inbound ports.
Traefik + Pangolin reverse proxy, zero-trust access, auto-TLS
AdGuard Home + Unbound network-wide DNS filtering, split DNS
CrowdSec + Gluetun intrusion detection, VPN-locked downloads
Jellyfin + *Arr stack media library and automation
Navidrome + slskd self-hosted music discovery and streaming
Immich + Vaultwarden photo backup and password sync
Full stack reproduced from code — Ansible + Docker Compose, rebuild in under 30 minutes. Documentation: Nargothrond
| Project | Description | Stack |
|---|---|---|
| riptune | Terminal-native music client for Subsonic servers, built for niri | Rust |
| Ainulindale | Fully self-hosted music discovery and streaming stack | Shell |
| ObsidianSetup | Cross-platform Obsidian and plugin installer — 26 stars | PowerShell |
| Nargothrond | Homelab provisioning documentation | Docs |
Beyond my own projects, I actively contribute fixes and diagnostics to tools I actually use — usually starting from a bug that's blocking me, tracing it to its root cause, and fixing it wherever I have the access to do so.
| Project | Contribution | Details |
|---|---|---|
| libratbag/libratbag | PR #1873 | Reverse-engineered an unsupported gaming mouse's USB HID protocol and wrote a complete device driver from scratch. |
| ValveSoftware/steam-for-linux | Issue #13248 | Diagnosed and resolved a Steam Linux Runtime installation bug affecting other users. |
| Vysp3r/ProtonPlus | Issue #1232 | Diagnosed a Steam Linux Runtime 4.0 install-pipeline fault — Steam marks the download completed with buildid 0, so the manifest and files are never written to disk, breaking the compatibility tool for any GE-Proton launch — and published a console/manifest-based workaround (manual depot download + hand-built appmanifest.acf) that restores the runtime without a full reinstall. |
| Recol/DLSS-Updater | PR #252, #256 | Fixed a UI state desync bug between a popup overlay and the dropdown menu, and resolved a related tracking issue (#255). |
| Recol/DLSS-Updater | PR #283 | Added DLSS/FSR/XeSS/RR version-label chips to game cards. After maintainer review flagged that hardcoded client-side version tables would silently mislabel future DLL renumbering, redesigned the feature so labels are sourced from bounded, per-DLL ranges in the existing DLL manifest — display-only, with unmatched versions falling back to the raw string instead of guessing. |



