Skip to content

Projects

Projects group tasks together 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/:projectIdGet project details
PATCH/api/projects/:projectIdUpdate project
DELETE/api/projects/:projectIdDelete project
GET/api/projects/:projectId/membersList members
POST/api/projects/:projectId/membersAdd member
DELETE/api/projects/:projectId/members/:userIdRemove member

Frontend Routes

RouteViewDescription
/projectsProjectsViewList all user projects
/projects/:projectIdProjectDetailViewProject overview
/projects/:projectId/tasksProjectTasksViewProject task list
/projects/:projectId/tasks/:taskIdProjectTaskDetailViewTask detail
/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
  • Member roles at the project level override org/team roles for project-scoped actions
  • Tasks are always project-scoped (required projectId with cascade delete)