Why
My homelab runs ten+ services, and every one of them has its own admin UI, auth, and quirks. I wanted one place to see everything, and I wanted to build it fast enough that I'd actually finish.
What it does
- System monitoring: live CPU, memory, disk, and network charts from the host.
- Docker: list, start, stop, restart containers; tail logs live.
- Media: Jellyfin "continue watching" and library grid; qBittorrent torrent search and add.
- Discovery: mood-based movie and show discovery across 12 categories, powered by TMDB and Reddit subreddit scraping.
- Files: full filesystem explorer across the host.
Architecture
Browser → Next.js → FastAPI → (Docker / Jellyfin / qBittorrent / TMDB / Reddit / SSH).
Every external system sits behind its own typed adapter module on the FastAPI side, with its own auth handling, retry policy, and health check. The frontend never talks to external systems directly — everything goes through the adapter layer, which means I can swap or add services without touching the UI.
Shipping velocity
Built almost entirely via Claude Code skill-based workflows. The adapter-per-service pattern and typed interfaces meant I could add a new integration in a single afternoon. This is the edge of agentic development: the pattern is the product.
Stack
FastAPI · Next.js 16 · React 19 · TypeScript · Docker SDK · Jellyfin API · qBittorrent API · TMDB · Reddit · Tailwind