# Vercel vs $5 VPS: The 60-Second Test That Decides

> $20 vs $5 is the wrong comparison. Real math on bills, latency, cold starts, and attack surface — then pick.

Source: https://boringpush.com/blog/vercel-vs-vps-5-dollar-nextjs

## Everyone compares sticker prices, nobody compares bills
"$20 vs $5, VPS wins" is as lazy as "serverless scales, VPS doesn't." The real comparison has four axes and they point different directions depending on your traffic. The [bill-shock autopsies](https://eden-cms-v2.onbex.co/blog/2026/07/31/vercel-bandwidth-bill-shock) put a $700+ spike at 88% egress, 8% edge requests, ~0% compute — the meter that bites is bytes and request count, not CPU.

Meanwhile [VersusStack's 2026 bake-off](https://www.versusstack.com/vercel-vs-cloudflare-pages) crowns Vercel on DX and Cloudflare on cost at every scale. Both true.

Here's the whole board:

| Axis | Vercel Pro ($20 + meters) | $5 VPS (Hetzner/DO) |
|---|---|---|
| Monthly bill | $20 seat; 1TB then ~$0.15/GB; edge/functions metered | $5 flat. Spikes cost $0 extra |
| Query latency | 35–100ms per cloud DB hop (3 queries ≈ 105ms+ wait) | 0.1ms local SQLite (3 queries ≈ 0.3ms) |
| Cold starts | 800ms–2.5s idle boots | 0ms, persistent PM2 process |
| Timeouts | 10–15s hard function limits kill long jobs | Unlimited — exports and workers run free |
| Attack surface | Complex IAM, public endpoints | 0 open ports (Tunnel + Tailscale) |
| Deploys | Git push, previews per PR, instant rollback | `git push production main`, PM2 reload |
| Scaling story | Infinite, automatic, billed | Vertical to big boxes, then read replicas |
| Worst month | $700–1,800 surprise ([exits](https://www.reddit.com/r/vercel/comments/1sxczcl/we_left_vercel_at_1800month_heres_what_we)) | $5 |

![The Vercel vs VPS bill curve](/blog/vercel-vs-vps-5-dollar-nextjs/cost-curve-vercel-vs-vps.svg "The bill curve: meters climb with your success; the flat line doesn't care.")

## The decision rule (60 seconds)

Stay on Vercel if: spiky unpredictable traffic with real money attached, a team that ships PR previews all day, zero DevOps appetite, and bills still near the seat. Move to VPS if: steady or growing traffic, bandwidth past 60% of the bundle, background jobs hitting timeouts, or one surprise invoice already burned trust.

The levels in between — Lambda/OpenNext at ~$67, Coolify at ~$25–40 — split the difference and are all honest answers for their shapes.

BoringPush refuses to pick for you: the same Next.js stack deploys to Vercel with a hosted database such as MongoDB, to Lambda or Coolify, or to a bare VPS with SQLite, with zero query rewrites. Run both for a month — Vercel for previews, VPS for prod — and let the invoices vote.

Ship from anywhere either way; the repo doesn't care where it runs, only that the loop stays one command.

## FAQ

### Is the latency gap really 300x?
Per query, yes: 0.1ms local vs 35ms+ network hop is the physics, not marketing. Pages doing 3–5 queries feel it most — that's 0.5ms vs 200ms+ of pure waiting before any compute.

### What breaks first on a $5 box?
Disk (past ~50GB — snapshot strategy), then write contention, then geography. Reads basically never — page cache handles absurd throughput.

The flip triggers are writes/backups/regions, documented in the SQLite guide.

### Can I mix: Vercel frontend, VPS backend?
Yes, and it's underrated: marketing pages on the edge, app + DB on the box. Two bills, each minimal, best of both physics.

BoringPush's env-per-target setup supports exactly this.

### Do preview deployments exist off Vercel?
Staging hostname on the same box (`staging.` tunnel, second PM2 process) — $0 extra. Less magical than per-PR URLs, equally effective for review.

### Which is better for AI-agent workflows?
VPS, slightly: persistent filesystem state, no function timeouts killing long agent runs, and the agent edits the exact tree that deploys. Serverless sandboxes add a translation layer agents occasionally mistranslate.
