# zackrip/tasksync architecture

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

- Interactive diagram: https://gitdiagram.com/zackrip/tasksync
- Repository: https://github.com/zackrip/tasksync

## Overview

This is a MERN task-management and team-collaboration application. Users register or sign in, then work in a protected dashboard to create and assign tasks, track status, receive notifications, and chat one-to-one. The backend exposes HTTP routes backed by controllers and MongoDB models; selected flows also use Redis caching/session data and Socket.io delivery. The README documents password recovery, profile uploads, and browser notifications, though their complete implementation paths are not all evidenced in the sampled source.

Main entry points: [`frontend/src/App.jsx`](https://github.com/zackrip/tasksync/blob/main/frontend/src/App.jsx) (Route application), [`backend/src/app.js`](https://github.com/zackrip/tasksync/blob/main/backend/src/app.js) (Express app), [`backend/src/Controllers/message.controller.js`](https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/message.controller.js) (Message operations), [`backend/src/Controllers/task.controller.js`](https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/task.controller.js) (Task operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["Route application<br/>[App.jsx]"]
  node_authui["Auth screens"]
  node_taskui["Task dashboard"]
  node_chatui["Chat screens"]
  node_notifyui["Notifications view"]
  node_profileui["Profile view<br/>[ProfilePage.jsx]"]
  node_taskclient["Task service<br/>[taskServices.js]"]
  node_chatclient["Chat service<br/>[chatService.js]"]
  node_userclient["User service<br/>[userService.js]"]
  node_httpclient["HTTP client<br/>[api.js]"]
  node_socketclient["Socket client<br/>[socket.js]"]
end

subgraph group_api["HTTP API"]
  node_server["Express app<br/>[app.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_taskroutes["Task routes<br/>[task.routes.js]"]
  node_controllers["Domain controllers"]
  node_auth["Authentication<br/>[auth.controller.js]"]
end

subgraph group_work["Tasks and notifications"]
  node_task["Task operations<br/>[task.controller.js]"]
end

subgraph group_collab["Chat and realtime"]
  node_message["Message operations"]
  node_conversation["Conversation operations"]
  node_socketserver["Socket server<br/>[socket.js]"]
end

subgraph group_state["Persistence and integrations"]
  node_users[("User records<br/>[user.model.js]")]
  node_tasks[("Task records<br/>[task.model.js]")]
  node_notifications[("Notification records")]
  node_conversations[("Conversation records")]
  node_messages[("Message records<br/>[message.model.js]")]
end

node_person(("Team member"))
node_mongo[("MongoDB")]
node_redis[("Redis")]
node_email["Email service"]
node_browser["Browser notifications"]

node_person -->|"uses"| node_app
node_app -->|"routes to"| node_authui
node_app -->|"routes to"| node_taskui
node_app -->|"routes to"| node_chatui
node_app -->|"routes to"| node_notifyui
node_app -->|"routes to"| node_profileui
node_authui -->|"requests"| node_httpclient
node_taskui -->|"requests"| node_taskclient
node_chatui -->|"requests"| node_chatclient
node_profileui -->|"requests"| node_userclient
node_notifyui -->|"requests"| node_taskclient
node_taskclient -->|"uses"| node_httpclient
node_chatclient -->|"uses"| node_httpclient
node_userclient -->|"uses"| node_httpclient
node_httpclient -->|"HTTP requests"| node_server
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_taskroutes
node_authroutes -->|"dispatches"| node_auth
node_taskroutes -->|"dispatches"| node_task
node_auth -->|"reads/writes"| node_users
node_auth -->|"stores OTP session"| node_redis
node_auth -->|"sends recovery mail"| node_email
node_task -->|"reads/writes"| node_tasks
node_task -->|"creates/reads"| node_notifications
node_task -->|"emits updates"| node_socketserver
node_task -->|"reads users"| node_users
node_socketclient -->|"realtime events"| node_socketserver
node_server -->|"initializes"| node_socketserver
node_chatclient -->|"uses"| node_socketclient
node_server -->|"mounts conversation routes"| node_conversation
node_server -->|"mounts message routes"| node_message
node_conversation -->|"reads/writes"| node_conversations
node_message -->|"reads/updates"| node_conversations
node_message -->|"reads/writes"| node_messages
node_message -->|"caches messages"| node_redis
node_message -->|"emits chat events"| node_socketserver
node_message -->|"populates participants"| node_users
node_tasks -->|"persisted in"| node_mongo
node_notifications -->|"persisted in"| node_mongo
node_users -->|"persisted in"| node_mongo
node_messages -->|"persisted in"| node_mongo
node_conversations -->|"persisted in"| node_mongo
node_notifyui -.->|"may display native alerts"| node_browser

click node_app "https://github.com/zackrip/tasksync/blob/main/frontend/src/App.jsx"
click node_authui "https://github.com/zackrip/tasksync/tree/main/frontend/src/pages/Auth"
click node_taskui "https://github.com/zackrip/tasksync/tree/main/frontend/src/pages/TaskDashboard"
click node_chatui "https://github.com/zackrip/tasksync/tree/main/frontend/src/pages/Chat"
click node_notifyui "https://github.com/zackrip/tasksync/blob/main/frontend/src/pages/NotificationPage.jsx"
click node_profileui "https://github.com/zackrip/tasksync/blob/main/frontend/src/pages/ProfilePage.jsx"
click node_taskclient "https://github.com/zackrip/tasksync/blob/main/frontend/src/services/taskServices.js"
click node_chatclient "https://github.com/zackrip/tasksync/blob/main/frontend/src/services/chatService.js"
click node_userclient "https://github.com/zackrip/tasksync/blob/main/frontend/src/services/userService.js"
click node_httpclient "https://github.com/zackrip/tasksync/blob/main/frontend/src/services/api.js"
click node_socketclient "https://github.com/zackrip/tasksync/blob/main/frontend/src/socket.js"
click node_server "https://github.com/zackrip/tasksync/blob/main/backend/src/app.js"
click node_authroutes "https://github.com/zackrip/tasksync/blob/main/backend/src/Routes/auth.routes.js"
click node_taskroutes "https://github.com/zackrip/tasksync/blob/main/backend/src/Routes/task.routes.js"
click node_controllers "https://github.com/zackrip/tasksync/tree/main/backend/src/Controllers"
click node_auth "https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/auth.controller.js"
click node_task "https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/task.controller.js"
click node_message "https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/message.controller.js"
click node_conversation "https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/conversation.controller.js"
click node_socketserver "https://github.com/zackrip/tasksync/blob/main/backend/src/socket.js"
click node_users "https://github.com/zackrip/tasksync/blob/main/backend/src/Models/user.model.js"
click node_tasks "https://github.com/zackrip/tasksync/blob/main/backend/src/Models/task.model.js"
click node_notifications "https://github.com/zackrip/tasksync/blob/main/backend/src/Models/notification.model.js"
click node_conversations "https://github.com/zackrip/tasksync/blob/main/backend/src/Models/conversation.model.js"
click node_messages "https://github.com/zackrip/tasksync/blob/main/backend/src/Models/message.model.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_authui,node_taskui,node_chatui,node_notifyui,node_profileui,node_taskclient,node_chatclient,node_userclient,node_httpclient,node_socketclient,node_browser toneBlue
class node_server,node_authroutes,node_taskroutes,node_controllers,node_auth,node_mongo,node_redis toneAmber
class node_task toneMint
class node_message,node_conversation,node_socketserver toneRose
class node_users,node_tasks,node_notifications,node_conversations,node_messages,node_person,node_email toneIndigo
```

## Components

### Web client

- [Route application](https://github.com/zackrip/tasksync/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Auth screens](https://github.com/zackrip/tasksync/tree/main/frontend/src/pages/Auth): `frontend/src/pages/Auth`
- [Task dashboard](https://github.com/zackrip/tasksync/tree/main/frontend/src/pages/TaskDashboard): `frontend/src/pages/TaskDashboard`
- [Chat screens](https://github.com/zackrip/tasksync/tree/main/frontend/src/pages/Chat): `frontend/src/pages/Chat`
- [Notifications view](https://github.com/zackrip/tasksync/blob/main/frontend/src/pages/NotificationPage.jsx): `frontend/src/pages/NotificationPage.jsx`
- [Profile view](https://github.com/zackrip/tasksync/blob/main/frontend/src/pages/ProfilePage.jsx): `frontend/src/pages/ProfilePage.jsx`
- [Task service](https://github.com/zackrip/tasksync/blob/main/frontend/src/services/taskServices.js): `frontend/src/services/taskServices.js`
- [Chat service](https://github.com/zackrip/tasksync/blob/main/frontend/src/services/chatService.js): `frontend/src/services/chatService.js`
- [User service](https://github.com/zackrip/tasksync/blob/main/frontend/src/services/userService.js): `frontend/src/services/userService.js`
- [HTTP client](https://github.com/zackrip/tasksync/blob/main/frontend/src/services/api.js): `frontend/src/services/api.js`
- [Socket client](https://github.com/zackrip/tasksync/blob/main/frontend/src/socket.js): `frontend/src/socket.js`

### HTTP API

- [Express app](https://github.com/zackrip/tasksync/blob/main/backend/src/app.js): `backend/src/app.js`
- [Auth routes](https://github.com/zackrip/tasksync/blob/main/backend/src/Routes/auth.routes.js): `backend/src/Routes/auth.routes.js`
- [Task routes](https://github.com/zackrip/tasksync/blob/main/backend/src/Routes/task.routes.js): `backend/src/Routes/task.routes.js`
- [Domain controllers](https://github.com/zackrip/tasksync/tree/main/backend/src/Controllers): `backend/src/Controllers`
- [Authentication](https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/auth.controller.js): `backend/src/Controllers/auth.controller.js`

### Tasks and notifications

- [Task operations](https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/task.controller.js): `backend/src/Controllers/task.controller.js`

### Chat and realtime

- [Message operations](https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/message.controller.js): `backend/src/Controllers/message.controller.js`
- [Conversation operations](https://github.com/zackrip/tasksync/blob/main/backend/src/Controllers/conversation.controller.js): `backend/src/Controllers/conversation.controller.js`
- [Socket server](https://github.com/zackrip/tasksync/blob/main/backend/src/socket.js): `backend/src/socket.js`

### Persistence and integrations

- [User records](https://github.com/zackrip/tasksync/blob/main/backend/src/Models/user.model.js): `backend/src/Models/user.model.js`
- [Task records](https://github.com/zackrip/tasksync/blob/main/backend/src/Models/task.model.js): `backend/src/Models/task.model.js`
- [Notification records](https://github.com/zackrip/tasksync/blob/main/backend/src/Models/notification.model.js): `backend/src/Models/notification.model.js`
- [Conversation records](https://github.com/zackrip/tasksync/blob/main/backend/src/Models/conversation.model.js): `backend/src/Models/conversation.model.js`
- [Message records](https://github.com/zackrip/tasksync/blob/main/backend/src/Models/message.model.js): `backend/src/Models/message.model.js`

### Other components

- **Team member**
- **MongoDB**
- **Redis**
- **Email service**
- **Browser notifications**

## Connections

- Team member → Route application: uses
- Route application → Auth screens: routes to
- Route application → Task dashboard: routes to
- Route application → Chat screens: routes to
- Route application → Notifications view: routes to
- Route application → Profile view: routes to
- Auth screens → HTTP client: requests
- Task dashboard → Task service: requests
- Chat screens → Chat service: requests
- Profile view → User service: requests
- Notifications view → Task service: requests
- Task service → HTTP client: uses
- Chat service → HTTP client: uses
- User service → HTTP client: uses
- HTTP client → Express app: HTTP requests
- Express app → Auth routes: mounts
- Express app → Task routes: mounts
- Auth routes → Authentication: dispatches
- Task routes → Task operations: dispatches
- Authentication → User records: reads/writes
- Authentication → Redis: stores OTP session
- Authentication → Email service: sends recovery mail
- Task operations → Task records: reads/writes
- Task operations → Notification records: creates/reads
- Task operations → Socket server: emits updates
- Task operations → User records: reads users
- Socket client → Socket server: realtime events
- Express app → Socket server: initializes
- Chat service → Socket client: uses
- Express app → Conversation operations: mounts conversation routes
- Express app → Message operations: mounts message routes
- Conversation operations → Conversation records: reads/writes
- Message operations → Conversation records: reads/updates
- Message operations → Message records: reads/writes
- Message operations → Redis: caches messages
- Message operations → Socket server: emits chat events
- Message operations → User records: populates participants
- Task records → MongoDB: persisted in
- Notification records → MongoDB: persisted in
- User records → MongoDB: persisted in
- Message records → MongoDB: persisted in
- Conversation records → MongoDB: persisted in
- Notifications view → Browser notifications: may display native alerts
