Security
How we hold your family's data.
A sports app sits in a child’s and a parent’s life. The security posture has to match. GameBrief defaults to closed and opens by named policy. Below is the full posture — not the marketing version.
Posture
Nine guarantees, each with a cost.
Every guarantee here corresponds to a section of the engineering spec (§13). We name the cost because that is what tells you whether to trust the guarantee: a free guarantee is a slogan.
- Authentication
- Magic-link auth via Supabase. No passwords stored, no password reset flow to phish. Single-use tokens expire in 60 minutes. The login page is the only entry point.
- Row-level security
- Every table with an `org_id` has RLS enabled and the canonical policy applied. Cross-org tables follow the patterns in spec §13. The service-role key is fenced inside Supabase functions and never used from app code.
- Encryption at rest
- Database storage is encrypted at rest by the platform. Coach Notebook entries get a second layer: app-level AES-256-GCM with an HKDF-derived per-org key. The master key lives in env, never in the DB. AI is never given the plaintext.
- Document integrity
- Every signature row carries an HMAC stamp over the canonical (document_id|version|family_id|player_id|signer_name|signed_at) payload using `SIGNED_LINK_SECRET`. Versions are immutable; supersession is by reference, not by edit.
- Payments
- Stripe Elements / Apple Pay / Google Pay only. No card data ever touches our storage. Webhook handlers verify the Stripe signature before any DB read or write. Idempotency keys gate mutating endpoints; mobile retry is safe.
- Audit log
- A single `audit_logs` table receives every compliance-relevant mutation: refunds, document signatures, account deletion, AI feature toggles, role changes. The `action` enum is extensible; we add values, never overload existing ones.
- AI safeguards
- Every AI feature has a per-feature kill switch in env. The audience-builder uses constrained tool-use only; prompt-injection probes are part of the test suite. Coach Notebook content is never passed to a model.
- Observability hygiene
- Errors thrown from app code carry no PII. A scrubber in the error path (spec §13.9) strips identifiable fields before logs leave the process. We do not log magic-link tokens, signatures, or message bodies.
- COPPA & FERPA-conscious
- Players under 13 are subject to the COPPA path: explicit guardian consent, age verification, and a minimized data footprint. Documents and signatures are designed for the FERPA-aligned schools and leagues that audit.
Statements you can verify
A short list of negatives.
- No vendor cookies on /login.
- No advertising network anywhere.
- No PII to AI.
- Inputs scrubbed before each call.
- No password.
- Magic link only.
- No third-party tracking.
- Our own first-party analytics.
Report a vulnerability
If you found something, we want to hear it before our users do.
Write to security@gamebrief.com with a description and a reproduction. We acknowledge in 48 hours and fix or document the trade-off. No bug bounty yet; that comes when we have more than a handful of clubs.