Deploying a Full-Stack SaaS for Free: Supabase + Render + Vercel
How I deployed CanopyCare — a production Node.js + React booking system — at zero monthly cost using Supabase for PostgreSQL, Render for the backend, Vercel for the frontend, and Cloudflare for the custom subdomain.
The Zero-Cost Stack
When I deployed CanopyCare — a full booking SaaS with auth, photo uploads, email notifications, and an admin panel — I did it without spending a penny. Here's the exact stack:
| Service | Purpose | Free Tier |
|---|---|---|
| Supabase | PostgreSQL DB | 500MB, 50K MAU |
| Render | Node.js backend | 750 hrs/month |
| Vercel | React frontend | Unlimited deploys |
| Cloudflare | Subdomain DNS | Free |
| Cloudinary | Photo storage | 25GB |
| Resend | Transactional email | 3K/month |
Step 1 — Database: Supabase
Supabase gives you a full PostgreSQL database with a connection string you can use directly with Prisma:
Run migrations pointing directly at Supabase:
Step 2 — Backend: Render
Render auto-detects Node.js. The key settings:
- Build command:
npm install && npx prisma generate - Start command:
node src/server.js - Instance type: Free
Critical: move prisma from devDependencies to dependencies — Render's production build skips dev deps:
Your backend will be live at https://your-app.onrender.com. Note: free tier spins down after 15 mins of inactivity — first request takes ~30s to wake up.
Step 3 — Frontend: Vercel
Vercel auto-detects Vite. Add one environment variable:
For client-side routing (React Router), add a vercel.json at the root:
Without this, direct URL access to /register, /dashboard etc. returns 404.
Step 4 — Custom Domain: Cloudflare Subdomain
If you own a domain on Cloudflare, you can create a free subdomain pointing to Vercel:
Then add the subdomain in Vercel → Settings → Domains.
CORS Configuration
The most common production bug: your backend CORS only allows the Vercel URL but you've added a custom domain. Always keep FRONTEND_URL updated on Render:
Total Monthly Cost: £0
The entire CanopyCare stack — database, backend API, frontend, photo storage, email — runs completely free. For a portfolio project or early-stage startup, this is all you need.