Projects module
The Projects module is the work-tracking surface — projects, sprints, tasks, time entries, and team allocation. Like every module in CCD-Suite, project entities are first-class knowledge graph nodes that show up alongside CRM, Content, and Finance in the agent's context.
Entities
| Entity | What it represents |
|---|---|
| Project | A unit of work. Has status, owner, start/end dates, budget, linked CRM deal (optional). |
| Sprint | A bounded iteration inside a project. Has goal, capacity points, start/end, status (planning / active / completed). |
| Task | A work item. Belongs to a project; optionally assigned to a sprint, owner, story points. |
| Subtask | Smaller task inside a parent. Same shape, parent_task_id pointer. |
| Time entry | Hours logged against a task or project. User + duration + optional billable flag. |
All five entity types are stored as graph nodes with dedicated backing tables; the trigger layer mirrors writes into the knowledge graph so semantic search treats them uniformly with non-project entities.
The board view
The default project page is a kanban board keyed on task status (To do · In progress · Review · Done). Cards show:
- Assignee avatar — who's on it.
- Story points chip — for sprint capacity tracking.
- Stuck indicator — small chip if the task hasn't moved in 7+ days during an active sprint.
- Linked deal/contact — when the task was generated from a CRM event, the source citation is on the card.
Drag to advance. Click for detail with the activity feed + subtask list.
Sprint lifecycle
Sprints have three states with lifecycle events that webhook subscribers can react to:
| Transition | Event emitted |
|---|---|
planning → active | projects.sprint.started |
active → completed | projects.sprint.completed |
The emission is gated by a compare-and-set on the prior status so two concurrent transitions can't both fire the same event — useful when the same sprint is being driven by both a user and an automation.
Cross-module insights
- Projects × CRM: every deal can pin a project so the delivery-side timeline lives next to the sale.
- Projects × Finance: time entries flagged billable roll up into invoice line items; the "Time → invoice" surface in Finance consumes them.
- Projects × HR: workload-per-person card cross-references assignee + currently-active sprint tasks against contracted hours from HR.
- Projects × Today: stuck-task and overdue-deliverable cards surface to the user without needing to open the board.
Time tracking
Two ways to log time:
- Timer — start/stop on a task card; persists across reloads.
- Bulk entry — week view at
/projects/[id]/timefor filling timesheets at end-of-week.
Time entries can be flagged billable=true with an optional
hourly rate; the Finance module's invoice generator surfaces them
as draft line items when the contact has an open project.
Importing data
CSV import on Settings → Import or the bulk REST endpoint at
the bulk import endpoint at POST /v1/import on api-gateway.
Supported source formats: Asana, Jira CSV export, Trello board JSON. Per-source mappings are documented in
the migration playbooks.
Permissions
Project membership is per-project: owner, manager, member,
viewer. Set on Settings → Project → Members. Without an explicit
membership row, a user sees the project only if their tenant role
already grants module-wide access (admin/owner/project_manager).
Self-host single-tenant installs default every member to
manager — see Security model.
Read next
- CRM module — the deal that often spawns a project.
- Finance module — where billable time becomes invoice line items.