Homelab Infrastructure
A small self-hosted network for family apps, home automation, and local AI. Here's how the pieces fit together.
The short version: Three low-power PCs run the apps and home automation. Caddy handles web traffic, AdGuard handles DNS, and a separate workstation supplies local AI with a cloud fallback when busy.
Read the diagram from the network gateway down to the apps, then follow the AI branch to the workstation and cloud models. This is a high-level map, not a complete service inventory.
Wide diagram: swipe or scroll horizontally to explore both sides. With a keyboard, Tab to the diagram and use the Left and Right arrow keys.
Hardware & Hypervisors
Everything runs on a three-node Proxmox cluster built from low-power mini PCs — the work of a small rack, on a shelf.
- Router / firewall: An OpenWrt-based gateway handling DHCP and MAC-based firewall rules.
- Proxmox cluster: Three mini PCs — one AWOW AK10 and two Lenovo ThinkCentre Tinys — managed as a single cluster. Bulk storage is a ZFS pool on the AWOW node.
- Local AI: My daily-driver Framework workstation (AMD Strix Halo, 128 GB unified memory) also serves local language models through llama.cpp. A homemade load-aware router decides per request whether to use the local GPU or hand off to a cloud model, so family AI features keep working without competing with games or training jobs.
Network & Security
A consistent addressing scheme and MAC-based DHCP reservations give every managed device a stable home.
- DNS & ad-blocking: AdGuard Home does network-wide DNS with ad and tracker filtering, and resolves internal hostnames straight to the reverse proxy — so requests for a local service never leave the network.
- Reverse proxy & TLS: Two Caddy instances — one for internal services, one facing the internet — route requests by hostname and auto-provision Let's Encrypt certificates (HTTP-01 and DNS-01 challenges).
- Dynamic DNS: Small containers keep the Cloudflare DNS records pointed at our dynamic home IP.
- Firewall: MAC-based egress rules on the router — the living-room TV, for instance, can reach the LAN but not the open internet.
- Remote access: Private services are reachable only over a Tailscale mesh VPN, never exposed to the public internet.
Virtualization & Containers
Workloads are split across purpose-built LXC containers and VMs on the three Proxmox nodes.
- Distributed services: Dedicated Debian guests separate general applications, media-facing apps, file sync, monitoring, and specialty workloads across the cluster.
- Home automation (VM): A VM running Home Assistant with a USB Zigbee radio passed through, so the smart-home gear talks Zigbee directly instead of leaning on Wi-Fi or the cloud.
- Docker & Compose: Dozens of containers are managed with Docker Compose and Portainer. Services address each other by container name, so routine container replacement does not break internal routing.
Observability & Reliability
The parts that turn a pile of containers into something I can trust and leave running.
- Monitoring: Uptime Kuma for service health, Scrutiny for disk SMART trends, and a custom single-pane dashboard pulling it all together. Alerts go out over push notifications and also flow into an RSS feed.
- Backups & recovery: Nightly encrypted, off-site backups — whole-container images plus databases — so a failed node can be rebuilt from scratch, guided by a written disaster-recovery runbook.
- Documentation: The estate has a living knowledge base covering services, topology, operating procedures, recovery steps, and the odd hard-won gotcha.
Things I Built
- Fed Forager: An AI-assisted meal planner and grocery-list builder — Python backend and frontend, a PostgreSQL database, and its own Caddy edge.
- Family Recipes: A single-file Python family recipe box with account-gated posting. On the private network it adds an AI step that turns a photo of a handwritten recipe card into a tidy recipe.
- Workbench: A household and project organizer for tasks, decisions, materials, and plans, with the same family account used by the rest of the site.
- LLM Router: A single-file, OpenAI-compatible gateway on the workstation that checks GPU load and free memory per request, serving from local models when the machine is idle and transparently rerouting to cloud models when it isn't — the lab never interrupts a game, and a game never takes the lab's AI down.
Also Running
- Syncthing for continuous file sync across devices, and Samba for SMB shares off the storage pool.
- Plus the family-facing services on the diagram above — a private search engine, self-hosted photos, a Minecraft server, RSS readers, and more.