I am a platform engineer who builds infrastructure the way it should be built — reproducibly, from code — and who teaches the next generation to do the same.
Technical expertise
My homelab is not a collection of tutorials followed to completion. It is a working platform that hosts real services, breaks in real ways, and gets fixed properly.
Infrastructure & automation
- Terraform — VM provisioning on Proxmox, Cloudflare DNS and tunnel configuration, remote state management.
- Ansible — cluster bootstrap, Kubernetes installation, Helm deployments, secret injection from a single source of truth.
- Docker — containerised pipeline so the entire build runs identically on my laptop and on the CI runner.
Kubernetes
- Three-node cluster built with kubeadm — control plane and two workers.
- Calico CNI with NetworkPolicy enforcement — the database accepts connections only from the specific workloads that need it.
- MetalLB for bare-metal load balancing, ingress-nginx for HTTP routing.
- cert-manager issuing Let’s Encrypt certificates over DNS-01, because there is no inbound HTTP path to validate against.
GitOps & delivery
- Argo CD reconciling the cluster against Git, with automated sync, pruning and self-healing.
- GitHub Actions on a self-hosted runner, because a cloud runner cannot reach a private LAN.
- Path-filtered pipelines so infrastructure changes and application changes take different routes.
Observability & operations
- Prometheus and Grafana via kube-prometheus-stack, with Alertmanager routing genuine alerts to email — tuned down after learning what alert fatigue actually feels like.
- Encrypted, off-cluster backups with restic — including a restore drill that has actually been performed, not just written down.
- Zero-trust public access through a Cloudflare Tunnel. No ports are open on my network.
Teaching
I run holiday tech camps for kids. Teaching technical subjects to young people is the fastest way I know to find out whether you actually understand something — children ask the questions adults are too polite to ask.
That same instinct shapes how I document my work. Every significant failure in this platform is written up with the symptom, the diagnostic steps, the wrong turns, and the root cause. Not a summary — the actual reasoning.
How I work
- Reproducible over clever. If it cannot be rebuilt from code, it is not finished.
- Backups before features. The first thing I built on this platform was an encrypted off-site backup with a tested restore — before any data existed worth losing.
- Design for rollback. Reversibility is a property you build in deliberately, not something you hope for during an incident.
- Document the wrong turns. A clean commit history hides the reasoning. The failed attempt is usually the instructive part.