Overview
Zarna uses Supabase (managed PostgreSQL) for all persistent data storage with Row Level Security (RLS) for firm-level isolation.Database Structure
Core Tables
CRM Tables
companies, contacts, deals, interactions, financials, notes
User Management
users, firms, roles, permissions
File Management
files, file_processing_status, extracted_data
Integration Data
email_oauth_tokens, email_config, sync_status
Analytics
reports, queries, usage_metrics
Communication
emails, email_threads, calendar_events
Key Tables
Companies
Contacts
Deals
Files
Row Level Security (RLS)
Firm-Level Isolation
All tables use RLS to ensure users only access their firm’s data:Policy Types
- SELECT Policy
- INSERT Policy
- UPDATE Policy
- DELETE Policy
Relationships
Entity Relationships
Foreign Key Constraints
Triggers
Auto-Update Timestamps
Best Practices
Always include firm_id
Always include firm_id
All queries must filter by firm_id for proper isolation
Use indexes on foreign keys
Use indexes on foreign keys
Enable RLS on all tables
Enable RLS on all tables
Defense in depth - don’t rely on application logic alone
Use transactions for multi-table operations
Use transactions for multi-table operations
