Database and Storage
Supabase holds the Postgres database, the private file buckets, and the one job that runs every five minutes.
What Supabase Does
- Postgres. Every record: members, profiles, applications, businesses, organizations, matches, sessions, events, email log, settings, templates and forms.
- Storage. Private buckets for avatars, cover images, organization logos and resource files. Files are served only through the app's own routes, which check sign-in first.
- pg_cron. The scheduled job that runs every five minutes to send event and session reminders, chase RSVPs and volunteers, close out sessions and sync attendance. Vercel's cron is daily only.
- Backups. Taken by Supabase according to the project's plan. Restoring replaces the whole database, so take a fresh backup first.
How the App Reaches It
The server uses the service key (SUPABASE_SECRET_KEY) for every read and write. There is no client-side database access, and the Supabase URL and key never reach a browser.
Row-level security is enabled on every table with no policies, on purpose: Clerk handles sign-in, so the database never knows who the user is, and every access goes through server code that checks the role first. Do not add a policy expecting it to protect something; the code is where access is decided.
Migrations
The database's own migration history (Supabase, Database, Migrations) is the record of truth. The repository folder supabase/migrations/ holds the files from 18 Aug 2026 onward, each with a header saying when it was applied. Earlier tables were created before the folder existed. See Database and Migrations for how to add one.
Tables an Admin May Look At
| Table | What is in it |
|---|---|
users | One row per account, mirrored from Clerk |
profiles | The member's directory profile and completeness score |
applications | Every intake submission with its answers, state and decision |
businesses, business_members | A founder's company and its team |
organizations, organization_memberships | Partner organizations and who represents them |
matches | Every proposed match and its gate state |
office_hours_sessions | Booked sessions |
events, event_invitations, event_volunteers | Events, invitees, volunteers |
email_log | Every email attempt with its status |
webhook_events | Every Clerk webhook received |
app_settings | One row of platform settings |
email_templates, email_template_versions | Edited email wording and history |
content_definitions, content_versions | The intake and assessment forms |
tag_options, field_definitions | Pick lists and field labels |
Where to Look in the Dashboard
- Table Editor to read a row.
- SQL Editor to run a query or apply a migration.
- Database, Backups for restore.
- Logs for slow queries and errors.
- Database, Extensions confirms
pg_cronandpg_netare on, which the five-minute job needs.

