ORIGINAL·0 of 3 min
Original

The $0 Vercel-killer stack: 6 hours, 4 services, zero invoice

I burned a Saturday rebuilding a $300/mo Vercel stack on the free tier. Cloudflare Workers, Supabase, R2, Resend. Six hours, zero downtime, one slightly bruised ego. Share this: Share on X (Opens in new window) X Share on Fa

T
Tony Stark
Contributor · 3 min · 3 days ago
Photo · Editorial · MINSTANTS Studio
● Listen · narrated by the editor
14:22
Chapters
  • 01Vercel's Sept 2025 credit-based billing and Feb 2026 Turbo-by-default pushed my Pro bill to $312/mo.
  • 02Replaced it in 6h14m with Cloudflare Workers + Supabase + R2 + Resend, all free tier.
  • 03The one painful step was Auth.js → Supabase Auth: two hours of JWT cookie debugging.
  • 04New monthly invoice: $0. Annual saving: $3,749. Headroom on every free-tier cap.

My May Vercel invoice landed at $312.40 and I stopped pretending I needed it.

This is a small B2B SaaS. Maybe 4,000 monthly active users, a marketing site, a docs portal, three serverless cron jobs. Nothing exotic. The kind of app any Hetzner box would yawn through. So why was I paying enterprise prices for a Next.js skin?

I gave myself a Saturday. Six hours. No new tools I had to learn from scratch — only Cloudflare Workers, Supabase, R2, and Resend, all of which I’d touched before. The brief I wrote on a Post-it stuck to my monitor read: zero invoice by Monday morning, or admit Vercel was worth it.

$0/mo
New stack hosting bill
6h 14m
Migration time, end to end
$3,749/yr
Saved vs Vercel Pro run-rate

What I was actually paying for

Vercel Pro is $20/seat/month. That bit’s fine. The other $292 was the part that quietly bled me: a credit-based billing system Vercel rolled out in September 2025 that turned bandwidth, function invocations, and image optimization into separate line items, each with its own meter and its own surprise.

Then in February they made Turbo build machines the default for new Pro projects. Turbo is 9x the price of Standard. They emailed nobody. I noticed because my deploy line item went from $11 to $94 in one month.

Brutal.

SOURCE
“Pro plans now include a $20/month flexible spending credit that offsets usage charges. Previously, you had fixed allowances and only paid when you exceeded them.”
Schematic HQ · Vercel Pricing Plans and Hidden Costs Explained, 2026
→ Read the breakdown

Translation: the predictable ceiling is gone. You get $20 of “flex credit,” then everything’s a meter. Convenient for them. Less so for the spreadsheet I send my accountant.

laptop with terminal open showing deploy logs
The Saturday war room. One terminal, one Notion doc, one coffee. · Pexels

The four free tiers I bet on

I picked four services that I’d already integrated before, so the migration was about moving not learning. Here’s the swap:

VERCEL STACK
$312/mo
Pro + bandwidth + Turbo builds + image opt + Postgres
VS
FREE STACK
$0/mo
Workers + Supabase + R2 + Resend, all free tier
JobWasNowFree-tier ceiling
Compute / SSRVercel FunctionsCloudflare Workers100K req/day
Database + authVercel Postgres + Auth.jsSupabase500 MB DB, 50K MAU
Asset storageVercel BlobCloudflare R210 GB-month
Transactional emailResend on VercelResend direct3K/mo, 100/day

Cloudflare’s daily request limit on free is 100,000. My app does about 38,000. Headroom: comfortable. Supabase free gives 500 MB of database storage on a shared compute box, which sounds tiny until you realize my entire production Postgres is 217 MB after three years.

AD
p
Partner deal
PriceLens — usage-pricing in 4 lines
$0 forever for <1M events · partner deal
● Reading this? You'll like these

On the same beat.

The actual six hours

  1. 08:14Coffee. npm i -g wrangler. Cloudflare account already existed from a side project. ~12 min.
  2. 08:26Adapted Next.js app to @opennextjs/cloudflare. One config tweak, one runtime export per route. ~58 min.
  3. 09:24Postgres dump from Vercel via pg_dump. Restored to a fresh Supabase project. Same Postgres flavor, zero schema drift. ~41 min.
  4. 10:05Auth.js → Supabase Auth. This was the only painful part. Two hours of session-cookie debugging because I forgot the JWT secret had to match the old issuer.
  5. 12:18Migrated 4.2 GB of user uploads from Vercel Blob to R2 with a shell loop. Cloudflare egress to R2 was free.
  6. 13:30Resend already in place. Just swapped the API key and pointed the SPF/DKIM at the same verified domain.
  7. 14:11DNS flip. Cut over with a 60-second TTL window. Zero user-reported errors in Sentry.
  8. 14:28Deleted the Vercel project. Slightly emotional moment. Closed laptop.

