# The MVP Hosting Decision Guide

A practical guide to picking the right hosting model when you're starting a SaaS — written by Nikola Lalovic.

If you're early-stage and you're about to spend money you don't have on infrastructure you don't need, read this first. I've shipped 120+ projects across all three of these paths since 2018; the wrong call is reversible, but it costs you weeks.

---

## TL;DR — the decision in one paragraph

- **Pre-revenue MVP, validating an idea?** Hybrid free-tier (Vercel + Supabase + Render/Railway). Costs $0/month at MVP traffic. You only pay for engineering time.
- **Stable small/mid-size project, predictable users?** Managed hosting (Hostinger or similar). Predictable bill, near-zero ops, fine for marketing sites and small SaaS.
- **Growth-stage, multi-tenant, or compliance constraints?** Real cloud (AWS or GCP). Higher setup cost, but it's the only path that holds up at scale.

If you're not sure — start with the hybrid free-tier. The migration path from there to cloud is well-trodden. Going the other direction (over-architecting cloud, then realizing you wasted six weeks on infra for an MVP) is the painful one.

---

## Path 1 — The hybrid free-tier setup

This is the path I recommend for almost every new MVP. The full stack costs $0/month at typical MVP traffic and ships in days, not weeks.

### The stack

| Concern | Tool | Free tier covers |
|---|---|---|
| App hosting | Vercel | ~100 GB bandwidth/mo, unlimited deploys |
| Database | Supabase | 500 MB Postgres, 50k MAU |
| Auth | Supabase Auth | Built into the DB tier |
| File storage | Supabase Storage | 1 GB |
| Backend services | Render or Railway | 500 hours/mo of compute |
| Email | Resend | 100 emails/day, 3k/mo |
| Domain & CDN | Cloudflare | DNS, basic WAF, CDN — free |
| CI/CD | GitHub Actions | 2k minutes/mo on private repos |

### What "MVP traffic" means here

In my experience, the free-tier limits are not the problem. The problem is usually:
- A single page that hammers the DB on every load (fix: cache, or move it client-side).
- A backend job that runs constantly instead of on-demand (fix: queue + cron).
- An image that's 5 MB instead of 50 KB (fix: optimize before deploy).

If your MVP has, say, 500 monthly active users and ordinary usage patterns — chat, dashboard views, occasional file uploads — you'll stay well inside every free tier on this stack.

### Setup walk-through

1. **Domain**: register on Cloudflare (cheapest renewals + free DNS).
2. **App**: `npx create-next-app`, push to GitHub, connect to Vercel. ~10 min.
3. **DB + Auth + Storage**: create a Supabase project. Note the URL + anon key + service role key. ~10 min.
4. **Email**: create a Resend account, verify a domain. ~15 min.
5. **Backend services** (only if you need long-running tasks or webhooks): a tiny Express on Render or Railway, $0 until you exceed 500 hours/mo.
6. **CI/CD**: GitHub Actions runs your tests and Vercel handles preview deploys. Done.

The whole setup should take a focused afternoon. After that, you ship features.

### When you outgrow it

Honest signs you're outgrowing the free tier:
- DB > 400 MB (Supabase tier upgrade is $25/mo — still cheap).
- Vercel bandwidth > 80 GB/mo (you're getting real traffic; revenue should be funding this).
- Cold-start latency on Render is hurting UX (move to a hot tier or migrate to AWS Lambda / Fluid Compute).

When any of these hit, you migrate one piece at a time. You don't replatform everything at once. That's the beauty of the path — every component is replaceable.

---

## Path 2 — Managed hosting

For projects where the front-end is most of what matters: marketing sites, small WordPress / WooCommerce stores, product showcases, side businesses.

### When it fits

- You don't need custom server-side logic; a CMS does the job.
- Traffic is predictable and bounded (low thousands of visitors per day).
- You want a single place to log in and manage hosting, email, domain, and TLS.
- You don't want to think about infrastructure — at all.

### Cost shape

$5–$30/month flat. The bill never surprises you. Most of my managed hosting setups land around $15/month all-in.

### What you give up

- Cold cloud capabilities (auto-scaling, edge functions, advanced caching).
- Bring-your-own-runtime — you're stuck with whatever PHP or Node version the host supports.
- Easy multi-region deployment — managed hosts are usually single-region.

### When to use it

Stable workload, predictable cost, the developer (me) handles config and updates. You stop thinking about hosting; the bill becomes a line item like rent.

---

## Path 3 — Real cloud (AWS or GCP)

For projects where the platform *is* the product. Multi-tenant SaaS at scale. Compliance-heavy industries. Workloads that genuinely need elasticity.

### When it fits

- You have or expect to have **multi-region** users.
- You have **compliance** requirements that mandate where data lives.
- You're operating **multi-tenant** infrastructure (multiple customers, isolated cleanly).
- You need **infrastructure as code** (CloudFormation, Terraform) for repeatability and audit.
- Your workloads are **bursty** (10× peaks vs. baseline) — managed hosting will degrade or break.

### What it costs

- Setup: 1–3 weeks of engineering, depending on scope.
- Monthly: starts around $50/mo for a minimal setup; scales with usage.
- The biggest hidden cost is **on-call**. If your cloud is critical, someone has to wake up when it's not.

### What I always include in cloud setups

- **IaC** (CloudFormation or Terraform) — no click-ops.
- **Secrets manager** (AWS SSM, Secrets Manager, GCP Secret Manager).
- **Observability** (CloudWatch / Cloud Logging + a dashboard you can show).
- **Cost alerts** at 50%, 80%, 100% of monthly budget.
- **Runbooks** for the top 5 incidents.
- **Documented rollback** for every production-critical deploy.

If your cloud setup doesn't have these, it's not a real cloud setup. It's just AWS-shaped technical debt.

---

## Migration paths

You don't have to pick the "right" path forever. The migrations are well-known.

### Free-tier → cloud

When: you've outgrown the free tier and you have multi-region or compliance needs.

Order of moves:
1. Move the database first. Postgres → RDS or Aurora. Run both for a week, sync changes, switch over.
2. Move backend services. Render/Railway → ECS / Fluid Compute / Cloud Run.
3. Optionally move app hosting. Vercel → CloudFront + Lambda@Edge if you need it. Often you don't — Vercel scales with you.

Time: 2–6 weeks of focused work for a typical SaaS.

### Managed → cloud

When: you've outgrown the host's ceiling.

Order of moves:
1. Database first (often the painful one — managed hosts use proprietary admin tools).
2. App content / static assets to CloudFront or Cloud CDN.
3. Custom backend logic to Lambda / Cloud Run.
4. Cut over DNS.

Time: usually shorter than free-tier → cloud because the codebase is simpler.

### Free-tier → managed

When: you want a predictable bill and don't need cloud-scale features.

Order of moves: usually a single weekend. Export the DB, dump it to the new host, swap DNS, done. The Vercel-hosted Next.js app is harder to move to a managed host than the DB; in practice you keep the Vercel app and only move the DB / backend / file storage to managed.

---

## How I help

I do all three. The point of this guide is that I don't push you toward the path that's most billable for me. I push you toward the path that's right for *your* stage.

Ways to work with me:
- **30-minute decision call** — I'll tell you which path fits and what it costs. Free.
- **Setup engagement** — I configure the stack and ship code. Fixed-price.
- **Migration engagement** — I move you from one path to the next without breaking the live product. Fixed-price.

[Get in touch](https://belikenikola.com/#get-in-touch) and we'll figure out where you are.

— Nikola
