The Mac mini
One small box on a shelf: media server, photo library, finance tracker, game server, and the AI plumbing that runs it all — 31 containers and change.
Public web
Internet → Cloudflare Tunnel (no open ports)
Private
Phone & PC → Tailscale (tailnet only)
Host services (outside Docker)
- claude-phone (PWA terminal)
- ClaudeBrain (memory)
- Time Machine watchdog
- server-alert email
- nightly backup agents
Docker Desktop · 31 containers
Public web
- cloudflared
- caddy
- this site
- AlandOats3D
- web-mcp
- timesync
tunnel → caddy → static sites + AI endpoints
Media
- gluetun (VPN)
- qbittorrent
- prowlarr
- flaresolverr
- radarr
- sonarr
- bazarr
- plex
- seerr
- tautulli
downloads exit only through the VPN
Photos · Immich
- server
- machine-learning
- postgres
- redis
self-hosted Google Photos replacement
Finance · Firefly III
- app
- db
- importer
- cron
- sfin-cache
27 accounts synced daily
Business & tools
- etsy-tile
- drive-sweep
- render-service
- dst server
shop stats, drive-deal watcher, JS renderer, Don’t Starve Together
Ops
- homepage
- uptime-kuma
- autoheal
dashboard, monitoring, self-healing
NVMe · 10 Gbps
media library & torrents
Standby volume
photo library & workspace
Boot SSD
system → Backblaze cloud backup