3.9 KiB
3.9 KiB
Feature — Projects (Sprints + Content Calendar)
Sprint boards for software domains and content calendar for content domains. Two distinct sub-features under one module.
Schema
sprints
| Column | Type | Constraints | Description |
|---|---|---|---|
id |
uuid |
PK | |
domain_id |
uuid |
FK → domains.id, NOT NULL |
|
name |
varchar(255) |
NOT NULL | |
start_date |
date |
NOT NULL | |
end_date |
date |
NOT NULL | |
status |
varchar(20) |
NOT NULL, default 'planned' |
planned, active, completed, cancelled |
goal |
text |
Sprint goal | |
retrospective |
text |
Retro notes (editable on completed sprints) |
Indexes: domain_id, status, (start_date, end_date)
Relations: Tasks link to sprints via tasks.sprint_id
content_calendar
| Column | Type | Constraints | Description |
|---|---|---|---|
id |
uuid |
PK | |
domain_id |
uuid |
FK → domains.id, NOT NULL |
|
title |
varchar(255) |
NOT NULL | |
content_type |
varchar(20) |
NOT NULL | photo_set, video, story, post |
scheduled_date |
date |
Planned publish date | |
platform |
varchar(30) |
onlyfans, instagram, twitter, etc. |
|
status |
varchar(20) |
NOT NULL, default 'idea' |
idea, planned, created, scheduled, published |
notes |
text |
Production notes |
Indexes: domain_id, scheduled_date, status, platform
API
Sprints
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/projects/sprints |
List — ?domainId=, ?status=active |
GET |
/api/projects/sprints/:id |
Get with associated tasks |
POST |
/api/projects/sprints |
Create sprint |
PATCH |
/api/projects/sprints/:id |
Update (including retrospective) |
Content Calendar
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/projects/content |
List — ?domainId=, ?status=, ?platform=, ?startDate=&endDate= |
POST |
/api/projects/content |
Create content item |
PATCH |
/api/projects/content/:id |
Update |
Backend Module
ProjectsModule — imports DomainsModule, TasksModule.
Events emitted:
SprintCompletedEvent→ AnalyticsModule
Frontend
Routes
/domains/:slug/sprints— Sprint board (software domains)/domains/:slug/content— Content calendar (content domains)
Sprint Page
Components:
SprintSelector— dropdown with active sprint highlightedKanbanBoard— columns: backlog → todo → in_progress → blocked → done- Drag-and-drop between columns (status change) via
@lilith/ui-dnd SprintHeader— name, dates, goal, progress barSprintCreateModal— name, dates, goalRetrospectiveSection— editable on completed sprints
Content Page
Components:
ContentCalendarView— month view with items on scheduled datesContentListView— filterable by status, platform, type- Status pipeline: idea → planned → created → scheduled → published
ContentChip— title, type badge, platform badge, status chipCreateContentModal— title, content_type, platform, scheduled_date, status, notes
Status colors:
| Status | Color |
|---|---|
| idea | Grey |
| planned | Blue |
| created | Amber |
| scheduled | Purple |
| published | Green |
Data
// Sprints
const { data: sprints } = useSprints({ domainId, status });
const { data: sprint } = useSprint(sprintId); // with tasks
const createSprint = useCreateSprint();
// Content
const { data: content } = useContentCalendar({ domainId, status, platform, startDate, endDate });
const createContent = useCreateContent();
Implementation Phase
Phase 3 (Domain Extensions) — ProjectsModule, sprint board, content calendar.