Every hosting comparison you find ends in a table and no answer. This one ends in an answer, because for spinning up an MVP the decision is genuinely not that close, and pretending otherwise wastes the week you were supposed to spend building.
The criteria that actually decide it: what you pay before you have users, how long a deploy takes, whether Postgres is a first-class thing or an afterthought, and how expensive it is to leave when the pricing stops making sense.
The frontend question is already settled
Static frontends are a solved, commoditised problem. Every serious option gives you a global CDN, automatic TLS, preview deploys per pull request, and a free tier that will carry an MVP indefinitely.
| 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 |
If you are on Next.js, use Vercel and stop thinking about it; the integration is the product and nobody else matches it. If you are shipping anything else, or bandwidth is a real cost, Cloudflare Pages is the better default because unlimited bandwidth removes an entire category of future surprise. If the site is genuinely static, GitHub Pages is free and has fewer moving parts than either.
Do not spend a day on this decision. It is reversible in an afternoon.
The backend question is the real one
This is where the money and the regret live. 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. This is the category built for exactly the situation you are in.
| 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 deserves a specific warning. It is the single most common reason an investor or a first customer opens your demo and sees a spinner for thirty seconds. If you are going to use Render for anything anyone will click, pay the seven dollars.
Fly.io is the strongest of the three 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 and its learning curve is real.
Serverless containers: Cloud Run, AWS App Runner
Google Cloud Run is the most underrated option in this whole comparison. You give it a container, it scales to zero, you pay per request, and the free tier is genuinely generous. An MVP with modest traffic often costs literally nothing.
Two caveats. Cold starts are real, typically a second or two for a Python container, which is fine for an API and poor for a page load. And it has no managed Postgres of its own, so you are pairing it with Cloud SQL (expensive at small scale) or an external provider like Neon (better).
AWS App Runner is the same idea, executed less well and priced worse. Skip it.
A box you rent: Hetzner, DigitalOcean, plus Coolify or Dokku
The unfashionable option that keeps quietly winning on economics. 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 usage billing that can surprise you, and no vendor who can reprice you.
What you are paying: you own the operating system. Security updates, backups that you have actually tested, and being the person who gets paged. That is perhaps two hours a month once it is set up, and a full day to set it up properly the first time.
Postgres is a separate decision, and it matters more
This is the part most comparisons skip, and it is the one you will regret getting wrong, because moving compute is a day and moving a database with real 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 worth changing your mind over. Every pull request gets a copy-on-write branch of production data, so migrations are tested against the real shape of your data before they merge. That kills an entire class of Friday-evening incident, and nothing else in this table offers it.
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 difference 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. Over a nine-month pre-launch period that is real money for nothing.
- Your hours. A day setting up a VPS is a day not building. At an MVP's stage that is usually the most expensive line item on the page, and it is the one people leave off.
- Exit cost. Ask of any platform: if the pricing doubles, how long to leave? 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 at all.
The verdict
Default, and what we use
Frontend on Cloudflare Pages. Backend on Railway. Postgres on Neon. Under ten dollars a month at MVP scale, deploys in under two minutes, database branching on every pull request, and everything is a container or standard Postgres so leaving is an afternoon rather than a rewrite.
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, at least until you are large enough for that to invert.
- 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 actually test a restore.
- Traffic is spiky or near zero. Cloud Run plus Neon, both scaling to zero. Genuinely free at low volume, and it stays cheap through a launch spike.
What we would not do for an MVP: raw AWS with ECS, ALB, RDS, VPC and IAM. It is the right answer eventually and it is a week of yak-shaving now, at a stage where your only real risk is not shipping. Get to users first. The migration is a known quantity, and by then you will know what you actually need.