.do
Development

projects

Project management and organization

projects

Project management with milestones, tasks, team assignments, resource allocation, timelines, and progress tracking for organized development.

Overview

The projects primitive provides comprehensive project management including project creation, milestones, task management, team assignments, resource allocation, timelines, and reporting.

Parent Primitive: teams - Team collaboration and management

SDK Object Mapping

This primitive integrates with workflow and on SDK objects for project automation:

import { workflow, on, send, projects, tasks } from 'sdk.do'

// WORKFLOW - Project workflows (workflow uses every and on core objects)
workflow('create-project', async ({ projectData }) => {
  // Create project
  const project = await projects.create(projectData)

  // Setup default structure
  await projects.createMilestone(project.id, {
    name: 'Planning',
    dueDate: addDays(new Date(), 14),
  })

  // Assign team
  await projects.addMembers(project.id, projectData.team)

  // Send notification
  await send($.Project.created, { project })

  return project
})

// ON - Project events (on is one of 8 core SDK objects)
on($.Project.milestoneCompleted, async ({ project, milestone }) => {
  await send($.Email.send, {
    to: project.owner,
    template: 'milestone-completed',
    data: { projectName: project.name, milestoneName: milestone.name },
  })
})

on($.Project.taskOverdue, async ({ project, task }) => {
  await send($.Notification.send, {
    userId: task.assignee,
    title: 'Task Overdue',
    body: `${task.title} is overdue in ${project.name}`,
  })
})

Quick Example

import { projects } from 'sdk.do'

// Create project
const project = await projects.create({
  name: 'Mobile App Redesign',
  description: 'Complete redesign of mobile application',
  organizationId: 'org-123',
  teamId: 'team-456',
  startDate: new Date('2024-01-01'),
  targetDate: new Date('2024-06-30'),
  status: 'planning',
  visibility: 'private',
})

console.log(`Project ID: ${project.id}`)

// Update project
await projects.update(project.id, {
  status: 'in-progress',
  priority: 'high',
  budget: 500000,
  currency: 'USD',
})

// Add team members
await projects.addMember(project.id, {
  userId: 'user-123',
  role: 'project-manager',
})

await projects.addMembers(project.id, [
  { userId: 'user-456', role: 'developer' },
  { userId: 'user-789', role: 'designer' },
])

// Create milestone
const milestone = await projects.createMilestone(project.id, {
  name: 'Alpha Release',
  description: 'First alpha version',
  dueDate: new Date('2024-03-31'),
  deliverables: ['Core functionality implemented', 'UI mockups approved', 'API endpoints deployed'],
})

// Create task
const task = await projects.createTask(project.id, {
  title: 'Implement user authentication',
  description: 'Build auth flow with OAuth support',
  assignee: 'user-123',
  milestone: milestone.id,
  priority: 'high',
  estimatedHours: 40,
  dueDate: new Date('2024-02-15'),
  labels: ['backend', 'security'],
})

// Update task status
await projects.updateTask(project.id, task.id, {
  status: 'in-progress',
  progress: 25,
})

// Complete task
await projects.completeTask(project.id, task.id, {
  actualHours: 35,
  notes: 'Completed ahead of schedule',
})

// List tasks
const tasks = await projects.listTasks(project.id, {
  status: 'in-progress',
  assignee: 'user-123',
  sort: 'priority:desc',
})

tasks.forEach((t) => {
  console.log(`${t.title}: ${t.status} (${t.progress}%)`)
})

// Project timeline
const timeline = await projects.getTimeline(project.id)

timeline.items.forEach((item) => {
  console.log(`${item.date}: ${item.event}`)
  console.log(`  ${item.description}`)
})

// Gantt chart data
const gantt = await projects.getGantt(project.id)

gantt.tasks.forEach((t) => {
  console.log(`${t.name}: ${t.startDate} → ${t.endDate}`)
  if (t.dependencies.length > 0) {
    console.log(`  Depends on: ${t.dependencies.join(', ')}`)
  }
})

// Project progress
const progress = await projects.getProgress(project.id)

console.log(`Overall progress: ${progress.percentage}%`)
console.log(`Milestones completed: ${progress.milestonesCompleted}/${progress.totalMilestones}`)
console.log(`Tasks completed: ${progress.tasksCompleted}/${progress.totalTasks}`)
console.log(`On track: ${progress.onTrack}`)

// Resource allocation
await projects.allocateResource(project.id, {
  type: 'team-member',
  id: 'user-123',
  allocation: 100, // 100%
  startDate: new Date('2024-01-01'),
  endDate: new Date('2024-06-30'),
})

