Appearance
Integration: Supabase
Supabase is the backbone — PostgreSQL, Auth, Edge Functions (Deno), and Storage.
Client
A single browser client singleton lives at src/lib/supabaseClient.js. Never create additional clients. Admin-only features use src/lib/customSupabaseClient.js.
How it's used
| Capability | Where | Notes |
|---|---|---|
| Auth | src/contexts/SupabaseAuthContext.jsx → useAuth() | Session + user. EFs re-verify the JWT server-side. |
| Reads (RPC) | hooks | supabase.rpc('get_…'). See Data Access. |
| Writes (EF) | services | supabase.functions.invoke('…'). |
| Realtime | hooks | supabase.channel() for frequently-INSERTed tables. |
| Storage | EFs / specific features | e.g. trainer KYC documents. |
Local development
npx supabaseCLI runs a local stack.npx supabase db pushapplies local migrations to remote.npm run test:dbruns pgTAP tests against the local DB.
Edge functions
56 functions under supabase/functions/, sharing _shared/ utilities. See Backend architecture and the EF index.
Hard rules
- No
supabase.from()anywhere insrc/. - RLS on every user-facing table; the EF is the primary enforcement layer.