Skip to content
Legal
Security Practices
Effective: April 24, 2026
In plain language
Encrypted in transit (TLS 1.2+) and at rest (AES-256). Every database row is partitioned by family with row-level security. Magic-link auth — no passwords to leak. Documents in private buckets, served only via 10-minute signed URLs. Sensitive operations are audit-logged.
1. Authentication
•
Passwordless magic-link auth via Supabase Auth. There is no password to phish, leak, or rotate.
•
Magic links expire after 60 minutes and are single-use.
•
Sessions refresh transparently via JWT. Stale tokens are rejected.
•
Future: optional 2FA via TOTP for users who want belt-and-suspenders protection.
2. Database isolation
Every table that contains user data has Row-Level Security policies that scope access to the authenticated user's family. The policies are enforced by PostgreSQL itself; even a misconfigured query in our application code cannot return another family's rows.
•
Family membership is the gating predicate (see the app.is_family_member() security-definer function).
•
Sensitive RPCs (data export, account deletion) are SECURITY DEFINER with explicit authorization checks inside.
•
Service-role access is reserved for edge functions and never exposed to the client.
3. File storage
•
Two private buckets: school-pdfs for calendar imports and family-vault for personal documents.
•
File paths are namespaced by family ID: <family_id>/<item_id>.<ext>. Storage RLS enforces this — even a leaked path can't be read by another family.
•
Documents are served via short-lived signed URLs (default 10 minutes, never longer than 1 hour).
•
Maximum file size 50 MB; only image and PDF MIME types accepted.
4. Encryption
Data in transit
TLS 1.2+ everywhere. Insecure HTTP refused.
Data at rest
AES-256 encryption on all Supabase storage and Postgres volumes.
Backups
Encrypted in-flight and at rest. 30-day retention.
Secrets
Stored in EAS Secrets and Supabase Vault. Rotated on suspected compromise.
5. AI handling
•
OpenAI requests are sent from server-side edge functions with a dedicated API key. The mobile app never holds the key.
•
Our OpenAI workspace has "Improve the model for everyone" off and zero data retention enabled.
•
Prompts are logged only as Supabase function logs (not in our database) and are subject to Supabase's own 7-day log retention.
6. Audit logging
The compliance_audit_log table records sensitive operations:
•
Vault item opened (with hashed IP, never the raw IP).
•
Data export requested.
•
Account deletion requested or cancelled.
•
Location sharing toggled.
•
Consent updated.
•
Court / tax export generated.
Logs are visible to the user (Settings → Privacy → Activity log) and retained for 13 months.
7. Dependency hygiene
•
Dependencies pinned in package-lock.json and reviewed before upgrade.
•
GitHub Dependabot alerts subscribed; high-severity advisories patched within 7 days.
•
SBOM exported on every release for supply-chain provenance.
8. Incident response
If we discover a personal-data breach affecting users, we will:
•
Notify the relevant supervisory authority within 72 hours, per GDPR Article 33.
•
Notify affected users without undue delay, per Article 34 — by email and an in-app banner.
•
Publish a post-mortem within 14 days describing root cause, remediation, and prevention.
The on-call rotation pages within 15 minutes for production incidents. Email security@famcove.com to report a vulnerability.
9. Responsible disclosure
We welcome security research. Email security@famcove.com with a description and steps to reproduce. We aim to:
•
Acknowledge within 2 business days.
•
Triage within 7 calendar days.
•
Patch critical issues within 14 calendar days.
•
Credit researchers in our security advisories on request.
We do not currently run a paid bounty program. We will not pursue legal action against good-faith researchers who follow this policy.
10. Honest caveats
We believe the controls above are appropriate for the data we handle, but no system is 100% breach-proof. The most likely failure mode is a misconfigured RLS policy or a leaked secret — that's why we audit RLS on every migration and rotate secrets on schedule.
Questions?
Email privacy@famcove.com — we respond within 30 days as required by GDPR. Replace with your real contact before public launch.