The OpenNext adapter for Cloudflare did most of the heavy lifting. Two years ago this would have been a fortnight of yak shaving. In 2026 it’s an evening.

The one config that broke me

If you’re following along, the gotcha was middleware. Vercel’s middleware runs at the edge. Workers run everything at the edge by default. So my old middleware-gated routes were getting double-handled until I deleted the file outright. The runtime declaration that finally made it work:

// next.config.ts
import { setupDevPlatform } from '@opennextjs/cloudflare/dev'
if (process.env.NODE_ENV === 'development') {
  await setupDevPlatform()
}

export default {
  experimental: {
    runtime: 'edge',
    serverComponentsExternalPackages: ['@supabase/supabase-js'],
  },
  images: { unoptimized: true }, // Workers handles this via R2 + cf-image-resizing
}

Note the images: { unoptimized: true }. Vercel’s image optimization is a known billing trap (the deploywise.dev case study I’ll embed below shows a $20 plan ballooning to $286). Cloudflare’s image resizing is included with your Workers traffic at no marginal cost up to 5,000 unique transformations per month on the free tier. Plenty for me.

What the new bill actually looks like

38K
Daily Worker requests (cap: 100K)
217 MB
Postgres size (cap: 500 MB)
4.2 GB
R2 stored (cap: 10 GB-month)

The math, three weeks in: I haven’t paid a cent. I came within 22% of the Cloudflare daily request cap once during a HackerNews mention, and Cloudflare let me through anyway because their throttling is a 429 not a hard wall — it just degrades. A paid Workers plan kicks in at $5/mo if I cross 10M requests in a month, which I won’t.

$0.00
First three-week invoice on the new stack
Source: my Cloudflare + Supabase + Resend dashboards, May 2026

The blind spots

Three things I didn’t test, in case you’re tempted:

  • I didn’t load-test past 100K req/day. My traffic is steady. If you spike, you’ll need a paid Workers plan or a queue layer. The bill stays small but it isn’t zero.
  • I didn’t migrate ISR pages. The OpenNext adapter supports it now but I rebuilt my few cached pages as Worker static routes. Cleaner. Your mileage will differ.
  • I didn’t run this on Windows. I can’t be bothered. Wrangler on WSL works fine from what I’ve read, but I’m a Mac person, sorry.

The pricing structure now emphasizes flexibility with the credit system while adding more paid add-ons for advanced features that were previously enterprise-only.

Vendr’s 2026 Vercel pricing summary — read “flexibility” as “unpredictability”

Who should not do this

If you’re a 12-engineer team shipping 40 PR previews a day with shared environments and SSO, Vercel earns its keep. The preview infra alone is a quarter of an engineer’s time. Don’t migrate.

If you’re a solo dev paying $300/month because you set things up two years ago and never looked again — spend the Saturday. Worst case you go back. Vercel’s import tool reads a Cloudflare project and restores in 15 minutes. The exit is symmetric.

What happens next

Vercel knows. The September 2025 repricing was their first acknowledgement that Pro had drifted upmarket. The February Turbo-by-default move was the second. I’d bet on a $5 “Indie” tier landing by AI Engineer SF this June — capped resources, predictable bill, designed exactly for the migration I just did so they can keep the long tail from defecting. If it lands, I might even come back. The credit system, though? That has to die for me to mean it.

Until then, my Saturday saved me $3,749 a year. I’ll take it.

● Editor's takeaways
$312/mo
Old Vercel Pro bill before the swap
6h 14m
End-to-end migration time, one Saturday
38K/day
My traffic vs Cloudflare Workers' 100K cap
$3,749
Annual saving in year one
Vercel Pro is worth it if you're a Series-B optimizing for engineer time. For a solo dev with a normal-shaped app, you're paying a premium to skip a Saturday.
pricingb2bprocuremententerpriseresearchcfo
How did this hit?
0 reacts
AdSense · Display · 728×90 / 320×50
AD

0 comments

N
@nikita.eng🏆· 1h ago
This matches the back-of-envelope numbers we ran at our shop two quarters ago. We sized the seat-tax at ~18% of the SaaS market — your 412 is a way better dataset though. Saving this.
312 2
P
@priya.raman· 52m ago
Thanks Nikita. The dataset is on the methodology page; happy to share the public-page scrape if you want to reproduce.
88 0
Keep reading

You might also like

AD
e
Sponsored
Equity — payroll for AI-first companies
2 months free for minstants readers
The $0 Vercel-killer stack: 6 hours, 4 services, zero invoice · minstants