
Vercel and Supabase are fantastic for getting a product live fast. Push to GitHub, and your app is deployed. Click a button, and you have a Postgres database with auth and storage. For an MVP, it's hard to beat.
Then traction arrives — and so do the invoices. We regularly speak with founders whose hosting bill went from $45 a month to $800+ without a big jump in users. Almost every time, the problem isn't the platform. It's how the app uses it.
This guide shows where the money goes, the leaks we see most often, and how to plan an architecture that stays affordable as you grow.
Where the money actually goes
Both platforms start cheap — Vercel Pro and Supabase Pro each begin at roughly $20–25 a month — and then charge for usage. The bill grows with:
On Vercel:
- Function invocations and duration — every server-rendered page, API route, and middleware call
- Bandwidth (data transfer) — especially large images, videos, and unoptimized bundles
- Image optimization — each unique transformed image counts
- Team seats — every developer on a Pro team is billed
On Supabase:
- Compute size — a bigger database instance costs more every hour, whether busy or idle
- Database egress — data leaving the database, often from over-fetching
- Storage and bandwidth for files
- Realtime connections and messages, and monthly active users for auth at scale
The 7 cost leaks we find most often
1. Rendering every page on every request
If pages that rarely change — home, pricing, blog, product pages — are rendered dynamically on every visit, you pay for a function call each time. Most of these pages can be statically generated or cached and served from the CDN for almost nothing.
2. Middleware running on everything
Middleware that runs on every request — including images, fonts, and static files — multiplies invocations. A correct matcher that limits it to the routes that need it can cut invocations dramatically.
3. Unoptimized images and media
Serving 4 MB hero images and self-hosting videos burns bandwidth fast. Compress at upload, use modern formats (WebP/AVIF), size images properly, and put video on a dedicated video service.
4. select * and chatty queries
Fetching whole tables or every column, then filtering in JavaScript, drives up database egress and slows everything down. Select only the columns you need, paginate, and add indexes for your common filters.
5. Polling instead of caching
Dashboards that hit the database every few seconds for data that changes hourly are a classic leak. Cache results, revalidate on a schedule or on change, and use realtime only where users truly need live updates.
6. An oversized database instance
Teams often upgrade compute to "fix" slowness that's really caused by missing indexes or N+1 queries. Fix the queries first — you may be able to drop a compute tier.
7. Background jobs in the wrong place
Long-running work — PDF generation, imports, AI calls, email batches — inside request-time serverless functions is expensive and fragile. Move it to queues, scheduled jobs, or a small dedicated worker.
Planning a hosting architecture that scales sensibly
Good architecture isn't about picking the "cheapest" provider. It's about matching each workload to the right kind of infrastructure:
| Workload | Best fit |
|---|---|
| Marketing pages, blog, docs | Static generation + CDN (near-zero cost) |
| Logged-in app pages | Server rendering with caching where safe |
| APIs with steady traffic | Serverless with caching, or a small always-on server |
| Heavy background jobs | Queue + worker, or scheduled functions |
| Database | Right-sized Postgres with indexes, pooling, and read replicas only when needed |
| Files and media | Object storage + CDN; video on a video platform |
Sometimes the right answer is staying on Vercel and Supabase and fixing usage. Sometimes it's a hybrid — keep the frontend on Vercel, move heavy APIs or jobs to a container on AWS, Google Cloud, or a VPS. And occasionally, for steady high-traffic workloads, a fixed-price server is far cheaper than usage-based billing. The point is to decide deliberately, with numbers.
Quick wins you can check this week
- Open your Vercel Usage tab and sort by the biggest line item — that's your first target.
- Check which routes are dynamic in your build output. Could any be static?
- Review middleware matchers.
- In Supabase, check Query Performance for the slowest and most frequent queries.
- Set spend limits and alerts on both platforms so a bug never becomes a surprise invoice.
How we help
At Brahmweb we run a hosting and cost audit: we review your Vercel and Supabase usage, code, and queries, then hand you a written plan — quick fixes, architecture changes, and expected monthly savings. We can implement it for you or guide your team through it. Most audits pay for themselves within the first month or two of savings.
See our cloud and DevOps stack, or book a free hosting cost review →