# vijaykumar-devcode/task-pulse architecture

> Architecture diagram of the GitHub repository vijaykumar-devcode/task-pulse, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vijaykumar-devcode/task-pulse
- Repository: https://github.com/vijaykumar-devcode/task-pulse

## Overview

Task Pulse is a full-stack task and user management application. Users authenticate in the React client, then manage tasks, assignments, and PDF attachments through the Express API; administrators can also manage users. The API enforces authentication and ownership rules, persists user/task records in MongoDB, and stores uploaded files on disk. The README describes real-time task refresh and Swagger documentation. Source excerpts show key frontend, route, controller, and storage interactions; some subsystem links are documented rather than inspected directly.

Main entry points: [`frontend/src/App.jsx`](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/App.jsx) (Task Pulse UI), [`backend/src/app.js`](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/app.js) (API application), [`backend/src/models/User.js`](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/models/User.js) (User records), [`backend/src/controllers/taskController.js`](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/controllers/taskController.js) (Task management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["React application"]
  node_client_entry["Client bootstrap<br/>[main.jsx]"]
  node_app_ui["Task Pulse UI<br/>[App.jsx]"]
  node_layout["App layout<br/>[Layout.jsx]"]
  node_route_guard["Protected routes<br/>[ProtectedRoute.jsx]"]
  node_redux_store["Redux store<br/>[index.js]"]
  node_auth_state["Authentication state<br/>[authSlice.js]"]
  node_task_state["Task state<br/>[tasksSlice.js]"]
  node_user_state["User state<br/>[usersSlice.js]"]
  node_api_client["HTTP API client<br/>[client.js]"]
end

subgraph group_api["Express API"]
  node_api_app["API application<br/>[app.js]"]
  node_auth_routes["Authentication routes<br/>[authRoutes.js]"]
  node_user_routes["User routes<br/>[userRoutes.js]"]
  node_task_routes["Task routes<br/>[taskRoutes.js]"]
  node_auth_controller["Authentication<br/>[authController.js]"]
  node_user_controller["User management<br/>[userController.js]"]
  node_task_controller["Task management<br/>[taskController.js]"]
  node_auth_middleware["JWT authorization<br/>[auth.js]"]
  node_upload_middleware["PDF upload handling<br/>[upload.js]"]
  node_error_handler["Error handling<br/>[errorHandler.js]"]
end

subgraph group_domain["Domain and persistence"]
  node_user_model["User records<br/>[User.js]"]
  node_task_model["Task records<br/>[Task.js]"]
  node_file_storage[("Attachment files<br/>[fileStorage.js]")]
end

subgraph group_platform["API support"]
  node_swagger["Swagger API docs<br/>[swagger.js]"]
end

node_person(("User"))
node_mongo[("MongoDB")]
node_socket_io["Socket.IO transport"]

node_person -->|"uses"| node_client_entry
node_client_entry -->|"renders"| node_app_ui
node_app_ui -->|"renders"| node_layout
node_app_ui -->|"uses"| node_route_guard
node_client_entry -->|"configures"| node_redux_store
node_redux_store -->|"registers"| node_auth_state
node_redux_store -->|"registers"| node_task_state
node_redux_store -->|"registers"| node_user_state
node_app_ui -->|"dispatches"| node_auth_state
node_app_ui -->|"dispatches"| node_task_state
node_app_ui -->|"dispatches"| node_user_state
node_auth_state -->|"calls auth API"| node_api_client
node_task_state -->|"calls task API"| node_api_client
node_user_state -->|"calls user API"| node_api_client
node_app_ui -->|"calls task API"| node_api_client
node_api_client -->|"sends HTTP requests"| node_api_app
node_api_app -->|"mounts"| node_auth_routes
node_api_app -->|"mounts"| node_user_routes
node_api_app -->|"mounts"| node_task_routes
node_api_app -->|"uses"| node_error_handler
node_api_app -->|"serves docs"| node_swagger
node_auth_routes -->|"routes to"| node_auth_controller
node_auth_routes -->|"uses"| node_auth_middleware
node_user_routes -->|"routes to"| node_user_controller
node_user_routes -->|"authenticates"| node_auth_middleware
node_task_routes -->|"routes to"| node_task_controller
node_task_routes -->|"authenticates"| node_auth_middleware
node_task_routes -->|"processes uploads"| node_upload_middleware
node_auth_controller -->|"reads and writes"| node_user_model
node_auth_controller -->|"checks passwords"| node_user_model
node_user_controller -->|"reads and writes"| node_user_model
node_task_controller -->|"reads and writes"| node_task_model
node_task_controller -->|"looks up assignees"| node_user_model
node_auth_middleware -->|"loads user"| node_user_model
node_task_controller -->|"saves and removes files"| node_file_storage
node_user_model -.->|"persists records"| node_mongo
node_task_model -.->|"persists records"| node_mongo
node_task_model -.->|"stores file metadata"| node_file_storage
node_task_controller -->|"emits task events"| node_socket_io
node_socket_io -->|"refreshes task list"| node_app_ui

click node_client_entry "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/main.jsx"
click node_app_ui "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/App.jsx"
click node_layout "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/components/Layout.jsx"
click node_route_guard "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/components/ProtectedRoute.jsx"
click node_redux_store "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/store/index.js"
click node_auth_state "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/store/authSlice.js"
click node_task_state "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/store/tasksSlice.js"
click node_user_state "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/store/usersSlice.js"
click node_api_client "https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/api/client.js"
click node_api_app "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/app.js"
click node_auth_routes "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/routes/authRoutes.js"
click node_user_routes "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/routes/userRoutes.js"
click node_task_routes "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/routes/taskRoutes.js"
click node_auth_controller "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/controllers/authController.js"
click node_user_controller "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/controllers/userController.js"
click node_task_controller "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/controllers/taskController.js"
click node_auth_middleware "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/middleware/auth.js"
click node_upload_middleware "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/middleware/upload.js"
click node_user_model "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/models/User.js"
click node_task_model "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/models/Task.js"
click node_file_storage "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/services/fileStorage.js"
click node_error_handler "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/middleware/errorHandler.js"
click node_swagger "https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/config/swagger.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_client_entry,node_app_ui,node_layout,node_route_guard,node_redux_store,node_auth_state,node_task_state,node_user_state,node_api_client,node_person toneBlue
class node_api_app,node_auth_routes,node_user_routes,node_task_routes,node_auth_controller,node_user_controller,node_task_controller,node_auth_middleware,node_upload_middleware,node_error_handler,node_mongo toneAmber
class node_user_model,node_task_model,node_file_storage toneMint
class node_swagger toneRose
class node_socket_io toneIndigo
```

## Components

### React application

- [Client bootstrap](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/main.jsx): `frontend/src/main.jsx`
- [Task Pulse UI](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [App layout](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/components/Layout.jsx): `frontend/src/components/Layout.jsx`
- [Protected routes](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/components/ProtectedRoute.jsx): `frontend/src/components/ProtectedRoute.jsx`
- [Redux store](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/store/index.js): `frontend/src/store/index.js`
- [Authentication state](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/store/authSlice.js): `frontend/src/store/authSlice.js`
- [Task state](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/store/tasksSlice.js): `frontend/src/store/tasksSlice.js`
- [User state](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/store/usersSlice.js): `frontend/src/store/usersSlice.js`
- [HTTP API client](https://github.com/vijaykumar-devcode/task-pulse/blob/main/frontend/src/api/client.js): `frontend/src/api/client.js`

### Express API

- [API application](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/app.js): `backend/src/app.js`
- [Authentication routes](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/routes/authRoutes.js): `backend/src/routes/authRoutes.js`
- [User routes](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/routes/userRoutes.js): `backend/src/routes/userRoutes.js`
- [Task routes](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/routes/taskRoutes.js): `backend/src/routes/taskRoutes.js`
- [Authentication](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/controllers/authController.js): `backend/src/controllers/authController.js`
- [User management](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/controllers/userController.js): `backend/src/controllers/userController.js`
- [Task management](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/controllers/taskController.js): `backend/src/controllers/taskController.js`
- [JWT authorization](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/middleware/auth.js): `backend/src/middleware/auth.js`
- [PDF upload handling](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/middleware/upload.js): `backend/src/middleware/upload.js`
- [Error handling](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/middleware/errorHandler.js): `backend/src/middleware/errorHandler.js`

### Domain and persistence

- [User records](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/models/User.js): `backend/src/models/User.js`
- [Task records](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/models/Task.js): `backend/src/models/Task.js`
- [Attachment files](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/services/fileStorage.js): `backend/src/services/fileStorage.js`

### API support

- [Swagger API docs](https://github.com/vijaykumar-devcode/task-pulse/blob/main/backend/src/config/swagger.js): `backend/src/config/swagger.js`

### Other components

- **User**
- **MongoDB**
- **Socket.IO transport**

## Connections

- User → Client bootstrap: uses (evidence: `README.md`)
- Client bootstrap → Task Pulse UI: renders (evidence: `frontend/src/main.jsx`)
- Task Pulse UI → App layout: renders (evidence: `frontend/src/App.jsx`)
- Task Pulse UI → Protected routes: uses (evidence: `frontend/src/App.jsx`)
- Client bootstrap → Redux store: configures (evidence: `frontend/src/main.jsx`)
- Redux store → Authentication state: registers (evidence: `frontend/src/store/index.js`)
- Redux store → Task state: registers (evidence: `frontend/src/store/index.js`)
- Redux store → User state: registers (evidence: `frontend/src/store/index.js`)
- Task Pulse UI → Authentication state: dispatches (evidence: `frontend/src/App.jsx`)
- Task Pulse UI → Task state: dispatches (evidence: `frontend/src/App.jsx`)
- Task Pulse UI → User state: dispatches (evidence: `frontend/src/App.jsx`)
- Authentication state → HTTP API client: calls auth API (evidence: `frontend/src/store/authSlice.js`)
- Task state → HTTP API client: calls task API (evidence: `frontend/src/store/tasksSlice.js`)
- User state → HTTP API client: calls user API (evidence: `frontend/src/store/usersSlice.js`)
- Task Pulse UI → HTTP API client: calls task API (evidence: `frontend/src/App.jsx`)
- HTTP API client → API application: sends HTTP requests (evidence: `frontend/src/api/client.js`)
- API application → Authentication routes: mounts (evidence: `backend/src/app.js`)
- API application → User routes: mounts (evidence: `backend/src/app.js`)
- API application → Task routes: mounts (evidence: `backend/src/app.js`)
- API application → Error handling: uses (evidence: `backend/src/app.js`)
- API application → Swagger API docs: serves docs (evidence: `backend/src/app.js`)
- Authentication routes → Authentication: routes to (evidence: `backend/src/routes/authRoutes.js`)
- Authentication routes → JWT authorization: uses (evidence: `backend/src/routes/authRoutes.js`)
- User routes → User management: routes to (evidence: `backend/src/routes/userRoutes.js`)
- User routes → JWT authorization: authenticates (evidence: `backend/src/routes/userRoutes.js`)
- Task routes → Task management: routes to (evidence: `backend/src/routes/taskRoutes.js`)
- Task routes → JWT authorization: authenticates (evidence: `backend/src/routes/taskRoutes.js`)
- Task routes → PDF upload handling: processes uploads (evidence: `backend/src/routes/taskRoutes.js`)
- Authentication → User records: reads and writes (evidence: `backend/src/controllers/authController.js`)
- Authentication → User records: checks passwords (evidence: `backend/src/controllers/authController.js`)
- User management → User records: reads and writes (evidence: `backend/src/controllers/userController.js`)
- Task management → Task records: reads and writes (evidence: `backend/src/controllers/taskController.js`)
- Task management → User records: looks up assignees (evidence: `backend/src/controllers/taskController.js`)
- JWT authorization → User records: loads user (evidence: `backend/src/middleware/auth.js`)
- Task management → Attachment files: saves and removes files (evidence: `backend/src/controllers/taskController.js`)
- User records → MongoDB: persists records (evidence: `README.md`)
- Task records → MongoDB: persists records (evidence: `README.md`)
- Task records → Attachment files: stores file metadata (evidence: `README.md`)
- Task management → Socket.IO transport: emits task events (evidence: `backend/src/controllers/taskController.js`)
- Socket.IO transport → Task Pulse UI: refreshes task list (evidence: `frontend/src/App.jsx`)
