I’ve been building goat.today with a stack that costs $0/month and outperforms React in every benchmark. Here’s why I chose Astro + Solid.js + Supabase + Cloudflare Pages and the real patterns that emerged.
TL;DR: Why This Stack?
| Concern | This Stack | React + Vercel + Firebase |
|---|---|---|
| Cost | $0/month | $0-25+/month |
| JS Bundle | ~7KB (Solid) | ~40KB+ (React) |
| Runtime Performance | 50-70% faster | Baseline |
| Cold Starts | None (edge) | Yes (serverless) |
| Free Tier Limits | Extremely generous | Restrictive |
The $0 Stack Breakdown
Cloudflare Pages: Unlimited Static, 100K Functions/Day
Cloudflare’s free tier is absurdly generous:
| Resource | Free Limit |
|---|---|
| Static requests | Unlimited |
| Bandwidth | Unlimited |
| Function requests | 100,000/day |
| Builds | 500/month |
| Custom domains | 100 |
Compare this to Vercel’s free tier (100GB bandwidth, 100K function invocations/month) or Netlify (100GB bandwidth, 125K function invocations/month). Cloudflare gives you 100K function requests per day, not per month.
Zero cold starts. Functions run on Cloudflare’s edge network, not in a container that needs to spin up.
Supabase: 500MB Database + Auth + Storage
Supabase’s free tier includes everything you need:
| Resource | Free Limit |
|---|---|
| Database | 500 MB |
| Storage | 1 GB |
| Auth users | 50,000 MAUs |
| Edge Functions | 500K invocations/month |
| Realtime connections | Included |
That’s a full Postgres database with Row Level Security, authentication with OAuth providers, file storage, and realtime subscriptions—for free.
Firebase’s free tier? 1GB storage, 50K reads/day, 20K writes/day. You’ll hit those limits fast.
Total Monthly Cost: $0
Until you have serious traffic (100K+ daily users), you won’t pay a dime.
Why Solid.js Over React?
50-70% Faster Runtime Performance
According to the JS Framework Benchmark, Solid.js consistently outperforms React by 50-70% in real-world scenarios:
- DOM updates: Solid updates only what changed. React re-renders entire component trees.
- No Virtual DOM: Solid compiles to direct DOM operations. No diffing overhead.
- Fine-grained reactivity: Signals update at the value level, not the component level.
6x Smaller Bundle Size
| Framework | Runtime Size |
|---|---|
| React + ReactDOM | ~40KB gzipped |
| Solid.js | ~7KB gzipped |
That’s 33KB less JavaScript your users need to download, parse, and execute.
React-like DX
If you know React, you know Solid:
| |
The only difference: signals are functions (count() instead of count). That’s it.
Why Astro Over Next.js?
Zero JavaScript by Default
Astro ships 0KB of JavaScript for static content. Next.js ships the React runtime even for static pages.
Real-world comparison:
- Astro: ~40% faster initial load, ~90% less JS than comparable Next.js
- Next.js 15: Better with React Server Components, but still ships more JS
Island Architecture
Instead of hydrating the entire page, Astro only hydrates interactive components:
| |
The PostCard components are pure HTML. Only LikeButton gets hydrated, and only when it scrolls into view.
Use Any Framework (or None)
Astro doesn’t lock you into React. I use Solid.js for interactive islands, but you can mix React, Vue, Svelte, or vanilla JS in the same project.
The Architecture
Project Structure
| |
Astro Config
| |
Pro tip: Keep platformProxy.enabled: false during development. The dev server starts 10x faster without Cloudflare emulation.
SSR Authentication with Supabase
The trickiest part of this stack is getting auth right across server and client.
Middleware: Single Source of Truth
| |
Passing Auth to Client Components
| |
Type-Safe Everything
Generate TypeScript types from your Supabase schema:
| |
Now you get full autocomplete:
| |
Performance Optimizations
1. Early Hints
Preconnect to external resources:
| |
2. Vite Prebundling
Speed up dev server by prebundling heavy dependencies:
| |
3. Selective Hydration
Use Astro’s client directives wisely:
| |
Deployment
wrangler.toml
| |
GitHub Actions (Optional)
Connect your repo to Cloudflare Pages dashboard, or use GitHub Actions:
| |
When NOT to Use This Stack
- Heavy client-side interactivity (dashboards, Figma-like apps): Consider pure Solid.js SPA
- React ecosystem lock-in: If you need specific React libraries, stick with Next.js
- Team familiarity: If your team knows React and has no time to learn, use what you know
Conclusion
This stack gives you:
| Feature | Benefit |
|---|---|
| $0/month | Cloudflare + Supabase free tiers |
| 50-70% faster | Solid.js over React |
| 90% less JS | Astro’s island architecture |
| Zero cold starts | Cloudflare edge functions |
| Full-stack | Auth, DB, storage, realtime |
| Type-safe | TypeScript everywhere |
It’s not the simplest stack. But for a production app with auth, i18n, database, and global edge deployment—all for free—it’s hard to beat.
Check out goat.today to see it in action.