await projects.allocateResource(project.id, {
  type: 'budget',
  amount: 50000,
  category: 'development',
  period: 'Q1',
})

// Dependencies
await projects.addDependency(project.id, {
  task: task.id,
  dependsOn: 'task-789',
  type: 'finish-to-start',
})

// Project risks
await projects.addRisk(project.id, {
  title: 'Third-party API changes',
  description: 'External API may introduce breaking changes',
  probability: 'medium',
  impact: 'high',
  mitigation: 'Implement adapter pattern for API calls',
  owner: 'user-123',
})

// Project documents
await projects.addDocument(project.id, {
  title: 'Technical Architecture',
  type: 'architecture',
  url: 'https://docs.example.com/architecture.pdf',
  tags: ['technical', 'reference'],
})

// Project metrics
const metrics = await projects.getMetrics(project.id)

console.log(`Velocity: ${metrics.velocity} points/sprint`)
console.log(`Burn rate: $${metrics.burnRate}/month`)
console.log(`Team capacity: ${metrics.capacity} hours/week`)
console.log(`Utilization: ${metrics.utilization}%`)

// Budget tracking
const budget = await projects.getBudget(project.id)

console.log(`Budget: $${budget.total}`)
console.log(`Spent: $${budget.spent}`)
console.log(`Remaining: $${budget.remaining}`)
console.log(`Projected: $${budget.projected}`)

// Status report
const report = await projects.generateReport(project.id, {
  type: 'status',
  period: 'weekly',
  include: ['progress', 'risks', 'budget', 'blockers'],
})

// Project archive
await projects.archive(project.id, {
  reason: 'Completed successfully',
  preserveData: true,
})

// Clone project
const cloned = await projects.clone(project.id, {
  name: 'Mobile App v2.0',
  includeTasks: true,
  includeMilestones: true,
  resetDates: true,
})

// Project templates
const template = await projects.createTemplate({
  name: 'Mobile App Project',
  milestones: [
    { name: 'Planning', duration: { weeks: 2 } },
    { name: 'Design', duration: { weeks: 4 } },
    { name: 'Development', duration: { weeks: 12 } },
    { name: 'Testing', duration: { weeks: 4 } },
    { name: 'Launch', duration: { weeks: 2 } },
  ],
  defaultTasks: [
    { title: 'Requirements gathering', milestone: 'Planning' },
    { title: 'UI/UX design', milestone: 'Design' },
    { title: 'Backend development', milestone: 'Development' },
  ],
})

// Create from template
const fromTemplate = await projects.createFromTemplate('Mobile App Project', {
  name: 'Customer Portal',
  startDate: new Date('2024-07-01'),
})

// Project notifications
on(projects.milestoneCompleted, async (project, milestone) => {
  console.log(`Milestone completed: ${milestone.name}`)
  await notifyStakeholders(project.id, milestone)
})

on(projects.taskOverdue, async (project, task) => {
  console.log(`Task overdue: ${task.title}`)
  await alertProjectManager(project.id, task)
})

on(projects.budgetThresholdExceeded, async (project, threshold) => {
  console.log(`Budget ${threshold}% used`)
  await notifyFinance(project.id)
})

// Project analytics
const analytics = await projects.getAnalytics(project.id, {
  timeRange: { last: '90d' },
  metrics: ['velocity', 'cycle-time', 'lead-time'],
})

// Export project data
await projects.export(project.id, {
  format: 'json',
  include: ['tasks', 'milestones', 'timeline', 'budget'],
})

// Import project data
await projects.import('./project-backup.json')

Core Capabilities

  • Milestones - Project milestone tracking
  • Tasks - Task management and assignment
  • Timeline - Gantt charts and timelines
  • Resources - Team and budget allocation
  • Progress - Real-time progress tracking

Access Methods

SDK

TypeScript/JavaScript library for projects

await projects.create({ name: 'Mobile App Redesign', organizationId: 'org-123' })

SDK Documentation

CLI

Command-line tool for project operations

do project create "Mobile App Redesign" --org org-123

CLI Documentation

API

REST/RPC endpoints for project management

curl -X POST https://api.do/v1/projects -d '{"name":"Mobile App Redesign"}'

API Documentation

MCP

Model Context Protocol for AI-driven projects

Create a new project named Mobile App Redesign

MCP Documentation

Parent Primitive

  • teams - Team collaboration and management

Child Primitives

  • tasks - Task management within projects
  • milestones - Milestone tracking
  • workflows - Project automation workflows
  • on - Project event handlers