Why it matters
Hiring managers reasonably ask whether a homelab is real experience. I run this one with the habits a small company needs: every service is a managed stack, private services sit behind a VPN, failures alert a phone, backups run daily, and each incident ends with a written fix and a guard. It is also where I test tools before I recommend them.
How it is built
How it grew
- Jul – Aug 2023Desktop start
A Kubuntu desktop running network-wide DNS filtering and a media server, before anything ran in production.
- Jun – Aug 2024Lab machine before the hypervisor
Media streaming and dashboards moved onto a dedicated machine before there was a hypervisor.
- Aug – Sep 2024Hypervisor and core stack
One hypervisor, a container runtime with central management, DNS filtering, a file platform with its database, a reverse proxy with TLS, a VPN for remote access, and a mirrored storage appliance.
- May – Sep 2025Persistent services and research tools
A shared relational database with backups, a self-hosted crawler, a metrics server, and hardware-accelerated media processing.
- Mar – Apr 2026Managed application platform
Workloads split into purpose-built containers, every service redeployed as a managed stack, monitoring with exporters, the VPN moved to a managed panel, and daily backups.
- Apr – Jul 2026Research and automation
Workflow pipelines on top of the crawler, browser automation and a search-visibility harness replaced repeated manual research.
- Aug – Sep 2026Reliability and operations
I added an outbound alert rail, hourly storage checks, an egress-isolated enclave, and an access gate on the management plane.
- Oct 2026Production studio
I consolidated document, diagram, audio-analysis and indexing services into one environment for research, documentation and creative production.
Dated milestones
The dates come from the systems themselves: container creation times, package-manager history and dated configuration records.
Desktop start
A Kubuntu desktop running network-wide DNS filtering and a media server: the first self-hosted services.
Media server moves to the lab
The media server moved off the desktop onto a dedicated machine, before the hypervisor existed.
First dashboards
A dashboard server for the first services.
Hypervisor installed
Base Proxmox host installed; first package upgrade recorded.
Shared storage
A mirrored storage appliance as its own VM; media and files moved onto it in September.
Container runtime and DNS filter
Docker and central container management in the first application container; the DNS filter moved into the lab.
Files, ingress and VPN
A self-hosted file platform with its database, a reverse proxy serving everything over TLS, and a WireGuard VPN for remote access.
AI-assisted coding
Started coding with AI through MCP tool servers, beginning with Serena, before agent coding tools were widely available.
Persistent data
Shared PostgreSQL with a scheduled database-backup container.
Self-hosted crawler
A self-hosted web crawler for research, scripted in Python.
Metrics server
Time-series metrics collection added beside the dashboards.
Hardware transcoding
GPU media driver and validation tooling added for hardware-accelerated media.
Second application enclave
A purpose-built container for productivity workloads, managed from one central deployment plane.
Runtime limit found and contained
A container-runtime change broke network namespaces in unprivileged containers; affected stacks moved to host networking and the version boundary was documented.
Credentials out of config
Storage credentials moved from a readable mount definition into a root-only credentials file.
Monitoring as a managed stack
Metrics, dashboards and five exporters redeployed as one managed stack, with the configuration kept as a mounted file and hot reload.
VPN and DNS rebuilt
The 2024 VPN moved to a managed panel with full-tunnel profiles for travel, and the DNS filter was upgraded; admin interfaces stay VPN-only.
Daily backups
Both application enclaves snapshotted daily to the storage appliance; 7 daily, 4 weekly, 3 monthly kept.
Research workflows
Four workflow-engine pipelines connected to a self-hosted crawler.
Incident: boot-order storage race
After a power-off the shared storage mounted before the storage appliance was ready; dependent services recovered by hand.
Search-visibility harness
Seven iterations to a multi-engine harness with a 318-query bank and parser diagnostics.
Full infrastructure audit
Every service, route and dependency documented in one index; dynamic DNS moved to a host timer.
Alert rail
Failures on five critical paths now send a phone notification; hourly storage-binding checks; update monitoring in notify-only mode.
Egress-isolated enclave
A third application container whose traffic is forced through a VPN tunnel with a kill-switch.
Self-hosted diagram editor
Diagram editing and scripted export run on the lab, nothing leaves the network.
AI-assisted operations
Routine maintenance and documentation moved to AI tools working under a documented review process.
Password vault
Self-hosted credential vault; tools read secrets through a broker instead of config files.
Fix generalised after a power cut
The post-boot repair now refreshes every storage-bound service on all three enclaves; the management UI moved behind a VPN-only gate.
Incident: stalled backup
A backup hung on a stale storage session; aborted safely, partial snapshot removed, mount set to open fresh sessions.
File platform upgrade
Six major versions upgraded one at a time with a backup before each step; mobile uploads restored.
Today
Four guests, 34 running services, all defined as managed stacks.
Monitoring, from the real dashboards
I exported these four panels from the lab’s own Grafana, using a dashboard made for publication. The data is the same; only the legends are relabelled to roles.




Incidents, written up
I write every incident up in the same four lines. These are four of them.
What I would tell a client from this
- Put the storage dependency first in the boot order, and check it on a timer, not only at startup.
- Pin and document anything that can change under you, like a container runtime or an end-of-life file server.
- Keep admin interfaces off the internet. I reach them over WireGuard, a VPN with no licence fee, so they are never exposed to the public internet.
- Monitoring is only useful when it reaches a person. An alert to a phone beats a dashboard nobody opens.
Limits
I do not claim an uptime percentage beyond what the scrape data shows. Recoveries happened during real incidents, not as scheduled restore drills. The lab is single-host by design, so it has no high availability.
