← All projects
Project brief · Dev boxes

A personal cloud box for every dev

validation updated 2026-07-28

A personal, always-on cloud dev server for every dev who wants one — root access, your own choice of OS and software, reachable from anywhere over Tailscale. The setup is already proven: Petri migrated his own dev box from an always-on EC2 t3.xlarge (~$130/mo) to a Hetzner CX43 (EUR ~16.50/mo) with the full Duunitori stack running on it. This page lays out what rolling the same thing out to the team (~10 devs) would cost, the options considered, and the questions the team needs to answer.

The problem

Development happens on whatever each dev has locally, and there is no shared, documented way to get a beefy, always-on personal dev environment. The one cloud dev box in use (Petri's) proved the concept but was expensive on EC2 (~$130/mo always-on) and entirely hand-built.

If several devs want the same thing, ten ad-hoc setups — different providers, different security postures, different bills — would be the default outcome. Doing nothing means the option simply stays unavailable to everyone except those who build their own.

The proposal

One Hetzner cloud server per dev, opt-in. Each box is a CX43 (8 vCPU / 16 GB / 160 GB NVMe, EUR 15.99/mo + EUR 0.50 IPv4, ex VAT) or a cheaper CX33 for lighter stacks — EUR 100–165/mo total for ~10 devs.

  • One company Hetzner project with team members; boxes provisioned from a cloud-init/hcloud script derived from the existing setup runbook (runbook.md).
  • Each box joins its owner's personal free Tailscale tailnet and has no open ports on the public internet — SSH and dev servers (e.g. Django on :8000) are reachable only over the tailnet.
  • Full isolation: any OS image, root for everyone, a dead box affects exactly one dev, and Hetzner is the ops team.

Key decisions

These are recommendations to validate, not made decisions — the discussion below is what this page exists for.

A · cloud server per dev €16.50 B · AX102 + Proxmox ~€11 B · 2× AX42 + Proxmox ~€10 D · snapshot cycling ~€5–7 (estimate) Per dev, per month, ex VAT · Hetzner list prices July 2026 · recommended option highlighted
What each option costs per dev — and what the cheaper ones cost instead: B needs a hypervisor admin, D needs automation that must not kill overnight agent runs.
  • One cloud server per dev (Option A) over a shared dedicated host with Proxmox VMs (Option B)Option B is EUR ~60/mo cheaper at 10 devs and genuinely faster (bursty dev workloads oversubscribed on 16 dedicated Zen4 cores beat shared cloud vCPUs) — but someone becomes the hypervisor admin (host updates, RAID, VM provisioning), and one host down takes out 5–10 devs. The admin-overhead breakeven is closer to 15–20 devs than 10. At 10 devs the absolute cost is noise compared to salaries; simplicity wins.
  • No self-service layer (Coder) yetSelf-hosted Coder on top of a dedicated host would give Terraform-defined workspace templates, dotfiles auto-applied, and idle auto-stop — "Codespaces on our own EUR 109 server". Worth it when template consistency and self-service provisioning start mattering, i.e. more devs than now. (Actual GitHub Codespaces: ~$430/mo for 10 devs at ~120 h, ephemeral by design, no OS choice.)
  • Ephemeral compute (snapshot cycling, Fly.io machines) is an experiment, not the planHetzner bills per hour and deleted servers cost nothing, so "devbox down = snapshot + delete" could cut a box to EUR ~5–7/mo. But it's automation to build and maintain, and the sharp edge for our workflow is idle detection: long-running Claude Code sessions look idle to naive auto-stop logic — "idle" must mean no active claude/test/build processes, or overnight agent runs get killed.
  • Personal free tailnets over a company Tailscale plan or HeadscaleBoxes are personal and nobody else needs access, so each dev's box joins their own free tailnet. The Tailscale team plan (~EUR 55/mo for 10 devs) would cost more than Option B saves; self-hosted Headscale only makes sense if a single company-controlled mesh becomes a requirement.

The plan

Effort is relative — S < M < L. The plan activates only if the team validates Option A (full task table in 04-roadmap.md):

StepWhatEffort
DecideThe team picks the option and devs opt in; sizing per dev (CX43 vs CX33)S
Set upCompany Hetzner project + members; turn the setup runbook into a cloud-init/hcloud provisioning scriptM
Roll outProvision boxes for the opted-in devs; each joins their own tailnetS
MigrateDevs move over at their own pace; old environments (incl. the EC2 instance) decommissionedM
VerifyCost check after the first month against the EUR 100–165/mo estimateS

Rollout risk is minimal by construction: boxes are independent, opt-in, and each dev's migration is individually reversible (keep the old environment until the new box has proven itself — that's exactly how the EC2→Hetzner migration was done).

Risks

  • Stopped Hetzner cloud servers bill at full price (unlike EC2) — there is no stop-when-idle savings lever on Option A. The mitigation (snapshot cycling) is deliberately deferred as an experiment.
  • Shared-vCPU performance may disappoint devs used to fast local machines — that was the real argument for the dedicated-host option. If it becomes a complaint, or headcount grows toward 15–20, revisit Option B (+ Coder).
  • Prices are a snapshot: ex-VAT Hetzner list prices as of July 2026, after their June 2026 increase. Re-check at purchase; +25.5% VAT if billed personally in Finland.
  • Per-dev security posture depends on following the script — the provisioning script must bake in the hardening (Tailscale-only SSH; the cloud firewall as the only firewall, because Docker bypasses ufw via iptables; unattended upgrades), so a hand-rolled box can't quietly skip it.
  • Sizing is an assumption. "~10 devs" is headcount, not a signup list; actual interest is unconfirmed. If only 2–3 devs opt in, the decision barely matters — which is itself an argument for the simplest option.

Open questions

The concrete questions we want the team to answer — this is the discussion agenda.

  1. Which option? A (per-dev cloud servers, recommended), B (dedicated host + Proxmox), or wait?
  2. Who actually wants a box? Opt-in signup — and per dev, CX43 (EUR 16.50/mo) or the lighter CX33 (EUR 8.49/mo)?
  3. Who owns the Hetzner organization and billing — and does EUR 100–165/mo need a budget sign-off, and whose?
  4. Timeline: is this worth doing now, or parked until more devs ask for it?

Out of scope

  • Forcing anyone off local development — boxes are strictly opt-in.
  • Shared infrastructure beyond one Hetzner project (no shared hosts, no company mesh VPN, no platform team).
  • Deferred: the Coder self-service layer (revisit at 15–20 devs), snapshot-cycling/auto-stop cost optimization (an experiment for whoever wants it), and any company-wide Tailscale/Headscale mesh.