# senaye2003/project-manager-app architecture

> Architecture diagram of the GitHub repository senaye2003/project-manager-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/senaye2003/project-manager-app
- Repository: https://github.com/senaye2003/project-manager-app

## Overview

This is a team project-management product: users authenticate, then browse or manage teams, projects, and tasks through a React frontend and Express API. The backend routes requests through authentication, role checks and validation to controllers, services, and Prisma repositories backed by PostgreSQL. The frontend includes dashboard, team, project, and task views; manager/developer roles and task/project statuses are documented capabilities. API documentation and request logging are configured in the server. Some subsystem links rely on the SOURCE INDEX or README because their implementations were not excerpted.

Main entry points: [`project-manager-frontend/src/App.jsx`](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/App.jsx) (App routing), [`project-manager-api/src/server.js`](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/server.js) (Express server), [`project-manager-api/src/routes/projectRoutes.js`](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/projectRoutes.js) (Project routes), [`project-manager-frontend/src/api/client.js`](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/client.js) (HTTP client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web frontend"]
  node_app["App routing<br/>[App.jsx]"]
  node_login["Login<br/>[Login.jsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_projects_page["Projects view<br/>[Projects.jsx]"]
  node_tasks_page["Tasks view<br/>[Tasks.jsx]"]
  node_teams_page["Teams view<br/>[Teams.jsx]"]
  node_protected["Route guard<br/>[ProtectedRoute.jsx]"]
  node_api_client["HTTP client<br/>[client.js]"]
  node_api_auth["Auth API<br/>[auth.js]"]
  node_api_projects["Projects API<br/>[projects.js]"]
  node_api_tasks["Tasks API<br/>[tasks.js]"]
  node_api_teams["Teams API<br/>[teams.js]"]
end

subgraph group_api["API request handling"]
  node_server["Express server<br/>[server.js]"]
  node_user_routes["User routes<br/>[userRoutes.js]"]
  node_project_routes["Project routes<br/>[projectRoutes.js]"]
  node_task_routes["Task routes<br/>[taskRoutes.js]"]
  node_team_routes["Team routes<br/>[teamRoutes.js]"]
  node_auth["JWT authentication<br/>[authenticate.js]"]
  node_roles["Role authorization<br/>[authorizeRole.js]"]
  node_validation["Request validation"]
end

subgraph group_domain["Management domains"]
  node_user_controller["User controller<br/>[userController.js]"]
  node_project_controller["Project controller"]
  node_task_controller["Task controller<br/>[taskController.js]"]
  node_team_controller["Team controller<br/>[teamController.js]"]
  node_user_service["User service<br/>[userService.js]"]
  node_project_service["Project service<br/>[projectService.js]"]
  node_task_service["Task service<br/>[taskService.js]"]
  node_team_service["Team service<br/>[teamService.js]"]
end

subgraph group_data["Persistence"]
  node_user_repo["User repository<br/>[userRepo.js]"]
  node_project_repo["Project repository<br/>[projectRepo.js]"]
  node_task_repo["Task repository<br/>[taskRepo.js]"]
  node_team_repo["Team repository<br/>[teamRepo.js]"]
  node_project_manager_database[("PostgreSQL<br/>database")]
end

node_user(("User"))

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_login
node_app -->|"guards pages"| node_protected
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_projects_page
node_app -->|"routes to"| node_tasks_page
node_app -->|"routes to"| node_teams_page
node_login -->|"submits credentials"| node_api_auth
node_api_auth -->|"sends requests"| node_api_client
node_projects_page -->|"loads and updates"| node_api_projects
node_tasks_page -->|"loads and updates"| node_api_tasks
node_teams_page -->|"uses"| node_api_teams
node_dashboard -->|"loads data"| node_api_projects
node_dashboard -->|"loads data"| node_api_tasks
node_dashboard -->|"loads data"| node_api_teams
node_api_projects -->|"sends requests"| node_api_client
node_api_tasks -->|"sends requests"| node_api_client
node_api_teams -->|"sends requests"| node_api_client
node_api_client -.->|"calls API"| node_server
node_server -->|"mounts"| node_user_routes
node_server -->|"mounts"| node_project_routes
node_server -->|"mounts"| node_task_routes
node_server -->|"mounts"| node_team_routes
node_user_routes -->|"authenticates"| node_auth
node_user_routes -->|"checks role"| node_roles
node_user_routes -->|"dispatches to"| node_user_controller
node_project_routes -->|"authenticates"| node_auth
node_project_routes -->|"checks role"| node_roles
node_project_routes -->|"validates input"| node_validation
node_project_routes -->|"dispatches to"| node_project_controller
node_task_routes -->|"authenticates"| node_auth
node_task_routes -->|"checks role"| node_roles
node_task_routes -->|"dispatches to"| node_task_controller
node_team_routes -->|"authenticates"| node_auth
node_team_routes -->|"checks role"| node_roles
node_team_routes -->|"dispatches to"| node_team_controller
node_user_controller -->|"calls"| node_user_service
node_project_controller -->|"calls"| node_project_service
node_task_controller -->|"calls"| node_task_service
node_team_controller -->|"calls"| node_team_service
node_team_controller -->|"checks duplicate"| node_team_repo
node_user_service -->|"uses"| node_user_repo
node_project_service -->|"uses"| node_project_repo
node_task_service -->|"uses"| node_task_repo
node_team_service -->|"uses"| node_team_repo
node_user_repo -.->|"reads and writes"| node_project_manager_database

click node_app "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/App.jsx"
click node_login "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/components/Login.jsx"
click node_dashboard "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/pages/Dashboard.jsx"
click node_projects_page "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/pages/Projects.jsx"
click node_tasks_page "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/pages/Tasks.jsx"
click node_teams_page "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/pages/Teams.jsx"
click node_protected "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/layouts/ProtectedRoute.jsx"
click node_api_client "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/client.js"
click node_api_auth "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/auth.js"
click node_api_projects "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/projects.js"
click node_api_tasks "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/tasks.js"
click node_api_teams "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/teams.js"
click node_server "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/server.js"
click node_user_routes "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/userRoutes.js"
click node_project_routes "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/projectRoutes.js"
click node_task_routes "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/taskRoutes.js"
click node_team_routes "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/teamRoutes.js"
click node_auth "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/middleware/authenticate.js"
click node_roles "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/middleware/authorizeRole.js"
click node_validation "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/middleware/projectValidators.js"
click node_user_controller "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/controllers/userController.js"
click node_project_controller "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/controllers/projectController.js"
click node_task_controller "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/controllers/taskController.js"
click node_team_controller "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/controllers/teamController.js"
click node_user_service "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/services/userService.js"
click node_project_service "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/services/projectService.js"
click node_task_service "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/services/taskService.js"
click node_team_service "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/services/teamService.js"
click node_user_repo "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/repositories/userRepo.js"
click node_project_repo "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/repositories/projectRepo.js"
click node_task_repo "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/repositories/taskRepo.js"
click node_team_repo "https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/repositories/teamRepo.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_login,node_dashboard,node_projects_page,node_tasks_page,node_teams_page,node_protected,node_api_client,node_api_auth,node_api_projects,node_api_tasks,node_api_teams,node_user toneBlue
class node_server,node_user_routes,node_project_routes,node_task_routes,node_team_routes,node_auth,node_roles,node_validation toneAmber
class node_user_controller,node_project_controller,node_task_controller,node_team_controller,node_user_service,node_project_service,node_task_service,node_team_service toneMint
class node_user_repo,node_project_repo,node_task_repo,node_team_repo,node_project_manager_database toneRose
```

## Components

### Web frontend

- [App routing](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/App.jsx): `project-manager-frontend/src/App.jsx`
- [Login](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/components/Login.jsx): `project-manager-frontend/src/components/Login.jsx`
- [Dashboard](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/pages/Dashboard.jsx): `project-manager-frontend/src/pages/Dashboard.jsx`
- [Projects view](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/pages/Projects.jsx): `project-manager-frontend/src/pages/Projects.jsx`
- [Tasks view](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/pages/Tasks.jsx): `project-manager-frontend/src/pages/Tasks.jsx`
- [Teams view](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/pages/Teams.jsx): `project-manager-frontend/src/pages/Teams.jsx`
- [Route guard](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/layouts/ProtectedRoute.jsx): `project-manager-frontend/src/layouts/ProtectedRoute.jsx`
- [HTTP client](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/client.js): `project-manager-frontend/src/api/client.js`
- [Auth API](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/auth.js): `project-manager-frontend/src/api/auth.js`
- [Projects API](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/projects.js): `project-manager-frontend/src/api/projects.js`
- [Tasks API](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/tasks.js): `project-manager-frontend/src/api/tasks.js`
- [Teams API](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-frontend/src/api/teams.js): `project-manager-frontend/src/api/teams.js`

### API request handling

- [Express server](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/server.js): `project-manager-api/src/server.js`
- [User routes](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/userRoutes.js): `project-manager-api/src/routes/userRoutes.js`
- [Project routes](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/projectRoutes.js): `project-manager-api/src/routes/projectRoutes.js`
- [Task routes](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/taskRoutes.js): `project-manager-api/src/routes/taskRoutes.js`
- [Team routes](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/routes/teamRoutes.js): `project-manager-api/src/routes/teamRoutes.js`
- [JWT authentication](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/middleware/authenticate.js): `project-manager-api/src/middleware/authenticate.js`
- [Role authorization](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/middleware/authorizeRole.js): `project-manager-api/src/middleware/authorizeRole.js`
- [Request validation](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/middleware/projectValidators.js): `project-manager-api/src/middleware/projectValidators.js`

### Management domains

- [User controller](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/controllers/userController.js): `project-manager-api/src/controllers/userController.js`
- [Project controller](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/controllers/projectController.js): `project-manager-api/src/controllers/projectController.js`
- [Task controller](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/controllers/taskController.js): `project-manager-api/src/controllers/taskController.js`
- [Team controller](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/controllers/teamController.js): `project-manager-api/src/controllers/teamController.js`
- [User service](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/services/userService.js): `project-manager-api/src/services/userService.js`
- [Project service](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/services/projectService.js): `project-manager-api/src/services/projectService.js`
- [Task service](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/services/taskService.js): `project-manager-api/src/services/taskService.js`
- [Team service](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/services/teamService.js): `project-manager-api/src/services/teamService.js`

### Persistence

- [User repository](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/repositories/userRepo.js): `project-manager-api/src/repositories/userRepo.js`
- [Project repository](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/repositories/projectRepo.js): `project-manager-api/src/repositories/projectRepo.js`
- [Task repository](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/repositories/taskRepo.js): `project-manager-api/src/repositories/taskRepo.js`
- [Team repository](https://github.com/senaye2003/project-manager-app/blob/main/project-manager-api/src/repositories/teamRepo.js): `project-manager-api/src/repositories/teamRepo.js`
- **PostgreSQL**: database

### Other components

- **User**

## Connections

- User → App routing: uses (evidence: `project-manager-frontend/src/App.jsx`)
- App routing → Login: routes to (evidence: `project-manager-frontend/src/App.jsx`)
- App routing → Route guard: guards pages (evidence: `project-manager-frontend/src/App.jsx`)
- App routing → Dashboard: routes to (evidence: `project-manager-frontend/src/App.jsx`)
- App routing → Projects view: routes to (evidence: `project-manager-frontend/src/App.jsx`)
- App routing → Tasks view: routes to (evidence: `project-manager-frontend/src/App.jsx`)
- App routing → Teams view: routes to (evidence: `project-manager-frontend/src/App.jsx`)
- Login → Auth API: submits credentials (evidence: `project-manager-frontend/src/components/Login.jsx`)
- Auth API → HTTP client: sends requests (evidence: `project-manager-frontend/src/api/auth.js`)
- Projects view → Projects API: loads and updates (evidence: `project-manager-frontend/src/pages/Projects.jsx`)
- Tasks view → Tasks API: loads and updates (evidence: `project-manager-frontend/src/pages/Tasks.jsx`)
- Teams view → Teams API: uses (evidence: `project-manager-frontend/src/pages/Teams.jsx`)
- Dashboard → Projects API: loads data (evidence: `project-manager-frontend/src/pages/Dashboard.jsx`)
- Dashboard → Tasks API: loads data (evidence: `project-manager-frontend/src/pages/Dashboard.jsx`)
- Dashboard → Teams API: loads data (evidence: `project-manager-frontend/src/pages/Dashboard.jsx`)
- Projects API → HTTP client: sends requests (evidence: `project-manager-frontend/src/api/projects.js`)
- Tasks API → HTTP client: sends requests (evidence: `project-manager-frontend/src/api/tasks.js`)
- Teams API → HTTP client: sends requests
- HTTP client → Express server: calls API
- Express server → User routes: mounts (evidence: `project-manager-api/src/server.js`)
- Express server → Project routes: mounts (evidence: `project-manager-api/src/server.js`)
- Express server → Task routes: mounts (evidence: `project-manager-api/src/server.js`)
- Express server → Team routes: mounts (evidence: `project-manager-api/src/server.js`)
- User routes → JWT authentication: authenticates (evidence: `project-manager-api/src/routes/userRoutes.js`)
- User routes → Role authorization: checks role (evidence: `project-manager-api/src/routes/userRoutes.js`)
- User routes → User controller: dispatches to (evidence: `project-manager-api/src/routes/userRoutes.js`)
- Project routes → JWT authentication: authenticates (evidence: `project-manager-api/src/routes/projectRoutes.js`)
- Project routes → Role authorization: checks role (evidence: `project-manager-api/src/routes/projectRoutes.js`)
- Project routes → Request validation: validates input (evidence: `project-manager-api/src/routes/projectRoutes.js`)
- Project routes → Project controller: dispatches to (evidence: `project-manager-api/src/routes/projectRoutes.js`)
- Task routes → JWT authentication: authenticates (evidence: `project-manager-api/src/routes/taskRoutes.js`)
- Task routes → Role authorization: checks role (evidence: `project-manager-api/src/routes/taskRoutes.js`)
- Task routes → Task controller: dispatches to (evidence: `project-manager-api/src/routes/taskRoutes.js`)
- Team routes → JWT authentication: authenticates (evidence: `project-manager-api/src/routes/teamRoutes.js`)
- Team routes → Role authorization: checks role (evidence: `project-manager-api/src/routes/teamRoutes.js`)
- Team routes → Team controller: dispatches to (evidence: `project-manager-api/src/routes/teamRoutes.js`)
- User controller → User service: calls (evidence: `project-manager-api/src/controllers/userController.js`)
- Project controller → Project service: calls (evidence: `project-manager-api/src/controllers/projectController.js`)
- Task controller → Task service: calls (evidence: `project-manager-api/src/controllers/taskController.js`)
- Team controller → Team service: calls (evidence: `project-manager-api/src/controllers/teamController.js`)
- Team controller → Team repository: checks duplicate (evidence: `project-manager-api/src/controllers/teamController.js`)
- User service → User repository: uses (evidence: `project-manager-api/src/services/userService.js`)
- Project service → Project repository: uses (evidence: `project-manager-api/src/services/projectService.js`)
- Task service → Task repository: uses (evidence: `project-manager-api/src/services/taskService.js`)
- Team service → Team repository: uses (evidence: `project-manager-api/src/services/teamService.js`)
- User repository → PostgreSQL: reads and writes
