cutty devlog #4 — I changed the server at night and nobody noticed
A quick morning note: cutty.dev has been living on a new server since today. DNS switched around 22:00, the Let's Encrypt certificate was issued on the second try, the container came up with the production database — 17 links and 3 users migrated 1:1. The other side barely noticed.
This time no retrospective — it hasn't cooled down yet. What happened, in a few points:
Why
Until now, cutty.dev lived in the same box as the rest of my home lab. It worked, but every server reboot meant a moment of anxiety about production. Production on a separate VPS means the home lab can be a home lab again, and cutty.dev stops depending on whether I'm reinstalling something next to it.
Stack after cutover
- VPS in EU (France, OVH) — cheapest plan, because cutty.dev doesn't need much
- Caddy reverse proxy with auto-HTTPS via Let's Encrypt (renew every 60 days, no config)
- Docker container with Astro 5 SSR + SQLite on a volume
- Ollama (qwen3:14b) translating Polish → English still on the home lab — the VPS reaches it via a private mesh network, latency ~30 ms
- SQLite database copied 1:1 — no link disappeared, no session lost
Pre-launch by the way
Since I was already in the middle of it, a few things to tidy up:
- Privacy policy and terms updated to reflect reality — no infrastructure details in the public document, "TLS via Cloudflare" replaced with Let's Encrypt, hosting described neutrally as "own VPS in EU"
- The error page for expired links stopped being dry text — now it shows a branded layout with a CTA "Back to homepage"
- Country detection in statistics — previously from the Cloudflare header (when traffic went through their proxy), now from a local IP→country database. Same data, different implementation, no external dependency
- Monitor checks every 5 minutes if the site is alive (container, reverse proxy, mesh tunnel, certificate, disk, RAM). Telegram gets a notification if something goes down — with a 30-minute throttle so it doesn't flood the chat if something freezes
What's next
Pre-launch must-haves are almost done — only minor things left (Lighthouse audit after the daily Google quota resets, a second watchdog as redundancy). Then v0.6: five new languages (DE/ES/FR/IT/CZ) — Ollama translates at night, I sleep. Only after that ProductHunt.
Stripe? Only after 1000 registered users. There's no point setting up a payment gateway when I don't even know if people will use the free version yet. First traction, then monetization.
Domain, VPS electricity, certificate — together about 30 PLN per month. The rest is time.