The $0 Infrastructure That Handles 10K Requests/Day
I run a SaaS product that gets 10,000+ API requests per day. My infrastructure bill is $0. Here is the exact stack.
No, this is not clickbait. No, I am not running on someone's free tier forever. This is a deliberate architecture designed for small teams who want to ship without burning runway on AWS.
The Stack
| Component | Service | Cost |
|---|---|---|
| API hosting | Cloudflare Workers | $0 (100K req/day free) |
| Database | Supabase (Postgres) | $0 (500MB, 50K MAU) |
| Static assets | Cloudflare Pages | $0 (unlimited) |
| Resend | $0 (3K emails/mo) | |
| Monitoring | UptimeRobot | $0 (50 monitors) |
| DNS | Cloudflare | $0 |
| SSL | Cloudflare | $0 (automatic) |
| CDN | Cloudflare | $0 (global) |
Total monthly cost: $0
Why This Works (And When It Breaks)
This stack works because of three principles:
1. Edge-First Architecture
Instead of a central server, every request hits the nearest Cloudflare edge node. My API code runs in 300+ locations worldwide. Latency is under 50ms for 95% of users.
// Cloudflare Worker — the entire API
export default {
async fetch(request, env) {
const url = new URL(request.url);
const path = url.pathname;
// Route handling
if (path === '/api/health') {
return jsonResponse({ status: 'ok', timestamp: Date.now() });
}
if (path.startsWith('/api/users') && request.method === 'GET') {
const users = await env.DB.prepare(
'SELECT id, name, email FROM users LIMIT 50'
).all();
return jsonResponse(users);
}
if (path.startsWith('/api/users') && request.method === 'POST') {
const body = await request.json();
const result = await env.DB.prepare(
'INSERT INTO users (name, email) VALUES (?, ?) RETURNING *'
).bind(body.name, body.email).first();
return jsonResponse(result, 201);
}
return new Response('Not Found', { status: 404 });
}
};
function jsonResponse(data, status = 200) {
return new Response(JSON.stringify(data), {
status,
headers: { 'Content-Type': 'application/json' }
});
}
2. Database as a Service (Not a Database Server)
Supabase gives you a real Postgres database. Not a toy. Not a limited subset. A real PostgreSQL instance with:
- Row-level security
- Real-time subscriptions
- REST API auto-generated
- 500MB storage (plenty for a small app)
- 50,000 monthly active users
# Python client for background jobs
from supabase import create_client
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
# Insert
result = supabase.table('events').insert({
'type': 'signup',
'user_id': user_id,
'metadata': {'source': 'organic'}
}).execute()
# Query with filters
result = supabase.table('events') \
.select('*') \
.eq('type', 'signup') \
.order('created_at', desc=True) \
.limit(10) \
.execute()
3. Static Everything Else
Your landing page, docs, and dashboard are all static. They live on Cloudflare Pages and load in under 1 second anywhere in the world.
# wrangler.toml — deploy config
name = "my-api"
main = "src/worker.js"
compatibility_date = "2024-01-01"
[[d1_databases]]
binding = "DB"
database_name = "my-db"
database_id = "xxx"
The Traffic Math
Here is why 10K requests/day fits in the free tier:
- Cloudflare Workers: 100,000 requests/day free → 10K uses 10%
- Supabase: 500MB DB, 50K MAU → 10K req/day = ~300 unique users
- Cloudflare Pages: Unlimited bandwidth and requests
- Resend: 3,000 emails/month → ~100 emails/day
You have 10x headroom before you need to pay for anything.
What Happens When You Outgrow Free?
| Threshold | What Breaks | Cost to Fix |
|---|---|---|
| 100K req/day | Workers free tier | $5/mo (Workers Paid) |
| 500MB DB | Supabase free tier | $25/mo (Pro plan) |
| 50K MAU | Supabase auth | $25/mo (Pro plan) |
| 3K emails/mo | Resend free tier | $20/mo (Pro plan) |
The beauty: you only pay for what you outgrow. Most apps never hit these limits.
The Monitoring Stack (Also Free)
import json, urllib.request
# UptimeRobot API — free monitoring
def check_uptime():
# 50 free monitors, 5-minute intervals
api_key = "your-uptimerobot-key"
url = "https://api.uptimerobot.com/v2/getMonitors"
data = json.dumps({
"api_key": api_key,
"format": "json",
"logs": 1
}).encode()
req = urllib.request.Request(url, data=data, method="POST")
req.add_header("Content-Type", "application/json")
with urllib.request.urlopen(req) as resp:
result = json.loads(resp.read())
for monitor in result.get("monitors", []):
status = "UP" if monitor["status"] == 2 else "DOWN"
print(f"{monitor['friendly_name']}: {status}")
print(f" Uptime: {monitor.get('all_time_uptime_ratio', '?')}%")
The Deployment Pipeline
No CI/CD service needed. Cloudflare's CLI handles everything:
# Deploy API
npx wrangler deploy
# Deploy static site
npx wrangler pages deploy ./dist
# Run database migration
npx wrangler d1 execute my-db --file=./schema.sql
Total deploy time: 12 seconds. No build servers. No Docker images. No Kubernetes YAML.
Real Numbers From My App
- Daily requests: 10,000-12,000
- Average response time: 47ms
- Uptime: 99.97% (measured over 6 months)
- Database size: 87MB (out of 500MB)
- Monthly cost: $0
- Time to deploy: 12 seconds
- Time to scale: automatic (Cloudflare handles it)
When This Stack Is Wrong For You
This is not a silver bullet. Do NOT use this stack if:
- You need long-running processes — Workers have a 30-second CPU limit
- You need WebSocket connections — Workers don't support persistent connections
- You need more than 500MB of database storage — You will need to pay
- You need full server control — You can't SSH into a Worker
- You process large files — Workers have a 100MB memory limit
For 80% of small SaaS apps, none of these matter.
Want the Complete Setup Guide?
I have put together a complete Ops Mega Bundle with all 5 automation kits (34 files total) that includes:
- Infrastructure-as-code templates (Terraform + Wrangler)
- CI/CD pipeline configurations
- Monitoring and alerting scripts
- Database migration tools
- Security audit checklists
- Cost optimization guides
Get the full bundle: Ops Mega Bundle — $49 (normally $88)
Or start smaller:
- Ops Starter Kit — $19.64 — Essential scripts and templates
- Automation Starter Pack — $19 — Pick-first workflows for small teams
Use code MEGA50 for 50% off (first 20 buyers). 30-day money-back guarantee.
What is your current infrastructure bill? Could this stack replace it? Comment below.
Top comments (0)