Vi byggde 20+ projekt på Supabase — här är vad vi lärde oss

När vi startade ZORC testade vi allt: Firebase, PocketBase, Appwrite, Convex. Sedan landade vi på Supabase — och har använt det i varje kundprojekt sedan dess.

Den här guiden är inte en "vad är Supabase?"-artikel. Det är en praktisk genomgång baserad på verkliga projekt vi levererat.


Vad är Supabase?

Supabase är en open source-plattform som ger dig en fullständig PostgreSQL-databas, autentisering, realtids-subscriptions, edge functions, lagring och vector-embeddings — allt via en enda dashboard och SDK.

Tänk Firebase, men med:

  • Riktig PostgreSQL istället för NoSQL
  • Row Level Security (RLS) direkt i databasen
  • Ingen vendor lock-in — du äger datan och kan self-hosta

Varför vi valde Supabase över Firebase

Firebase Supabase
Databas Firestore (NoSQL) PostgreSQL (SQL)
Vendor lock-in Hög (Google) Ingen (open source)
Prissättning Oförutsägbar vid skalning Transparent, fasta planer
RLS Firestore rules (egen syntax) PostgreSQL policies (SQL)
Realtid Bra Bra (Postgres Changes)
Edge Functions Cloud Functions Deno-baserade Edge Functions
AI/Vectors Manuellt pgvector inbyggt
GDPR Krångligt (US-data) EU-hosting tillgängligt

Det avgörande för oss: GDPR. Många av våra kunder kräver EU-lagring. Supabase erbjuder regioner i Frankfurt och Stockholm — Firebase gör det inte lika enkelt.


Hur vi sätter upp ett Supabase-projekt på ZORC

1. Databasdesign först

Vi börjar alltid med datamodellen. Supabase har en inbyggd SQL-editor där vi kan skapa tabeller, relationer och RLS-policies direkt.

ZORC-princip: Vi skriver alltid migrations-filer, aldrig manuella ändringar i dashboard i produktion.

2. Row Level Security från dag ett

RLS innebär att databasen själv kontrollerar vem som får se och ändra data. Det är inte ett extra lager — det är säkerheten.

-- Användare kan bara se sina egna ordrar
CREATE POLICY "Users see own orders" ON orders
  FOR SELECT USING (auth.uid() = user_id);

Varför det spelar roll: Utan RLS räcker ett felkonfigurerat API för att exponera all kunddata. Med RLS är datan skyddad även om API:et har en bugg.

3. Realtid för interaktiva features

Supabase Realtime låter dig prenumerera på databasändringar via WebSocket. Vi använder det för:

  • Live dashboards — data uppdateras utan sidladdning
  • Kollaborativa verktyg — flera användare ser ändringar direkt
  • Notifikationer — triggas av INSERT/UPDATE i databasen

4. Edge Functions för affärslogik

Supabase Edge Functions körs på Deno Deploy — globalt, nära användaren. Vi använder dem för:

  • Stripe-webhooks
  • E-postutskick via Resend
  • AI-integrationer (OpenAI, Anthropic)
  • Tredjepartsintegrationer

5. Lagring med policies

Supabase Storage fungerar som S3, men med samma RLS-modell. Perfekt för användaruppladdningar med automatisk åtkomstkontroll.


Verkliga ZORC-projekt byggda på Supabase

  • E-handelsplattform — 50 000+ produkter, realtidslager, Stripe-betalningar
  • SaaS-dokumenthantering — RLS-skyddade dokument per organisation
  • Bokningsplattform — realtidsuppdatering av tillgängliga tider
  • AI-verktyg — pgvector för semantisk sökning i 100 000+ dokument

5 misstag vi gjort (så du slipper)

  1. Hoppade över RLS i utvecklingsfasen. Resulterade i en panikomskrivning innan lansering. Nu: RLS från commit #1.
  2. Använde klient-SDK för tunga queries. Flytta komplex logik till Edge Functions istället.
  3. Ignorerade database indexes. En query gick från 3 sekunder till 15 ms med rätt index.
  4. Lagrade bilder i databasen. Använd Supabase Storage, inte base64 i kolumner.
  5. Manuella migration i produktion. Använd alltid supabase db push med versionerade migreringar.

När Supabase INTE är rätt val

  • Du behöver grafdata → Använd Neo4j
  • Extremt hög skrivfrekvens (100k+ writes/s) → Överväg ScyllaDB eller DynamoDB
  • Du vill aldrig tänka på databas → Firebase kan fortfarande vara enklare för prototyper

Kom igång

Vill du bygga med Supabase men behöver hjälp med arkitektur, säkerhet eller skalning? Boka ett möte med oss — vi delar gärna med oss av vad vi lärt oss i 20+ projekt.