# Demo Data Model ```mermaid erDiagram audit_log { TEXT id PK TEXT tenant TEXT subject TIMESTAMP time TEXT actor TEXT action TEXT resource TEXT detail TEXT request } bot_keys { TEXT id PK TEXT tenant FK TEXT bot FK TEXT secret_hash TIMESTAMP created_at TIMESTAMP expires_at } bots { TEXT id PK TEXT tenant FK TEXT name } domain_verification_tasks { INTEGER id PK TEXT payload TEXT status INTEGER attempts TEXT run_after TEXT lease_until "nullable" TEXT created_at TEXT origin } domains { TEXT id PK TEXT tenant FK TEXT domain DATETIME verified_at "nullable" } email_verification_tasks { INTEGER id PK TEXT payload TEXT status INTEGER attempts TEXT run_after TEXT lease_until "nullable" TEXT created_at TEXT origin } email_verification_tokens { TEXT key PK TEXT data TEXT expires_at TEXT secret } grants { TEXT tenant PK,FK TEXT type PK TEXT principal PK TEXT role PK TEXT path PK BOOLEAN system } group_members { TEXT tenant PK,FK TEXT group_path PK,FK TEXT user_id PK,FK } groups { TEXT tenant PK,FK TEXT path PK TEXT name } invitation_tokens { TEXT key PK TEXT data TEXT expires_at TEXT secret } oauth_providers { TEXT user_id FK TEXT provider PK TEXT provider_id PK } oidc_state { TEXT key PK TEXT data TEXT expires_at TEXT secret } outbox { INTEGER seq PK TEXT event_type TEXT partition_key TEXT idempotency_key UK "nullable" TEXT payload TEXT created_at } outbox_deliveries { INTEGER seq PK,FK TEXT consumer PK TEXT partition_key TEXT status TEXT process_after "nullable" TEXT lease_until "nullable" TEXT completed_at "nullable" INTEGER attempts } password_hashes { TEXT user_id PK,FK TEXT hash } password_reset_tasks { INTEGER id PK TEXT payload TEXT status INTEGER attempts TEXT run_after TEXT lease_until "nullable" TEXT created_at TEXT origin } password_reset_tokens { TEXT key PK TEXT data TEXT expires_at TEXT secret } profiles { TEXT user_id PK,FK TEXT bio TEXT location TEXT website TEXT picture_url } roles { TEXT slug PK TEXT tenant PK,FK TEXT name TEXT caps } sessions { TEXT token PK TEXT principal TEXT expiration } sso_configs { TEXT id PK TEXT tenant FK TEXT name TEXT client_id TEXT client_secret TEXT issuer_url TEXT jwks_url TEXT auth_url TEXT device_auth_url TEXT token_url } sso_domain_owners { TEXT tenant FK TEXT domain FK TEXT config FK } tenant_invitation_tasks { INTEGER id PK TEXT payload TEXT status INTEGER attempts TEXT run_after TEXT lease_until "nullable" TEXT created_at TEXT origin } tenant_invitations { TEXT tenant PK,FK TEXT email PK TEXT token_key UK TEXT token_code TIMESTAMP expires_at } tenant_members { TEXT tenant PK,FK TEXT user_id PK,FK BOOLEAN owner } tenants { TEXT id PK TEXT name } todo_items { TEXT id PK TEXT tenant FK TEXT title TEXT notes TEXT status TEXT assignee } todo_list_items { TEXT tenant FK TEXT list PK,FK TEXT item PK,FK } todo_lists { TEXT id PK TEXT tenant FK TEXT name } users { TEXT id PK TEXT email UK BOOLEAN verified TEXT name } bot_keys }o--|| bots : "bot" bot_keys }o--|| tenants : "tenant" bots }o--|| tenants : "tenant" domains }o--|| tenants : "tenant" grants }o--|| tenants : "tenant" group_members }o--|| tenant_members : "tenant, user_id" group_members }o--|| groups : "tenant, group_path" groups }o--|| tenants : "tenant" oauth_providers }o--|| users : "user_id" outbox_deliveries }o--|| outbox : "seq" password_hashes }o--|| users : "user_id" profiles }o--|| users : "user_id" roles }o--|| tenants : "tenant" sso_configs }o--|| tenants : "tenant" sso_domain_owners }o--|| sso_configs : "config" sso_domain_owners }o--|| domains : "domain" sso_domain_owners }o--|| tenants : "tenant" tenant_invitations }o--|| tenants : "tenant" tenant_members }o--|| users : "user_id" tenant_members }o--|| tenants : "tenant" todo_items }o--|| tenants : "tenant" todo_list_items }o--|| todo_items : "item" todo_list_items }o--|| todo_lists : "list" todo_list_items }o--|| tenants : "tenant" todo_lists }o--|| tenants : "tenant" ```