Skip to content

Projects

Projects group tasks and manage members with project-level roles.

Model

Project
├── name, description, status
├── organizationId? (optional)
├── teamId? (optional)
├── members (with roles)
└── tasks (full task lifecycle)

API Endpoints

MethodPathDescription
GET/api/projectsList user's projects
POST/api/projectsCreate project
GET/api/projects/:idGet project details
PATCH/api/projects/:idUpdate project
DELETE/api/projects/:idDelete project
GET/api/projects/:id/membersList members
POST/api/projects/:id/membersAdd member
DELETE/api/projects/:id/members/:userIdRemove member

Frontend Routes

RouteViewDescription
/projectsProjectsViewList all user projects
/projects/:projectIdProjectDetailViewProject overview
/projects/:projectId/tasksProjectTasksViewProject task list
/projects/:projectId/tasks/:taskIdProjectTaskDetailViewTask details
/projects/:projectId/settingsProjectSettingsViewProject settings

Frontend Store

typescript
const store = useProjectsStore()
const { projects, currentProject } = storeToRefs(store)

await store.fetchProjects()
await store.fetchProject(projectId)

await store.createProject({ name, description, organizationId, teamId })
await store.updateProject(projectId, { name, description })

// Members
await store.addMember(projectId, userId, role)
await store.removeMember(projectId, userId)

Key Implementation Details

  • Project permissions control task CRUD operations
  • Project-level member roles override org/team roles for project-scoped actions
  • Tasks are always linked to a project (required projectId with cascade delete)