Data overview
Application state lives in Cloud Firestore. TypeScript types are the source of truth for document shapes: apps/web/src/types/ (e.g. project.ts, person.ts, jira.ts, work-arrangement.ts).
Collections at a glance
| Collection | Document ID | What it holds |
|---|---|---|
projects | projectKey | Jira-linked project config and metadata |
strategies | UUID | Strategy / planning entities |
people | Email or custom ID | Team members, roles |
issues | Jira issue id | Synced Jira issues |
worklogs | Jira worklog id | Time logged |
commits | Commit hash | Bitbucket commits |
pullRequests | repoSlug-prId | Bitbucket PRs |
reports | UUID | Generated reports |
reminders | UUID | Scheduled reminders |
workArrangements | UUID | Slack work-location entries |
workArrangementQuotas | engineerId-year-week | Weekly WFH quotas |
engineerMetrics | email-period | Aggregated engineer metrics |
projectMetrics | projectKey-period | Aggregated project metrics |
syncHistory | UUID | Sync run history |
configuration | config singleton | App configuration |
syncStatus | sync-status singleton | Last sync state |
slackConfiguration | slack-config singleton | Slack bot settings |
budgets | projectKey | Project budget data |
Where to read more
- Database structure — Full collection notes, update paths, and implementation detail
- Deterministic sync — How Jira/Bitbucket sync is designed
- Per-domain — People, user/member profile fields, finance, team allocation
Config in repo: firebase.json (rules: firestore.rules, indexes: firestore.indexes.json).