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' })CLI
Command-line tool for project operations
do project create "Mobile App Redesign" --org org-123API
REST/RPC endpoints for project management
curl -X POST https://api.do/v1/projects -d '{"name":"Mobile App Redesign"}'MCP
Model Context Protocol for AI-driven projects
Create a new project named Mobile App RedesignRelated Primitives
Parent Primitive
- teams - Team collaboration and management
Child Primitives
- repositories - Code repository management
Related
- tasks - Task management within projects
- milestones - Milestone tracking
- workflows - Project automation workflows
- on - Project event handlers
programmers
Deploy autonomous AI programmer agents that write, review, and deploy code. Automate repetitive development tasks with 90% less manual work and full TypeScript type safety.
reference
Explore complete API reference with TypeScript types, code examples, and interactive playground. Search semantically across all .do services with AI-powered documentation.