Skip to content

Supabase

ProductGebruik
PostgreSQLHoofd database
Supabase AuthGebruikersauthenticatie (klanten + medewerkers)
Supabase StorageBestandsopslag (foto’s, documenten, PDFs)
pg_cronGeplande taken (maandfacturen)
Row Level SecurityData-isolatie per gebruiker
Terminal window
# Supabase CLI installeren
npm install -g supabase
# Project initialiseren in de repo
supabase init
# Lokale development omgeving starten
supabase start
# Migraties aanmaken
supabase migration new create_clients_table
# Migraties uitvoeren
supabase db push

Twee typen gebruikers authenticeren via Supabase Auth:

  • Registreren via /register in het klantportaal
  • Email + wachtwoord authenticatie
  • Na registratie: clients record aanmaken gekoppeld aan auth.uid()
  • Redirect naar /onboarding bij eerste login
  • Accounts worden aangemaakt door de admin (niet zelf registreren)
  • Email + wachtwoord of magic link
  • users record met rol admin / medewerker / trainer
-- Trigger: automatisch clients record aanmaken na registratie
CREATE OR REPLACE FUNCTION handle_new_client()
RETURNS trigger AS $$
BEGIN
INSERT INTO public.clients (id, email)
VALUES (new.id, new.email);
RETURN new;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
CREATE TRIGGER on_auth_user_created
AFTER INSERT ON auth.users
FOR EACH ROW EXECUTE PROCEDURE handle_new_client();

RLS is ingeschakeld op alle tabellen. Klanten zien alleen hun eigen data. Medewerkers en admins zien alles.

-- Klant ziet alleen eigen boekingen
ALTER TABLE bookings ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Klant ziet eigen boekingen"
ON bookings FOR SELECT
USING (client_id = auth.uid());
CREATE POLICY "Admin ziet alle boekingen"
ON bookings FOR ALL
USING (
EXISTS (
SELECT 1 FROM users
WHERE id = auth.uid()
AND role IN ('admin', 'medewerker')
)
);

De API draait als Hono app op Cloudflare Workers. Supabase wordt server-side benaderd met de service role key.

Frontend (React) → Hono API (CF Workers) → Supabase (service role)
EndpointMethodeDoel
/api/bookingsGET/POSTBoekingen CRUD
/api/payments/webhookPOSTSentoo webhook ontvangen
/api/invoicesGET/POSTFacturen genereren
/api/notificationsPOSTEmail versturen via Resend
/api/dogsGET/POST/PUTHondprofielen beheren
apps/api/src/middleware/auth.ts
// JWT uit Authorization header → Supabase getUser() verificatie
// Altijd getUser() voor server-side verificatie, nooit getSession()

pg_cron wordt gebruikt voor de maandelijkse factuurcyclus van unlimited abonnementen.

-- Elke dag om 00:01 controleren welke abonnementen gefactureerd moeten worden
SELECT cron.schedule(
'monthly-subscription-billing',
'1 0 * * *',
$$
SELECT process_subscription_billing();
$$
);

De functie process_subscription_billing() controleert welke subscriptions next_billing_date = CURRENT_DATE hebben en stuurt een request naar de Hono API voor factuurcreatie en Sentoo betaalaanvraag.

supabase/
migrations/
001_create_clients.sql
002_create_dogs.sql
003_create_vaccinations.sql
004_create_services.sql
005_create_bookings.sql
006_create_payments.sql
007_create_bundles.sql
008_create_subscriptions.sql
009_rls_policies.sql
010_cron_jobs.sql
seed.sql ← Test data voor development

In de Hono API (Cloudflare Workers secrets)

Section titled “In de Hono API (Cloudflare Workers secrets)”
SUPABASE_URL=https://[project-id].supabase.co
SUPABASE_SERVICE_ROLE_KEY=[service-role-key]
VITE_SUPABASE_URL=https://[project-id].supabase.co
VITE_SUPABASE_ANON_KEY=[anon-key]

Supabase Pro plan biedt dagelijkse automatische backups met 7 dagen retentie. Voor productie wordt het Pro plan aanbevolen.