Data Model
Database
- Engine: PostgreSQL
- ORM: Prisma
- Schema file:
prisma/schema.prisma
Core Entities
User
- Auth account (
email,passwordHash, optionaldisplayName) - Owns personal categories/projects/logs/plans
- Has one
TeamMembermembership
Team
- Team container for collaboration and dashboards
- Has many members, logs, plans, narratives, audit logs
TeamMember
- Join model:
teamId,userId,role - Roles:
OWNER,ADMIN,MEMBER - Constraint: one membership per user (
userIdunique)
Category / Project
- Personal taxonomy per user (
@@unique([userId, name])) - Referenced by activity logs and planning allocations
ActivityLog
- Daily execution entries (
localDate,startTime,endTime,durationMinutes,energy) - References
User, optionalTeam,Category,Project - Indexed by
userId+localDateandteamId+localDate
DailyPlanAllocation
- Planned focus allocations by day
- Dimensions:
CATEGORYorPROJECT - Fields:
plannedMinutes,localDate, optional category/project refs
DailyNarrative
- AI/fallback narrative text per
userId + localDate - Includes
modelmetadata and optionalteamId
ScheduledExport
- Export job config:
frequency:DAILY/WEEKLY/MONTHLYformat:CSV/PDFscope:PERSONAL/TEAMtargetPath,isActive,nextRunAt,lastRunAt
AuditLog
- Action trail for critical events
- Stores
action, optionaluserId/teamId/targetType/targetId, JSON metadata, IP, timestamp
Relationship Summary
Team1 -> manyTeamMemberUser1 -> 1TeamMemberUser1 -> manyActivityLog,Category,Project,DailyPlanAllocation,DailyNarrative,ScheduledExportTeam1 -> manyActivityLog,DailyPlanAllocation,DailyNarrative,ScheduledExport,AuditLogCategory/Project1 -> manyActivityLogand planning rows
Deletion Semantics
- Deleting user cascades to member linkage and personal dependent records
- Category/project deletion is blocked when referenced by logs (FK restriction)
- Team deletion cascades member links and team-scoped references