life-docs/features/projects.md
2026-03-20 09:32:20 -07:00

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 highlighted
  • KanbanBoard — columns: backlog → todo → in_progress → blocked → done
  • Drag-and-drop between columns (status change) via @lilith/ui-dnd
  • SprintHeader — name, dates, goal, progress bar
  • SprintCreateModal — name, dates, goal
  • RetrospectiveSection — editable on completed sprints

Content Page

Components:

  • ContentCalendarView — month view with items on scheduled dates
  • ContentListView — filterable by status, platform, type
  • Status pipeline: idea → planned → created → scheduled → published
  • ContentChip — title, type badge, platform badge, status chip
  • CreateContentModal — 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.