The cost of launching software has collapsed to roughly the price of a domain name. This is not an exaggeration or a growth-hack framing: a solo founder can run a real product with authentication, payments, email, analytics, and a database for under $20 a year.
The catch is that free tiers have edges, and you need to know where they are before you hit them at an inconvenient moment. So here is the stack, with the limits stated.
The stack
| Layer | Tool | Free tier limit |
|---|---|---|
| Domain | Cloudflare Registrar or Porkbun | ~$10–14/year, the only real cost |
| Hosting (static) | Cloudflare Pages | Unlimited bandwidth and requests |
| Hosting (SSR) | Vercel or Cloudflare Workers | Generous, but metered past it |
| Database + auth | Supabase | 2 projects, pause after inactivity |
| File storage | Cloudflare R2 | 10 GB, no egress fees |
| Email (transactional) | Resend | ~3,000/month, 100/day |
| Code + CI | GitHub Actions | 2,000 minutes/month |
| Analytics | Umami (self-hosted) or Plausible trial | Unlimited if self-hosted |
| Scheduling | Cal.com | Free hosted tier for individuals |
| Error tracking | Sentry | 5,000 events/month |
Total recurring cost: the domain.
Why Cloudflare Pages instead of Vercel
Both work. The difference is what happens when something you wrote gets popular.
Vercel's free tier includes a bandwidth allowance and bills per gigabyte past it. A static site that goes from 100 visits to 100,000 in a day can generate a bandwidth bill. Cloudflare Pages has no bandwidth limit at all, because Cloudflare's business is selling bandwidth to enterprises and the free tier costs them almost nothing.
If your app is static or pre-rendered, this is not a close call. If you need server-side rendering, Vercel's developer experience is better and you should use it, but set a spending cap on the first day.
Why Supabase instead of Firebase
Both give you a database and auth. The difference is what happens when you want to leave.
Firebase's data model is proprietary: Firestore documents, security rules, and Cloud Functions. Moving off it is a rewrite.
Supabase is Postgres. Row-level security is a Postgres feature, not a Supabase invention. If you outgrow the free tier, you can point the same application at any Postgres host and change a connection string. That optionality is worth more than any feature difference.
The free tier caveat: projects pause after a period of inactivity. For a production app, that is unacceptable, so budget $25/month from the day you have real users. For a side project, the pause is fine.
The email trap
Transactional email is where free tiers are most often misjudged. Resend's free tier is around 3,000 messages a month with a 100-per-day cap. That is plenty for password resets and receipts, and nowhere near enough if you send a newsletter.
The other constraint is deliverability. A new domain sending from a shared IP has no reputation, and the first hundred emails may land in spam. Warm the domain: send to yourself and a few friends first, set up SPF, DKIM, and DMARC properly, and do not send a 5,000-recipient blast on day one.
Analytics without a bill
Self-hosted Umami is one container and a Postgres database, both of which you may already have. It costs nothing, sets no cookies, and gives you the numbers that matter: visitors, sources, top pages.
If you do not want to run a container, Plausible is paid but cheap, and there are hosted Umami instances for a few dollars a month.
What not to do: install Google Analytics because it is free. It requires a consent banner in the EU, the banner reduces your measured traffic, and the interface is built for people whose job is analytics. You are not that person yet.
Where the free tier actually ends
This is the part that matters. Roughly, in the order you will hit them:
- Supabase project pausing — when you have real users, around 20–50 daily actives.
- Resend's daily cap — when you add a newsletter or notification emails, around 100 signups a day.
- Vercel bandwidth — the first time something gets shared widely. This one can be sudden and expensive.
- GitHub Actions minutes — if you build on every push to every branch, around the point you have a monorepo.
- Sentry events — when you have enough users to generate enough errors, which is a good problem.
None of these are traps if you know they are coming. All of them are unpleasant if you discover them from a bill.
The one thing not to skimp on
Pay for the domain, and pay for a real email address on it. hello@yourdomain.com costs nothing extra if you set up forwarding, and it is the difference between a product and a project. Free email addresses on a landing page are the single strongest signal that nobody is behind the site.
What this stack cannot do
It cannot run a video product, because bandwidth. It cannot run an AI product at scale, because inference costs money per request and no free tier absorbs that. It cannot run anything that needs a GPU.
But for a directory, a SaaS with a database, a content site, a newsletter, or a small internal tool, it is complete, and it costs less than lunch.
Tools mentioned in this guide
Cloudflare
DNS, CDN, and a surprising amount of infrastructure for free.
Supabase
Postgres with auth, storage, and realtime attached.
Vercel
Deploy a frontend in one command, with previews for every branch.
GitHub
Where code lives, and increasingly where it ships.
Umami
Self-hosted, cookie-free analytics in a single container.
Plausible
Analytics without cookies, so no consent banner.
Cal.com
Open-source scheduling you can host yourself.