← Evidence Atlas · Rent vs Buy · Hello World · DE Wiki

Levels Blueprint + My Fork

Part 1: @levelsio (2026). Part 2: same VPS playbook, different runtime & AI tool.

Agent context
SITE=example.com
SERVER=my-vps (Hetzner VPS)
TAILSCALE_IP=100.x.x.x
TAILSCALE_DNS=my-vps.tailnet.ts.net

SHARED_PHILOSOPHY=ship fast, self-host on VPS, no Docker/K8s, SQLite until Postgres needed
SHARED_INFRA=Hetzner VPS + Tailscale admin + Cloudflare Tunnel (planned) + block inbound firewall
SHARED_GOAL=115x cheaper than managed platforms at scale ($2,932/yr vs $338,913/yr @ 4B req/yr)

LEVELS_STACK=PHP + jQuery + SQLite + nginx | Claude Code on VPS | Mosh | prod edits | --dangerously-skip-permissions
LEVELS_LOOP=Hetzner → CF Tunnel + Tailscale → SSH → c (Claude Code) → edit prod PHP → close laptop

MY_STACK=Bun + Hono + TypeScript + SQLite + nginx static | Cursor over SSH (cheaper than Claude Code) | tmux | git commits
MY_DIFF=Cursor not Claude Code | Bun/Hono not PHP | git rollback not prod-first | no Mosh | no skip-permissions on prod
MY_LOOP=Tailscale SSH → Cursor + tmux → Bun/TS on VPS → git commit → nginx static + /api/* → Bun:3000

Stack comparison

LayerLevelsMe
HostingHetzner VPSHetzner VPS
AdminTailscale + TermiusTailscale + Termius ✓ live
IngressCloudflare Tunnel, all inbound blockedSame (CF planned)
BackendPHPBun + Hono + TypeScript
FrontendjQuery + HTMLStatic HTML (Astro later)
DatabaseSQLiteSQLite
AIClaude Code on VPS (c alias)Cursor over SSH — way cheaper
Mobile SSHMoshSSH + tmux
Deploy safetyEdit prod directlygit commit + rollback
AvoidsLocal dev, Docker/K8s, public SSH, Vercel at scale

Architecture

Users → Cloudflare → [outbound tunnel] → Hetzner VPS
                              ├─ nginx:443 → static HTML
                              ├─ nginx /api/* → Bun:3000 (Hono + SQLite)
                              └─ Tailscale ← laptop SSH (100.x.x.x only)
Firewall: block ALL inbound. Admin via Tailscale only.

Part 1 — Levels (@levelsio)

Philosophy: Ship products that make money. PHP/jQuery/SQLite in 2026 is fine. Develop on the VPS, not locally. Single VPS, no Docker.

Security: Cloudflare Tunnel is outbound-only → block all inbound firewall. Tailscale for SSH. Never expose port 22 publicly.

Workflow: Tailscale → SSH (Mosh) → type c → Claude Code on prod → close laptop, AI keeps running.

Economics: ~4B req/yr → $2,932/yr self-hosted vs $338,913/yr managed (~115×). VPS ~10% utilized.

Hetzner → CF Tunnel + Tailscale → Mosh → c (Claude Code) → prod PHP/SQLite → profit.

Part 2 — My fork

Same: VPS-first, Hetzner, Tailscale, SQLite, no Docker, self-host for margin + control.

Cursor not Claude Code: Same “code on server via SSH” idea. Cursor on laptop is way cheaper for daily volume. tmux for long shell jobs when laptop closes.

Bun not PHP: TypeScript native, one runtime for API + scripts, AI-friendly. Hono = tiny HTTP router for /api/*. nginx serves static; Bun handles API. No PHP-FPM.

Extra rails: git commit before deploy. No --dangerously-skip-permissions on prod.

Tailscale SSH → Cursor + tmux → Bun/TS + SQLite → git commit → nginx + Bun → done.

Setup checklist

  1. Hetzner VPS (Ubuntu)
  2. Tailscale on VPS + laptop — verify ping; SSH via 100.x.x.x
  3. Cloudflare Tunnel (cloudflared) — route domain
  4. Hetzner firewall: block all inbound
  5. nginx + stack (Levels: PHP / Mine: Bun + static HTML)
  6. AI tool (Levels: Claude Code + c alias / Mine: Cursor over SSH)
  7. Stop coding locally — VPS is source of truth

Tailscale on this server: ✓ · IP: 100.x.x.x · Host: my-vps