← All projects

Homelab

The machines in my basement and the repo that runs them, a Docker Swarm with a private registry, push-to-deploy, backups and a shared design system.

Status
Active · 2026
Stack
  • Docker Swarm
  • Caddy
  • GitHub Actions
  • PostgreSQL
  • restic

Every app on this site's project list runs at home, on a few small machines behind a single Caddy gateway. This website does too.

One repo for how things run

An infra repo holds one folder per service: its compose file, an example .env, and a short README. Pushing to main deploys whatever changed, through a self-hosted GitHub Actions runner.

Each app lives in its own repo and owns its image: tests run on GitHub's runners, then the image is built, pushed to my private registry and rolled out by commit hash. infra owns how it runs: environment, volumes, networks, secrets and the route on the gateway. A new app is a folder in one repo and a workflow file in the other.

The boring parts that matter

  • Nightly restic backups to a NAS and to the cloud, with a written restore procedure.
  • Secrets never go in git: they live in per-service .env files and Swarm secrets on the host.
  • A written app standard and design system, so every app I build has the same structure, the same sign-in (passkeys) and looks like part of one family.