Every hosting comparison ends in a table and no answer. This one ends in an answer.
Four things decide it: what you pay before you have users, how long a deploy takes, whether Postgres is first-class, and how expensive it is to leave.
The frontend question is already settled
Static frontends are a solved problem. Every serious option gives you a global CDN, automatic TLS, preview deploys per pull request, and a free tier that carries an MVP.
| Host | Free tier | Best at | Where it bites |
|---|---|---|---|
| Cloudflare Pages | Unlimited bandwidth, 500 builds/month | Bandwidth cost, edge functions via Workers | Build minutes are the cap, not traffic |
| Vercel | 100GB bandwidth | Next.js, by a wide margin | Bandwidth and function pricing past the free tier; commercial use restricted on Hobby |
| Netlify | 100GB bandwidth | Forms, redirects, identity without a backend | Build minutes run out faster than you expect |
| GitHub Pages | Free, 100GB soft | Docs and static sites with zero moving parts | No server-side anything, no previews, no redirects |
On Next.js, use Vercel; the integration is the product. For anything else, or where bandwidth is a cost, Cloudflare Pages is the better default.
Do not spend a day on this decision.
The backend question is the real one
The options split into three philosophies.
Platform-as-a-service: Railway, Render, Fly.io
You push a repo, it detects your stack, builds a container and runs it. Postgres is a checkbox.
| Railway | Render | Fly.io | |
|---|---|---|---|
| Entry cost | Usage-based, ~$5/mo credit | Free web tier that sleeps, $7/mo to stay awake | Usage-based, small free allowance |
| Cold starts | None on paid | Free tier sleeps after 15 min, ~30s wake | Configurable, can scale to zero |
| Postgres | One click, backups on paid | One click, free tier expires after 30 days | You run it, or use an external provider |
| Deploy ergonomics | Best in class, near zero config | Very good, blueprint file | Good, but you will meet a Dockerfile |
| Regions | Limited | Limited | Excellent, run close to users |
| Bites you | Usage billing gets expensive quietly | The sleeping free tier makes demos look broken | Networking and volumes have real depth to learn |
Render's sleeping free tier is the most common reason a first customer sees a spinner for thirty seconds. If anyone will click it, pay the seven dollars.
Fly.io is the strongest technically and the weakest for a first MVP, because its advantages, multi-region, anycast, running your own Postgres cluster, are answers to problems you do not have yet.
Serverless containers: Cloud Run, AWS App Runner
Google Cloud Run is the most underrated option. You give it a container, it scales to zero, you pay per request, and the free tier is generous.
Two caveats. Cold starts are a second or two for a Python container, fine for an API and poor for a page load. And it has no managed Postgres, so you pair it with Cloud SQL (expensive at small scale) or Neon (better).
AWS App Runner is the same idea, executed less well and priced worse.
A box you rent: Hetzner, DigitalOcean, plus Coolify or Dokku
A Hetzner cloud server with 4 vCPU and 8GB of RAM is around five euros a month. Put Coolify or Dokku on it and you have your own Heroku: git push to deploy, automatic TLS, Postgres in a container, preview environments.
What you are buying: an order of magnitude more compute per euro, no surprise usage billing, and no vendor who can reprice you.
What you are paying: you own the operating system. Security updates, backups you have tested, and being the person who gets paged. That is perhaps two hours a month, and a full day to set it up the first time.
Postgres is a separate decision, and it matters more
This is the part most comparisons skip, because moving compute is a day and moving a database with customer data is a project.
| Provider | Free tier | Standout | Watch for |
|---|---|---|---|
| Neon | Generous, real | Scale to zero, and database branching per pull request | Cold start on the first query after idle |
| Supabase | Generous, pauses when idle | Auth, storage and realtime included | You are adopting a platform, not just a database |
| Railway / Render | Bundled | Same dashboard as the app, zero extra setup | Render's free database expires at 30 days |
| AWS RDS | 12 months only | Operationally boring at scale | Costs real money from day one, heavy to configure |
Neon's branching is the feature. Every pull request gets a copy-on-write branch of production data, so migrations are tested against the shape of your data before they merge.
The costs nobody puts in the table
- Egress. AWS charges roughly nine cents per gigabyte out. Cloudflare charges nothing. On a media-heavy product this dwarfs your compute bill.
- The idle tax. A managed Postgres that cannot scale to zero costs the same whether you have four users or none.
- Your hours. A day setting up a VPS is a day not building.
- Exit cost. A Docker container on a PaaS moves in an afternoon. A product built on a proprietary function runtime, a bespoke KV store and a vendor auth system does not move.
The verdict
Three situations change that answer, and only three:
- You are on Next.js. Use Vercel for the frontend. The integration is worth more than the bandwidth pricing costs you.
- You are cost-sensitive and comfortable with Linux. Hetzner plus Coolify, with Postgres in a container and backups to object storage. Roughly one tenth the cost at ten times the compute. Budget a full day to set it up, and test a restore.
- Traffic is spiky or near zero. Cloud Run plus Neon, both scaling to zero.
What we would not do for an MVP: raw AWS with ECS, ALB, RDS, VPC and IAM. It is the right answer eventually and a week of yak-shaving now.