The post below is in Portuguese. We will translate critical announcements as the project gains an English-speaking audience.
Pivot — Cloudflare Workers to our own K3s
ADR-008 supersedes ADR-006. The backend doesn't go to Workers — it goes to our own VPS with K3s and Postgres. Zero marginal cost, full data control, sovereignty.
The original plan was to host cloud-backend on Cloudflare Workers
with D1 (SQLite) and R2 (storage). We pivoted to K3s + Postgres on
our own VPS before writing the first line of production code.
Why we changed
- Zero marginal cost: the VPS already runs 5 of the owner’s other services on K3s. Adding Pistonix is just one more deployment.
- Postgres > SQLite/D1 for binary datalog. When Forge starts uploading track logs, we want indexed JSONB, not pure SQL on a KV.
- Sovereignty: data sits physically in Brazil, under direct CPC and LGPD jurisdiction, no cross-border transfer clause needed.
- Our own Mailu delivers the waitlist notifications without passing through Mailgun, Resend, or similar.
What we lose
- Workers’ infinite auto-scale. Mitigated: the VPS handles comfortably one order of magnitude more than we expect in the first year.
- The 100k req/day free tier. Pay zero extra for it.
ADR-008
ADR-006 was marked “superseded by ADR-008.” ADR-008 documents the context, decision, alternatives considered, and consequences. The final architecture looks like:
- Edge: Cloudflare Tunnel (no firewall port opened).
- Compute: K3s on the VPS, deployment + service NodePort.
- DB: Postgres 16 with Drizzle.
- Email: Mailu.
- Storage: VPS filesystem for basemaps; Cloudflare R2 only enters if it becomes a bottleneck.
Took 2 days to migrate. Smooth.