Skip to content

World 1-3The Vault

The lab

A small enterprise, at home.

The homelab is where I practice the things I sell. It runs the same categories of tooling a company's IT department runs, scaled to a closet: a firewall, a VPN mesh, DNS filtering, centralized logs, intrusion detection, a SIEM, a password manager, a media server and nightly backups. It is documented like a production system because that is the habit I want.

Party

What is running

Container host

Docker

Every service runs in Docker Compose with persistent volumes on a separate data drive, so the operating system disk stays clean and backups are one directory.

Journal

Quest log

Milestones from the lab notebook. Each one is documented with the objective, what went wrong, the fix and the lesson, because the lesson is the point.

  1. LAB-001

    Headless Debian server

    Minimal bare-metal install chosen over a hypervisor while memory was tight.

    Enterprise equivalent: On-prem server provisioning

    Complete

  2. LAB-003

    Storage tiering

    Operating system on NVMe, all data and container volumes on a separate drive.

    Enterprise equivalent: SAN/NAS tiering

    Complete

  3. LAB-006

    DNS sinkhole

    Pi-hole with curated threat lists, verified by watching a known tracker resolve to nothing.

    Enterprise equivalent: Cisco Umbrella, Cloudflare Gateway

    Complete

  4. LAB-007

    Centralized logging

    rsyslog ingestion with dynamic per-host files and a seven-day rolling rotation.

    Enterprise equivalent: Splunk forwarders, Elastic Beats

    Complete

  5. LAB-011

    Network intrusion detection

    Suricata in a container on the host network, writing structured alerts to disk.

    Enterprise equivalent: Palo Alto Threat Prevention, Snort

    Complete

  6. LAB-012

    SIEM deployment

    Multi-container Wazuh with indexer, manager and dashboard; port conflicts and kernel limits sorted out along the way.

    Enterprise equivalent: Splunk ES, Microsoft Sentinel

    Complete

  7. LAB-013

    IDS to SIEM pipeline

    Suricata alerts flowing into Wazuh rules and firing live on the dashboard.

    Enterprise equivalent: Structured log ingestion

    Complete

  8. LAB-014

    VPN mesh and firewall hardening

    Every device on the mesh, blanket firewall rules replaced with explicit per-port allow-lists, monitoring on the SIEM itself.

    Enterprise equivalent: Zero-trust access, segmentation

    Complete

  9. LAB-015

    Bastion host

    A hardened always-on jump box as the only remote entry point, with power-restore and unattended upgrades.

    Enterprise equivalent: AWS bastion, Azure jump box

    Complete

  10. LAB-016

    Custom detection rules

    A child rule extending the vendor ruleset, verified with the SIEM's own test harness after chasing a field-name gotcha.

    Enterprise equivalent: Sigma rules, SPL

    Complete

  11. LAB-017

    Backups, key-only SSH, password manager

    Nightly volume backups, password SSH disabled everywhere in favour of ED25519 keys, Vaultwarden deployed, DNS fallback on every device.

    Enterprise equivalent: Backup policy, PAM, secrets management

    Complete

  12. LAB-019

    SIEM agents on every endpoint

    Extend Wazuh coverage from network alerts to host telemetry, including Windows event forwarding.

    Planned

  13. LAB-020

    Emerging Threats ruleset

    Turn on thousands of real-world Suricata signatures and tune the noise.

    Planned

  14. LAB-022

    Dashboards

    Grafana over the SIEM data for a proper SOC-style view.

    Planned

Next quest In progress

Next: the rebuild

The lab is being rebuilt from scratch with a narrower purpose: a VPN and network monitoring core, Docker hosting for this site and client sites, and a small self-hosted AI model scoped to handle first-line intake by email without eating the whole machine. Hardware and services will be listed here once it is stable, with numbers rather than adjectives.

Architecture

How this site is built

Next.js, standalone output
App Router, strict TypeScript, Tailwind tokens. The build produces a small Node server that runs in one container.
The level
Plain Canvas 2D with a fixed-timestep loop and no game library. The map is data; the doors come from the same navigation list the header uses.
Content as config
Every word lives in one typed file. Anything unconfirmed is flagged and rendered with an in-progress tag.
Sign-in
Google sign-in implemented directly against OpenID Connect, sessions in an SQLite file on a volume, and the minimum data needed to remember your settings.
Docker
Multi-stage image, non-root user, health endpoint, compose file with reverse-proxy labels ready for the lab.
Proxy, TLS, backups
Reverse proxy in front with automatic certificates, the home connection behind a tunnel, nightly backups of the data volume.

Changelog

  • 2026-09-26Davi, the site assistant: a self-hosted chat helper for questions about the services and for starting an inquiry. Privacy notice, terms and accessibility statement updated to describe it.
  • 2026-09-25Portraits on the Home and About pages, the logo signed off, Privacy and Terms given their own worlds, and the services page reworked: click-to-select roster and a board-game project map.
  • 2026-09-24Progression added to the level, worlds and cutscenes across the site, settings and sign-in, copy rewritten from the resume and lab notebook.
  • 2026-09-23Project started: audit of the WordPress site, plan, design system, landing level and pages.

Next stage

Want this kind of setup for your business?

Hosting, monitoring and backups, run the way the lab is run.

Get in touch