Abid Chaudhry

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.