Features

Projects — The Delivery Engine

The Projects module is natively connected to the CRM — projects link to deals, tasks link to contacts and deals, and time tracking data lives in the same database as revenue data. This is what makes the “Lead → Deal → Project → Profitability” loop possible.

  • Free: 3 projects, 100 tasks, kanban board, calendar, comments, time tracking view
  • Pro: 50 projects, unlimited tasks, + subtasks, milestones, gantt, dependencies, time tracking log, estimation, budget, team management

Projects

A project is the container for delivering on a won deal. It has a name, status, client, start/end dates, budget, and a linked deal. When a deal is Won, the team can immediately create the associated project without re-entering client information.

Views:

  • List page (/projects): Table and card views. Board tab shows all tasks across all projects. List tab shows all tasks as a sortable table.
  • Project detail (/projects/[id]): Overview tab (status, progress, budget, team), Tasks tab (kanban/calendar/gantt), Files tab, Team tab.
  • Budget (Pro): Project budget displayed on Overview tab. Tracked against actual cost from time entries.

Tasks

Tasks are the atomic unit of work. They can have an assignee, due date, priority, story points, subtasks, dependencies, comments, time entries, and file attachments. Tasks are soft-deleted — deleted_at is set rather than removing the row.

Views:

  • Kanban board: Tasks organized by status columns. Drag-and-drop to change status. Viewer role: read-only.
  • Calendar view: Tasks with due dates plotted on a calendar.
  • Gantt view (Pro): Horizontal timeline. Task bars can be dragged to reschedule.
  • Task detail drawer: Opens from any task card — edit status, priority, assignee, due date, story points, subtasks, dependencies, time entries, comments, attachments.
  • Task detail page (/projects/tasks/[id]): Full-page view for deep linking.

Pro features:

  • Subtasks: Tasks can have child tasks. Subtask progress shown on parent card.
  • Task dependencies: Mark one task as blocking another.
  • Story points / estimation: Numeric field for sprint planning.

Time tracking

Time tracking records how much time team members spend on tasks. Because this data lives in the same database as deal values and project budgets, OpsDash can calculate real-time project profitability — the differentiating feature no standalone tool can replicate.

  • Free: View logged time entries per task, no logging
  • Pro: Start/stop timer, manual entry (hours + minutes + description + date), delete entries
ItemDetail
Tabletask_time_entries — task_id, user_id, org_id, duration_minutes, description, logged_at
Server actionsgetTaskTimeEntries, createTaskTimeEntry, deleteTaskTimeEntry
Feature flagsprojects:time-tracking-view (Free), projects:time-tracking-log (Pro)

Milestones

Milestones are high-level checkpoints within a project. They have a title, due date, and completion status. Milestones are visible on the project overview and in the gantt view (Pro).

  • Feature flag: projects:milestones (Pro)
  • Server actions: getProjectMilestones, createMilestone, updateMilestone, deleteMilestone

Project team

Project team management (Pro) lets project owners assign team members with specific roles (manager, developer, designer, consultant) and control their access within the project.

  • Feature flag: projects:team-management (Pro)
  • Members can be added from the org's existing members list
  • Project-level roles are separate from org-level roles

Technical reference

ItemDetail
Action filesactions/projects.ts, actions/tasks.ts (barrel + tasks-*.ts), actions/milestones.ts, actions/project-members.ts
RPCget_tasks_with_assignees — SECURITY DEFINER joins tasks + user names
Key migrations00003 (domain tables), 00024 (deal-linked tasks), 00025 (budget/milestones), 00026 (subtasks/dependencies), 00054 (soft-delete)
Audit actionsproject.created, task.created, task.status_changed, task_time_entry.created