Homelab server rack, mid-assembly, panels off
The rack mid-build.

TODO: swap in more photos/diagrams — the finished rack, switch config screens, Grafana dashboards. Public info only — no internal IPs beyond the LAN ranges you're already comfortable sharing.

Kit

  • Firewall: FortiGate 60F — DMZ segment, VLANs, Cloudflare Tunnel egress
  • Switch: MokerLink G24410GM (managed, configured over serial console)
  • Access point: Netgear WAX630
  • Compute: Ubuntu Server laptop (lappy-homelab-01) — this site's origin server

What runs here

  • DNS: Pi-hole + dnscrypt-proxy + NextDNS, containerised
  • Observability: Grafana / Loki / Promtail, ingesting FortiGate, AP, and host logs
  • Media: Jellyfin, HTTPS via DuckDNS + Let's Encrypt, LVM-backed storage
  • This site: nginx + Cloudflare Tunnel, no exposed ports on the router

Why document it publicly

Half portfolio, half discipline — writing up a config forces me to actually understand it rather than half-remember it. If you're evaluating me for a systems- or data-engineering-adjacent role, this is the closest thing to a live reference check on how I actually work.

Built on this site

  • Password Generator — a client-side, no-dependency password generator with configurable character rules, sequence/repetition avoidance, and a strength estimate. Nothing generated there is transmitted anywhere.

TODO: add 2–3 more concrete write-ups here (or link out to Stories articles) — e.g. the Cloudflare Tunnel setup, the Grafana stack, the FortiGate DMZ config.