Wat Supabase is en waarom we het kiezen

Supabase biedt vijf diensten in één:

**1. PostgreSQL-database**: Volledig beheerde PostgreSQL — de meest gebruikte relationele database ter wereld. Geen propriëtair schema, geen lock-in.

**2. Authenticatie**: E-mail/wachtwoord, Google, GitHub, Apple SSO — volledig geconfigureerd met één instelling.

**3. Bestandsopslag**: S3-compatibele opslag met toegangscontrolebeleid.

**4. Edge Functions**: Deno-gebaseerde serverloze functies voor bedrijfslogica en API-proxying.

**5. Realtime**: WebSocket-gebaseerde live data-subscriptions.

Waarom we Supabase kiezen boven Firebase: je data staat in standaard PostgreSQL (exporteerbaar, SQL-querybaar, overal te hosten), het is open-source (zelf te hosten als nodig), en EU-west (Frankfurt) regio voor AVG-compliance.

Stap 1: Project aanmaken

Ga naar supabase.com en maak een gratis account aan.

Klik "New project" en vul in: - **Organisatienaam**: je bedrijf of projektnaam - **Projectnaam**: je app-naam - **Wachtwoord**: genereer een sterk wachtwoord (bewaar het — je hebt het nodig voor directe database-verbindingen) - **Regio**: Kies **West EU (Frankfurt)** — cruciaal voor AVG-compliance

Het project wordt aangemaakt in ~2 minuten.

Na aanmaken vind je in het dashboard: - **Project URL**: `https://[project-ref].supabase.co` — dit is je API-basis-URL - **Anon key**: Openbare sleutel voor clientside gebruik (veilig voor gebruik in WeWeb/FlutterFlow) - **Service role key**: Privésleutel met volledige toegang — NOOIT in je frontend gebruiken

Stap 2: Database ontwerpen

Ga naar "Table Editor" in het Supabase-dashboard.

Maak je eerste tabel aan. Voor een eenvoudige takenapp:

**Table: todos** - `id` — bigserial (automatisch ingesteld) - `user_id` — uuid, NOT NULL, foreign key naar auth.users.id - `title` — text, NOT NULL - `is_complete` — boolean, DEFAULT false - `created_at` — timestamptz, DEFAULT now()

Klik "Save". Je tabel is aangemaakt.

Altijd in SQL doen? Gebruik de SQL-editor: ```sql create table todos ( id bigserial primary key, user_id uuid not null references auth.users(id), title text not null, is_complete boolean default false, created_at timestamptz default now() ); ```

Voeg indexen toe op veelgebruikte filterkolommen: ```sql create index on todos (user_id); create index on todos (created_at desc); ```

Stap 3: Row-Level Security instellen

Activeer RLS voor je todos-tabel. In de Table Editor: klik op de tabel → "RLS" tabblad → "Enable RLS".

Maak nu policies aan. In SQL:

```sql -- RLS activeren alter table todos enable row level security;

-- Gebruikers kunnen alleen hun eigen todos lezen create policy "users_own_todos" on todos for select using (user_id = auth.uid());

-- Gebruikers kunnen alleen todos voor zichzelf aanmaken create policy "users_insert_own_todos" on todos for insert with check (user_id = auth.uid());

-- Gebruikers kunnen alleen hun eigen todos bijwerken create policy "users_update_own_todos" on todos for update using (user_id = auth.uid());

-- Gebruikers kunnen alleen hun eigen todos verwijderen create policy "users_delete_own_todos" on todos for delete using (user_id = auth.uid()); ```

Test je RLS: maak twee testgebruikers aan via het Authentication-dashboard en verifieer dat ze elkaars todos niet kunnen zien.

Stap 4: Authenticatie configureren

Ga naar "Authentication" → "Providers" in het dashboard.

**E-mail/wachtwoord**: Standaard ingeschakeld. Configureer: - "Confirm email": Aanbevolen voor productie. Vereist e-mailbevestiging voor nieuwe accounts. - "Min password length": Stel in op minimaal 8 tekens

**Google OAuth**: 1. Maak een Google Cloud-project aan en activeer OAuth 2.0 2. Voeg `https://[project-ref].supabase.co/auth/v1/callback` toe als geautoriseerde redirect-URI 3. Plak client ID en secret in Supabase's Google-provider-instellingen 4. Schakel de Google-provider in

**E-mailsjablonen aanpassen**: Ga naar Authentication → Email Templates. Pas de welkomstmail en wachtwoord-reset-mail aan in het Nederlands voor een professionele uitstraling bij Nederlandse gebruikers.

Voor AVG: schakel "Leak protection" in (scant wachtwoorden via HaveIBeenPwned) en configureer een aangepaste SMTP-provider (zoals Brevo) zodat e-mails van je eigen domein komen.

Stap 5: Verbinden met WeWeb of FlutterFlow

**WeWeb**: 1. Voeg de Supabase-plugin toe in WeWeb 2. Plak je Project URL en Anon Key 3. Je tabellen zijn nu beschikbaar als databronnen in WeWeb-elementen 4. Gebruik "Collections" om Supabase-query's te definiëren die gebonden kunnen worden aan UI-componenten

**FlutterFlow**: 1. Ga naar Settings → Supabase in FlutterFlow 2. Plak je Project URL en Anon Key 3. FlutterFlow importeert automatisch je tabelschema 4. Gebruik de Supabase Query-actie in je FlutterFlow-widgets om data op te halen

Tip: test altijd je verbinding met een eenvoudige SELECT-query voordat je complex databinding opzet. Voeg een testgebruiker toe, log in via Supabase Auth, en verifieer dat de RLS-policies werken zoals verwacht.