Entity Relationship Diagram
Core Tables
Multi-Tenancy Layer
- tenants
- tenant_members
- profiles
- URL-safe slug for routing (e.g.,
/app/:tenantSlug/projects) - Soft delete via
archived_at - Unique constraint on slug
Project Management
- projects
- project_members
- workflow_columns
- Belongs to exactly one tenant
- Has many tasks, workflow columns, labels
- Soft delete via
archived_at
Task Management
- tasks
- task_assignees
- task_labels
- task_checklist_items
- task_attachments
- task_dependencies
- task_activity
- Lexicographic
order_rankfor drag-and-drop ordering - Date validation constraint
- Milestone support
- Effort estimation
Database Functions
Tenant Management
create_tenant_with_owner
create_tenant_with_owner
- Normalizes slug from name if not provided
- Handles slug conflicts with numeric suffixes
- Automatically adds creator as owner
- Returns created tenant record
normalize_tenant_slug
normalize_tenant_slug
- Lowercase conversion
- Replace non-alphanumeric with hyphens
- Remove leading/trailing hyphens
- Fallback to ‘space’ if empty
Project Management
create_project_with_defaults
create_project_with_defaults
- Validates tenant membership
- Creates project record
- Adds all tenant members as project members
- Creates default workflow columns (Backlog, To Do, In Progress, Done)
- Returns project ID
- Creator →
owner - Tenant owners/admins →
editor - Tenant members →
viewer
dashboard_metrics
dashboard_metrics
Task Operations
move_task
move_task
- Validates task and column existence
- Checks user permissions (
can_edit_project) - Updates
status_column_idandorder_rank - Logs activity event
- Returns updated task
Permission Helpers
All permission functions are marked
security definer and set search_path = public to prevent SQL injection and privilege escalation.Row Level Security (RLS)
Tenant Policies
Project Policies
Task Policies
Triggers
- Updated Timestamps
- User Onboarding
profiles, workflow_columns, tasks, task_checklist_itemsIndexes
Migration History
1
20260212220000_init_gantt_mvp.sql
Initial schema with projects, tasks, workflow columns, and basic RLS
2
20260213220000_auto_join_new_users.sql
Single-tenant mode: auto-add users to all projects
3
20260213220100_handle_new_user_google_compat.sql
Google OAuth metadata support for profile creation
4
20260216220000_fix_create_project_trigger_conflict.sql
Fixed duplicate project member insertions
5
20260217143000_multi_tenant_onboarding.sql
Multi-tenant architecture with tenant tables and updated functions
Next Steps
Multi-Tenancy Design
Deep dive into tenant isolation and permission model