Skip to content

Data and access

Every business record contains family_id. PostgreSQL RLS checks active membership using auth.uid(). Roles come from the membership table, never editable user metadata. People outside the family cannot access its records.

Parents manage strategy, school grades and university requirements. Students work on actions and results. Administrative secrets are used only by separate administration operations; normal application requests use RLS.

Unknown scores and dates are stored as null, not displayed as zero results. Original school grades and their documents remain separate from corrections. Required gate conditions determine progress.

Files live in private buckets with family UUID path prefixes. Ordinary user requests cannot overwrite originals. A finalized monthly review preserves an immutable snapshot of the profile areas.

Migrations live in supabase/migrations. scripts/generate-seed.py generates initial strategy data. Reapplying the seed preserves existing records with the same identifiers. Authentication users are not included in the seed.