What runs where, and why. A /uses page for someone whose hobby is running his own infrastructure.
The principle
Nothing on this list is exotic. What makes it work is the combination: an old laptop, one outbound tunnel, and a habit of backups. If you can run one container, you can run all of this. That is the premise of the You Can Just … Things series.
Hardware
- A ThinkPad as the always-on server. It sits on a shelf with the lid closed and runs everything below. Laptops make good home servers. They have a battery, they are quiet, and they are already paid for.
- A desktop with a GPU on the same network for local models and image generation. It sleeps when idle and wakes on demand.
- A Surface for travel, which reaches both over a mesh VPN from anywhere.
Network
- Cloudflare Tunnel publishes every public service. The router has no inbound ports open. A dynamic-DNS updater keeps the home IP current for the one thing that needs it.
- WireGuard for the home mesh and Tailscale for the road. Two VPNs is one more than I would like, but each covers a device the other cannot.
- Every service binds to localhost or a private address and reaches the internet only through the tunnel.
Platform
- Docker Desktop with around sixty containers under Compose. Each project gets its own database.
- Watchtower updates public images overnight. Local images are rebuilt and retagged by hand so there is always a previous tag to roll back to.
- restic backs up every volume nightly to local disk, and a second job ships the same snapshots to the desktop over the mesh. The assistant's database is dumped inside its container before it is copied anywhere, because opening a live SQLite file from the host once forked the data without any error.
- Uptime Kuma, Dozzle, and ntfy for finding out what is down and why.
Automation
- n8n with roughly seventy active workflows: content generation and review, coaching logistics, newsletter guards, lead generation for a client site, the assistant's tools, and a nightly health sweep that fixes its own known failures.
- A nightly job archives every workflow as JSON so the graphs are versioned and restorable.
AI
- OpenRouter for cloud models, behind LiteLLM for prompt caching. Caching cut the cost of a warm assistant turn by about ten times.
- Ollama on the GPU desktop for local models from the Gemma and Qwen families. Local for anything high-volume and low-stakes, cloud for judgment calls.
- Langfuse for tracing, prompt management, and regression datasets. A prompt change does not deploy until it passes a set of real conversations.
- Speech: a Whisper server for transcription, whisperX for timestamps and speakers, Kokoro for the occasional voice reply.
- ComfyUI and a Stable Diffusion server for image generation, including the newsletter illustrations.
Applications
- Payload CMS for this site, the coaching site, and a client site. Headless and self-hosted, with MongoDB and MinIO behind it.
- listmonk for the newsletter, sending through a transactional relay.
- Home Assistant for presence and the house. Paperless-ngx for documents. Docmost for a wiki. Grist for the coaching practice's records. Umami for analytics that do not follow people around the web.
- Ghost, Excalidraw, Stirling PDF, Homebox, and a handful of others.
Development
- Claude Code as the primary pair, with Cursor and VS Code for the rest. Node through Volta, Python venvs per project, WSL2 for Linux-shaped tasks.
- Everything is in git, including the workflows and the prompts.
What it costs
A domain, a few dollars a month in cloud tokens, and the electricity for a laptop. Cloudflare, Tailscale, and the email relay are on free tiers at this scale. The expensive part is time.