All posts

4 min readSynapseKit

Why we self-host

The cost math behind SynapseKit: what Supabase and Vercel actually charge as you grow, and why one VPS beats both until well past product-market fit.

self-hostingcostsarchitecture

Most SaaS boilerplates default to managed backends: Supabase for the database and auth, Vercel for hosting, a queue service here, a realtime service there. It is a rational default — at zero users, everything is free or nearly free, and you ship fast.

The problem is the shape of the pricing curve, not the starting point. Managed platforms price along your growth axes: users, requests, gigabytes, connection-minutes. Which means your infrastructure bill is a function of your success, negotiated before you knew what success would look like. SynapseKit is built on the opposite principle:

Every component has a fixed cost and runs on hardware you rent by the month — so the marginal cost of a new user, a new gigabyte, or a new request is zero.

Here is the math that led us there.

The Supabase bill, itemized

Supabase Pro starts at $25/mo, but that is the floor, not the price. A project running 24/7 needs a compute add-on, and those range from $10/mo for the smallest instance to $3,730/mo for the largest. Egress past the included 250 GB costs $0.09/GB.

The line item that surprises people is auth. Monthly active users past the first 100k are billed at $0.00325 each. That sounds like a rounding error until you multiply: at 500k MAU, auth alone is roughly $1,300/mo — for password checks against a database you are already paying for. Auth is the one workload whose cost should not scale with users, because the work per user is trivial. Metered auth is a tax on growth.

The Vercel curve

Hosting follows the same curve. Real-world Next.js bills on Vercel come out around $60/mo at 50k visitors, about $305/mo at 250k, and about $3,096/mo at 1.5M visitors — driven by function invocations, edge requests, and data transfer. None of those numbers reflect heavier compute; they reflect the same app getting more popular.

The equivalent traffic served from a VPS behind a CDN runs about $30/mo. Same framework, same pages, two orders of magnitude apart at scale.

Serverless also quietly forbids the cheapest architectures. Long-lived SSE connections, in-process background workers, cron inside your app process — all of these are either impossible or metered per connection-minute on serverless. On a VPS they are free, because a persistent Node process holding a few thousand idle connections costs nothing.

What a VPS actually costs

A Hetzner CX23 (2 vCPU / 4 GB) is €5.49/mo. The CX33 (4 vCPU / 8 GB) is €8.49/mo. Both include 20 TB of traffic. Either one comfortably runs this entire stack — the Next.js app, Postgres 17, S3-compatible object storage, and the Caddy reverse proxy — for an early-stage SaaS.

That is the whole bill. Auth has no per-MAU meter because Better Auth lives in your Postgres. Jobs have no queue service because pg-boss lives in your Postgres. Realtime has no per-connection pricing because it is pg_notify fanned out over SSE from your own server. The month you get featured on Hacker News, your invoice is identical to the month before.

The honest trade

Self-hosting is not free; it is fixed-cost. You are trading money for a small amount of operations:

  • You apply security updates to one server.
  • You run backups (the compose file automates the basics).
  • You scale by resizing the server instead of by doing nothing.

For a product with revenue per user, that trade heavily favors self-hosting until well past the point where you can afford a platform team. And the exits stay open: the storage client is the standard AWS SDK, so moving to R2 or S3 is a .env change; the app is a plain Docker image that runs anywhere.

The bottom line

The managed stack optimizes for the first week of a project. The self-hosted stack optimizes for every month after that. If your plan is to run a real business on top of this code — charging real customers, keeping margins — then a predictable $6 to $10 a month, owned end to end, beats a bill that grows faster than your revenue and a stack you can only rent.

That is why SynapseKit ships as one compose file on one VPS. Own your stack. Skip the usage bills.