deployment cost infrastructure

The Real Cost of 'Free' Vercel Deployments

Vercel's free tier is bait. Here's how we deploy production apps on Cloudflare Pages for $0/month and Hetzner for $50/month.

February 22, 2026 — min read

Core Concept

Every Next.js tutorial says: “Deploy to Vercel in one click!”

The trap:

  • Free tier: 100GB bandwidth/month
  • You hit that in Week 2 with 5K users
  • Vercel Pro: $20/month (still limited)
  • Vercel Enterprise: $thousands/month

At scale, Vercel costs 10x more than self-hosting.

The Constraint

The hidden costs of Vercel:

Usage TierBandwidth LimitCostActual Cost at 10K Users
Hobby (Free)100GB/month$0N/A (you’ll exceed this)
Pro1TB/month$20/mo$20 (if you’re lucky)
OveragesPer GB$0.15/GB+$300/mo (if you serve images)

Math:

  • 10K users × 50MB/month = 500GB bandwidth
  • Free tier covers 100GB
  • Overage: 400GB × $0.15 = $60/month

For a static site that could be $0 on Cloudflare Pages.

The Solution

We use different platforms for different app types.

1. Static Sites → Cloudflare Pages (Free)

Best for: Landing pages, blogs, documentation

Why:

  • Unlimited bandwidth (truly free)
  • Global CDN (180+ data centers)
  • Automatic HTTPS
  • Deploy via GitHub (same DX as Vercel)

Cost: $0/month (even at 1M visitors)

How to deploy:

# Connect your repo to Cloudflare Pages
# Set build command: npm run build
# Set output directory: dist
# Done.

We use this for:

  • Company website (this site)
  • Documentation sites
  • Portfolio pages

2. Dynamic Apps → Hetzner VPS ($50/month)

Best for: Apps with backend, APIs, databases

Why:

  • 8 vCPU + 16GB RAM for $50/month (vs $200/month on AWS)
  • European data centers (GDPR compliant)
  • 99.9% uptime SLA
  • No bandwidth overages

How to deploy:

# Docker Compose + Caddy reverse proxy
docker-compose up -d

We use this for:

  • API servers (Node.js, Rust)
  • Background workers
  • Ollama inference (AI models)

3. Edge Functions → Cloudflare Workers ($5/month)

Best for: API endpoints, middleware, webhooks

Why:

  • 10M requests/month on free tier
  • Sub-10ms latency globally
  • V8 isolates (not containers, so instant cold start)

We use this for:

  • Image resizing (on-the-fly)
  • Stripe webhooks
  • Geolocation-based routing

The Architecture Comparison

Vercel setup (expensive):

Next.js on Vercel: $20/mo base + overages
Database: $25/mo (PlanetScale/Supabase)
Images: $50/mo (Vercel image optimization)
Total: $95/month (at 10K users)

Our setup (efficient):

Astro on Cloudflare Pages: $0/mo
API on Hetzner VPS: $50/mo
Database: Supabase (included in VPS budget)
Images: Cloudflare R2 ($1/mo)
Total: $51/month (at 10K users)

Savings: $44/month = $528/year per project

At 10 ventures: $5,280/year saved.

The Trade-Off

What you lose:

  • One-click deploys (you need basic DevOps)
  • Vercel Analytics (use Plausible instead)
  • Preview deployments (Cloudflare has this too)

What you gain:

  • 50% lower costs
  • No vendor lock-in (move hosts in 1 hour)
  • Better performance (Cloudflare’s CDN > Vercel’s)
  • Learning (you own your infrastructure)

The Deployment Script

Our standard deploy (Hetzner VPS):

# SSH into server
ssh root@your-server

# Pull latest code
cd /var/www/your-app
git pull origin main

# Rebuild containers
docker-compose down
docker-compose up -d --build

# Done. Zero downtime with health checks.

Time: 2 minutes (vs 15 minutes with AWS CodePipeline)

The Investor Math

At Series A, VCs calculate your burn rate.

Bad:

Revenue: $50K/month
Infrastructure: $5K/month (Vercel + AWS)
Burn: 10% of revenue on hosting

Good:

Revenue: $50K/month
Infrastructure: $500/month (Cloudflare + Hetzner)
Burn: 1% of revenue on hosting

The difference: 9% margin improvement = higher valuation.

Example: Dropbox went from AWS to their own data centers and saved $75M/year. Their IPO valuation jumped accordingly.

The First Principle: Infrastructure should be boring and cheap. Spend your capital on customer acquisition, not on Vercel’s margin.