Homelab

← Back to Portfolio
Homelab

Oct 2026 – Present

An old workstation rebuilt as a Proxmox server: a NAS, Home Assistant, photos, git and a dozen apps, each with its own HTTPS name, none of them open to the internet, and a status page that checks every one each minute.

Tech Stack

Proxmox TrueNAS ZFS Docker Caddy Tailscale Cloudflare DNS Home Assistant Python Linux

About this project

What it is

My old workstation (a Ryzen 9 5900X with 94 GB of RAM) rebuilt in October 2026 as a single Proxmox server that runs the house. It holds the NAS, Home Assistant, the family photo library, a private git server, the databases for my own projects, and a Docker host with an app store for everything else.

I built it with an AI coding agent working over SSH, with me making the calls. That worked well, and it also showed exactly where a person still has to be in the loop (more on that below).

The first shelf of the Portal status page: Proxmox, NAS, Dockge, Runtipi and NetMap, each with a thumbnail and a green status lamp
The Portal, the one page that links everything. Every lamp is checked each minute.

How it fits together

  • One server, many machines. The NAS runs as its own virtual machine, with the disk controller passed straight through so it sees the three 20 TB drives directly. Home Assistant, a web server, a development box and a Docker host each have their own machine too, so a bad update in one cannot take the rest down.
  • Every service gets a proper HTTPS name. One reverse proxy (Caddy) answers for all of them, with a single wildcard certificate issued by DNS challenge. No browser warnings, and no port numbers to remember.
  • None of it is open to the internet. The proxy turns away anyone outside the house, and the only way in from outside is Tailscale. The two exceptions are deliberate: photo share links for family, and file transfer for one outside user.
  • Backups run every night to a separate drive, with a week of dailies and a month of weeklies, and the databases are dumped as well. An off-site copy is the next job.

The Portal

With a dozen services, the question stopped being "how do I set this up" and became "what is running, and where is it". So I built the Portal: one static page, no build step, with a card for every service and every project, a screenshot on each, and a lamp that a small Python script turns green or red every minute. A watcher sends a push notification when something needs attention.

The fiddly bits

  • The installer offered to wipe the old pool. The drives still held a NAS pool from a previous build. The new NAS's setup screen offered to erase them, so I imported the pool through the underlying TrueNAS interface instead and kept every file.
  • The network clashed with every café. The house used the same address range as most home and café routers, which breaks a VPN the moment you are on someone else's wifi. I renumbered the whole network to a range nobody else uses.
  • Apps behind a proxy do not trust it by default. Home Assistant refused requests until it was told to trust the proxy, and the app store failed every save with a 403 for the same reason. Same fix, two places, and now it is a step in the checklist for adding a service.
  • The agent could not type a password into a console that does not paste. Some steps need a person at the keyboard, and the trick is knowing which ones before you start.

What I took from it

Everything is written down as it is built: a quick-start page with the house rules, and a checklist for adding a service, so the next change (by me or by an agent) starts from what is true rather than from memory. It is the same habit I bring to support: the fix is not finished until the next person can repeat it.