vercel · deploy · tutorial
We Left Vercel at $1,800/mo for a $5 VPS
The $1,800 Vercel invoice that triggered the move: line-by-line math, the exit weekend, and the $5 flat afterlife. Receipts inside.

The invoice that ends the debate
$1,800 for one month. Not a spike, not an attack — a normal month of a growing app: image-heavy pages, API polling, a marketing launch mid-cycle. The dashboard showed green builds all month; the billing page showed a car payment.
Every founder negotiates with this invoice the same way: disbelief, then optimization week, then the math — optimized serverless still costs 30x the flat box.
We left Vercel at $1,800/mo for a $5 VPS. This is the receipt, the exit, and the afterlife.
The $1,800 anatomy
| Meter line | Usage shape | Approx. damage |
|---|---|---|
| Fast Data Transfer | ~4TB (images + API) | ~$450 overage |
| Edge Requests | ~80M (polling + bots) | ~$140 overage |
| Function Duration | Heavy SSR per request | ~$400+ |
| Image Optimization | Transforms + cache writes | ~$300+ |
| Seats + add-ons | Team plan, analytics | ~$200+ |
| Base + rounding | The seat that started it | Remainder to $1,800 |
Three details make optimization a treadmill, not a fix:
- Growth re-prices itself. Every optimization buys one quiet month; then traffic grows 30% and the meters return. Serverless bills success per unit — the better the launch, the larger the invoice. Flat hardware absorbs growth for free until the box fills.
- Images are the silent killer.
next/imageon Vercel meters transforms plus cache reads/writes per variant — responsive images multiply every upload into a dozen billable operations. Self-hosted Nginx serves variants from disk once, cached at Cloudflare forever, $0 marginal. - Polling architectures meter per tick. Dashboards refreshing every 5 seconds look free in dev and bill like DDoS in prod: 80M edge requests from real users behaving normally. WebSockets or longer polling on your own box cost CPU pennies, not per-request dollars.
The bill-study and $900-post proved the meters. This one walks out the door.
Leave Vercel for VPS in one weekend
The ditch-Vercel guide in the BoringPush docs plus the Hetzner build post — executed Friday night to Sunday, DNS flipped Sunday midnight.
Step 1 — Reproduce the stack on the box before touching DNS.
On Friday, set up a small server such as a CX22 with the kit's setup script: Node, a process manager, SQLite, Cloudflare Tunnel and Tailscale. Choose SQLite as the database and ship the app to it with bp deploy.
App, database, and process manager on one box — no poolers, no external DB bills, queries stay local. Tunnel carries visitors (Cloudflare edge absorbs the polling and bots that cost $140+ before), Tailscale carries admin. Build the whole afterlife while Vercel still serves: zero risk, full rehearsal.
Step 2 — Migrate data and secrets Saturday, verify Sunday.
Export your data, import it on the box and compare row counts for users, orders and content. Copy your production settings across with bp secret sync. Then verify with a hosts-file override, so you click every flow against the box, not Vercel.
Row counts must match exactly; webhooks get test events through the tunnel first.
Step 3 — Flip DNS at midnight, watch the meters die.
Point Cloudflare DNS at the tunnel, proxied, after lowering the TTL on Friday to 300 seconds. On Monday, scale the Vercel project to zero and keep it for 30 days as a parachute before deleting it. Your Telegram or Discord alert will confirm the first order served from the VPS.
Low TTLs Friday make Sunday's flip propagate in minutes. The old project idles (not deleted) for a month — the BoringPush parachute rule: instant retreat if anything surprises, $20 insurance against regret. By Monday the only Vercel line left is the seat being cancelled; by month two the invoice reads $5 flat from Hetzner plus $0 in meters.
The parachute stays packed — the exit included in the playbook.
Before and after the flip
| Line | Vercel month | VPS month |
|---|---|---|
| Hosting total | ~$1,800 | $5 |
| 4TB transfer | ~$450 overage | $0 (flat + Cloudflare cache) |
| 80M requests | ~$140 overage | $0 (Nginx + edge) |
| Image variants | ~$300+ | $0 (disk + cache) |
| Cold starts | 800ms–2.5s idle | 0ms (always-warm PM2) |
| Deploy speed | 3–12 min pipeline | 20 s push |
| Admin burden | Zero (their pager) | ~1 hr/month (updates, snapshots) |
This is the post's core, and the honest price: ~1 hour monthly of box ownership (patches, disk watch, snapshot verify) plus the compliance paperwork staying yours. At $1,795/month savings the hourly rate is absurd — but below ~$100/mo in serverless spend, the hour can genuinely cost more than the meters.
BoringPush exit math has a threshold; this invoice cleared it by a mile.
FAQ
How do I know it's time to leave Vercel for VPS?
Three signals, any two: monthly spend past ~$100 with growth (meters accelerating), cold starts or timeouts shaping UX (serverless constraints biting), and one calm weekend available (exits need focus, not heroics). Below that, optimize in place (caching, image discipline) and stay. The $100 line is heuristic; the trend is the verdict.
What happens to preview deployments after leaving?
Replaced by the staging twin: second bare repo, second PM2 process, staging subdomain — push to preview, click, approve, push to prod. No per-seat preview pricing, no comment-bot integrations, slightly less glitter. Teams living on preview collaboration should price that loss honestly; solos lose nothing they used.
Do I lose DDoS protection leaving Vercel's edge?
No — Cloudflare's edge replaces it (arguably upgrades it): same anycast absorption, plus WAF rules you control and caching you tune. The tunnel means your origin never takes direct hits by construction.
Edge protection was never Vercel-exclusive; it was CDN-included. Keep the CDN, change the origin, pocket the difference.
What about the team features (comments, RBAC, audit logs)?
Rebuilt lightly or skipped: deployment approvals become the stage-approve phone pattern, preview comments become Telegram threads, audit logs become git history plus the admin audit table. Enterprise teams with compliance checklists should stay (or go hybrid: marketing on Vercel, app on VPS). Solo exits sacrifice glitter, keep gold.
Can I go back if the VPS life doesn't suit me?
Yes — the code runs both places (one database setting plus the same Next.js build), which is why the old project idles a month instead of dying day one. Re-point DNS, warm the serverless functions, resume meters.
Reversibility is a feature of portable architecture: the exit is a flip, not a migration, in both directions. Try the flat life with a parachute.
What breaks most often in the first month after exit?
Disk filling (logs + old releases + snapshots — the cleanup cron handles it), unattended-upgrades rebooting at 3am (pin the window, PM2 resurrects), and forgetting the staging twin exists (push to prod out of habit). All three are week-one lessons the Hetzner guide now includes. Month two is when the silence — and the $5 invoice — starts feeling normal.
Keep reading
- Ditch Vercel: $1,800/mo to $5 VPS (Exit Paths) — the three exit paths compared
- $900 Vercel Bill? How Surprise Invoices Happen — the meter math behind this receipt
- Deploy Next.js on Hetzner $5 by Dinner Tonight — the afternoon build the exit lands on
+ all the boring stuff (analytics, auth, SQLite ↔ Supabase, full marketplace, webhooks)
Command from your phone.
Built so autonomous AI agents build what you want without breaking what's already paying you.
- Built-in analytics — cookie-free mode, $0 forever, no PostHog bill
- SQLite ↔ Supabase: one setting, same field names
- Full digital marketplace & feedback boards included
- 3 payment rails: Stripe, LemonSqueezy & Dodo Payments
- Agent fences: lint gate, read-only data access, auto-rollback
- Ship from your phone via SSH & WireGuard/Tailscale in under a minute
$199
Get BoringPushOne-time payment · Lifetime updates · Unlimited projects.
Keep reading


