Tool Friday #8 — Supabase: The Backend I Built in a Day
I needed a backend for a learning platform. Auth, database, row-level security, progress tracking, email triggers. The kind of setup that usually means a backend developer or a week of wiring services together.
I used Supabase. It took a day.
What I built
academy.stratega.co — a full-stack learning platform for my free GTM course. Nine modules, interactive exercises, progress tracking, admin dashboard.
Here’s the exact stack:
Auth:
- Magic link login — no passwords to manage, no “forgot password” flow
- Google OAuth with PKCE — one-click sign in
- Email confirmation on signup
- 7-day sessions with auto-refresh
The auth setup alone would have taken me a week to roll by hand. Supabase had it working in an hour. Most of that hour was configuring Google Console, not Supabase.
Database:
Postgres. Not a document store, not a proprietary query language. I wrote my tables, my RLS policies, and my triggers in SQL:
CREATE POLICY "Users can read own profile"
ON profiles FOR SELECT
USING (auth.uid() = id);
You read that and you know exactly what it does. If you’ve configured Firestore rules, you know how opaque the alternative can get.
Exercise responses are stored as JSONB — flexible schema per exercise type without separate tables for each. Profiles linked to auth.users. Progress tracking per module and per exercise. Admin queries for signup analytics and completion funnels.
Row-Level Security:
Students can only read and write their own data. Admin role reads everything. The policies are SQL, not a configuration panel — you version-control them, you review them, you know exactly what they do.
Email triggers:
Completion events fire webhooks to n8n, which sends emails via Resend. Welcome drip, start nudge, re-engagement — all triggered by database events, not application logic.
The JS client does what you’d expect:
const { data, error } = await supabase
.from('exercise_responses')
.select('*')
.eq('profile_id', user.id);
Data or error. Nothing else.
The whole thing runs on the free tier. Real students, real data, zero dollars.
What I’d want to know before starting
You need SQL. Supabase doesn’t hide the database behind a visual builder. If you can write SELECT * FROM you’re fine. If you can’t, Firebase’s visual tools will be easier to start with.
RLS takes thought upfront. Row-level security is powerful but you need to think about your access patterns before writing policies. Get it right and security lives at the database level, not scattered across your application code. Get it wrong and you’ll spend an afternoon debugging why queries return empty.
Realtime exists but isn’t the selling point. If your product is live collaboration or chat, Firestore is more mature here. For everything else — auth, database, API — Supabase is ahead.
The dashboard has slow moments. During peak hours the SQL editor can lag. Not a dealbreaker, but noticeable. Edge functions are still maturing compared to Cloudflare Workers or Vercel Functions.
Pricing
| Plan | Cost | What you get |
|---|---|---|
| Free | $0 | 2 projects, 500MB database, 1GB storage, 50K monthly active users |
| Pro | $25/mo per project | 8GB database, 100GB storage, daily backups, email support |
| Team | $599/mo | SOC2 compliance, priority support, SSO |
50,000 monthly active auth users on the free tier. I haven’t hit a single limitation running a production academy on it.
Alternatives
| Service | Best for | How it compares |
|---|---|---|
| Firebase | Google ecosystem, real-time apps | More mature realtime, better mobile SDKs. But document store, not relational. Proprietary lock-in. |
| PlanetScale | MySQL at scale | Excellent for MySQL shops. No built-in auth or storage — just the database. |
| Neon | Serverless Postgres | Great Postgres hosting with branching. No auth, no storage, no dashboard — just the database. |
| Appwrite | Self-hosted BaaS | Similar feature set, fully self-hosted. More control, more maintenance. |
If you want a real database with real SQL and you don’t want to wire together four separate services for auth, storage, and API — Supabase is the best option right now.
The verdict
Supabase is Postgres with batteries included. Auth, RLS, storage, API — one dashboard, one project, one day to production.
The free tier runs my entire academy. When I need to scale, $25/month gets me 8GB of Postgres and daily backups.
If you’re a solo founder and you need a real backend without a backend team, start here.
Score: 9.0/10
Discover Supabase at supabase.com
Tool Friday is a weekly series where I review one tool I actually use in my workflow. Just tools that made my work better.