# harsha12a/workgrid architecture

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

- Interactive diagram: https://gitdiagram.com/harsha12a/workgrid
- Repository: https://github.com/harsha12a/workgrid

## Overview

WorkGrid is a collaborative task and group-management application. Users register or log in, then create and manage personal tasks or groups, assign members, and view group work; tasks can include uploaded attachments and assignment email notifications. The frontend routes these workflows and uses Redux async actions to communicate with the Express API. The backend controllers coordinate user, task, and group persistence. The tree documents scheduled deadline handling, but the scheduler and related configuration were not sampled, so their detailed behavior and wiring are not expanded here.

Main entry points: [`Frontend/src/App.jsx`](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/App.jsx) (App routes), [`Backend/index.js`](https://github.com/harsha12a/workgrid/blob/master/Backend/index.js) (WorkGrid API), [`Backend/controllers/task.controller.js`](https://github.com/harsha12a/workgrid/blob/master/Backend/controllers/task.controller.js) (Task operations), [`Backend/controllers/group.controller.js`](https://github.com/harsha12a/workgrid/blob/master/Backend/controllers/group.controller.js) (Group operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["App routes<br/>[App.jsx]"]
  node_clientstore["Redux store<br/>[store.js]"]
end

subgraph group_identity["User accounts"]
  node_loginui["Register and login<br/>[Login.jsx]"]
  node_profileui["User profile<br/>[UserProfile.jsx]"]
  node_userslice["User state<br/>[userSlice.js]"]
  node_userroute["User routes<br/>[user.routes.js]"]
  node_userctrl["User operations<br/>[user.controller.js]"]
  node_usermodel["User records<br/>[user.model.js]"]
end

subgraph group_work["Tasks and groups"]
  node_taskui["Task views<br/>[Tasks.jsx]"]
  node_taskforms["Task forms<br/>[AddTask.jsx]"]
  node_groupui["Group views<br/>[Groups.jsx]"]
  node_groupdetails["Group details<br/>[GroupDetails.jsx]"]
  node_groupforms["Group forms<br/>[CreateGroup.jsx]"]
  node_grouptaskform["Group task form<br/>[AddGroupTask.jsx]"]
  node_taskslice["Task state<br/>[taskSlice.js]"]
  node_groupslice["Group state<br/>[groupSlice.js]"]
  node_taskroute["Task routes<br/>[task.routes.js]"]
  node_taskctrl["Task operations<br/>[task.controller.js]"]
  node_taskmodel[("Task records<br/>[task.model.js]")]
  node_grouproute["Group routes<br/>[group.routes.js]"]
  node_groupctrl["Group operations"]
  node_groupmodel[("Group records<br/>[group.model.js]")]
end

subgraph group_runtime["Backend runtime"]
  node_api["WorkGrid API<br/>[index.js]"]
  node_upload["File upload<br/>[upload.js]"]
  node_mailer["Email delivery<br/>[nodeMailer.js]"]
  node_tasktemplate["Task email templates<br/>[taskTemplate.js]"]
  node_addedtemplate["Assignment email template"]
  node_grouptemplate["Group email template<br/>[groupTemplate.js]"]
  node_mongoconfig["Mongo connection<br/>[mongoConfig.js]"]
  node_scheduler["Deadline scheduler<br/>[scheduler.js]"]
end

node_visitor(("User"))
node_cloudinary(("Cloudinary"))
node_mongo[("MongoDB")]

node_visitor -->|"uses"| node_app
node_app -->|"routes"| node_loginui
node_app -->|"routes"| node_profileui
node_app -->|"routes"| node_taskui
node_app -->|"routes"| node_taskforms
node_app -->|"routes"| node_groupui
node_app -->|"routes"| node_groupdetails
node_app -->|"routes"| node_groupforms
node_app -->|"routes"| node_grouptaskform
node_clientstore -->|"registers"| node_userslice
node_clientstore -->|"registers"| node_taskslice
node_clientstore -->|"registers"| node_groupslice
node_loginui -->|"dispatches"| node_userslice
node_profileui -->|"dispatches"| node_userslice
node_taskui -->|"dispatches"| node_taskslice
node_taskforms -->|"dispatches"| node_taskslice
node_groupui -->|"dispatches"| node_groupslice
node_groupdetails -->|"dispatches"| node_groupslice
node_groupforms -->|"dispatches"| node_groupslice
node_grouptaskform -->|"dispatches"| node_groupslice
node_userslice -->|"HTTP requests"| node_api
node_taskslice -->|"HTTP requests"| node_api
node_groupslice -->|"HTTP requests"| node_api
node_api -->|"mounts"| node_userroute
node_api -->|"mounts"| node_taskroute
node_api -->|"mounts"| node_grouproute
node_userroute -->|"dispatches"| node_userctrl
node_taskroute -->|"dispatches"| node_taskctrl
node_grouproute -->|"dispatches"| node_groupctrl
node_userctrl -->|"reads and writes"| node_usermodel
node_taskctrl -->|"reads and writes"| node_taskmodel
node_taskctrl -->|"looks up users"| node_usermodel
node_taskctrl -->|"updates group tasks"| node_groupmodel
node_groupctrl -->|"reads and writes"| node_groupmodel
node_groupctrl -->|"looks up users"| node_usermodel
node_groupctrl -->|"creates tasks"| node_taskmodel
node_taskroute -->|"handles files"| node_upload
node_upload -.->|"uploads files"| node_cloudinary
node_taskctrl -->|"sends notifications"| node_mailer
node_taskctrl -->|"renders"| node_tasktemplate
node_taskctrl -->|"renders"| node_addedtemplate
node_groupctrl -->|"sends invitations"| node_mailer
node_groupctrl -->|"renders"| node_grouptemplate
node_mongoconfig -->|"connects"| node_mongo
node_api -->|"loads"| node_mongoconfig
node_api -->|"loads"| node_scheduler

click node_app "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/App.jsx"
click node_clientstore "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/redux/store.js"
click node_loginui "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/Login.jsx"
click node_profileui "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/UserProfile.jsx"
click node_userslice "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/redux/userSlice.js"
click node_taskui "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/Tasks.jsx"
click node_taskforms "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/AddTask.jsx"
click node_groupui "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/Groups.jsx"
click node_groupdetails "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/GroupDetails.jsx"
click node_groupforms "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/CreateGroup.jsx"
click node_grouptaskform "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/AddGroupTask.jsx"
click node_taskslice "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/redux/taskSlice.js"
click node_groupslice "https://github.com/harsha12a/workgrid/blob/master/Frontend/src/redux/groupSlice.js"
click node_api "https://github.com/harsha12a/workgrid/blob/master/Backend/index.js"
click node_userroute "https://github.com/harsha12a/workgrid/blob/master/Backend/routes/user.routes.js"
click node_userctrl "https://github.com/harsha12a/workgrid/blob/master/Backend/controllers/user.controller.js"
click node_usermodel "https://github.com/harsha12a/workgrid/blob/master/Backend/models/user.model.js"
click node_taskroute "https://github.com/harsha12a/workgrid/blob/master/Backend/routes/task.routes.js"
click node_taskctrl "https://github.com/harsha12a/workgrid/blob/master/Backend/controllers/task.controller.js"
click node_taskmodel "https://github.com/harsha12a/workgrid/blob/master/Backend/models/task.model.js"
click node_grouproute "https://github.com/harsha12a/workgrid/blob/master/Backend/routes/group.routes.js"
click node_groupctrl "https://github.com/harsha12a/workgrid/blob/master/Backend/controllers/group.controller.js"
click node_groupmodel "https://github.com/harsha12a/workgrid/blob/master/Backend/models/group.model.js"
click node_upload "https://github.com/harsha12a/workgrid/blob/master/Backend/middlewares/upload.js"
click node_mailer "https://github.com/harsha12a/workgrid/blob/master/Backend/config/nodeMailer.js"
click node_tasktemplate "https://github.com/harsha12a/workgrid/blob/master/Backend/pages/taskTemplate.js"
click node_addedtemplate "https://github.com/harsha12a/workgrid/blob/master/Backend/pages/addedUserTemplate.js"
click node_grouptemplate "https://github.com/harsha12a/workgrid/blob/master/Backend/pages/groupTemplate.js"
click node_mongoconfig "https://github.com/harsha12a/workgrid/blob/master/Backend/config/mongoConfig.js"
click node_scheduler "https://github.com/harsha12a/workgrid/blob/master/Backend/config/scheduler.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_clientstore,node_visitor toneBlue
class node_loginui,node_profileui,node_userslice,node_userroute,node_userctrl,node_usermodel,node_mongo toneAmber
class node_taskui,node_taskforms,node_groupui,node_groupdetails,node_groupforms,node_grouptaskform,node_taskslice,node_groupslice,node_taskroute,node_taskctrl,node_taskmodel,node_grouproute,node_groupctrl,node_groupmodel toneMint
class node_api,node_upload,node_mailer,node_tasktemplate,node_addedtemplate,node_grouptemplate,node_mongoconfig,node_scheduler toneRose
class node_cloudinary toneIndigo
```

## Components

### Web client

- [App routes](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/App.jsx): `Frontend/src/App.jsx`
- [Redux store](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/redux/store.js): `Frontend/src/redux/store.js`

### User accounts

- [Register and login](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/Login.jsx): `Frontend/src/components/Login.jsx`
- [User profile](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/UserProfile.jsx): `Frontend/src/components/UserProfile.jsx`
- [User state](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/redux/userSlice.js): `Frontend/src/redux/userSlice.js`
- [User routes](https://github.com/harsha12a/workgrid/blob/master/Backend/routes/user.routes.js): `Backend/routes/user.routes.js`
- [User operations](https://github.com/harsha12a/workgrid/blob/master/Backend/controllers/user.controller.js): `Backend/controllers/user.controller.js`
- [User records](https://github.com/harsha12a/workgrid/blob/master/Backend/models/user.model.js): `Backend/models/user.model.js`

### Tasks and groups

- [Task views](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/Tasks.jsx): `Frontend/src/components/Tasks.jsx`
- [Task forms](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/AddTask.jsx): `Frontend/src/components/AddTask.jsx`
- [Group views](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/Groups.jsx): `Frontend/src/components/Groups.jsx`
- [Group details](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/GroupDetails.jsx): `Frontend/src/components/GroupDetails.jsx`
- [Group forms](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/CreateGroup.jsx): `Frontend/src/components/CreateGroup.jsx`
- [Group task form](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/components/AddGroupTask.jsx): `Frontend/src/components/AddGroupTask.jsx`
- [Task state](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/redux/taskSlice.js): `Frontend/src/redux/taskSlice.js`
- [Group state](https://github.com/harsha12a/workgrid/blob/master/Frontend/src/redux/groupSlice.js): `Frontend/src/redux/groupSlice.js`
- [Task routes](https://github.com/harsha12a/workgrid/blob/master/Backend/routes/task.routes.js): `Backend/routes/task.routes.js`
- [Task operations](https://github.com/harsha12a/workgrid/blob/master/Backend/controllers/task.controller.js): `Backend/controllers/task.controller.js`
- [Task records](https://github.com/harsha12a/workgrid/blob/master/Backend/models/task.model.js): `Backend/models/task.model.js`
- [Group routes](https://github.com/harsha12a/workgrid/blob/master/Backend/routes/group.routes.js): `Backend/routes/group.routes.js`
- [Group operations](https://github.com/harsha12a/workgrid/blob/master/Backend/controllers/group.controller.js): `Backend/controllers/group.controller.js`
- [Group records](https://github.com/harsha12a/workgrid/blob/master/Backend/models/group.model.js): `Backend/models/group.model.js`

### Backend runtime

- [WorkGrid API](https://github.com/harsha12a/workgrid/blob/master/Backend/index.js): `Backend/index.js`
- [File upload](https://github.com/harsha12a/workgrid/blob/master/Backend/middlewares/upload.js): `Backend/middlewares/upload.js`
- [Email delivery](https://github.com/harsha12a/workgrid/blob/master/Backend/config/nodeMailer.js): `Backend/config/nodeMailer.js`
- [Task email templates](https://github.com/harsha12a/workgrid/blob/master/Backend/pages/taskTemplate.js): `Backend/pages/taskTemplate.js`
- [Assignment email template](https://github.com/harsha12a/workgrid/blob/master/Backend/pages/addedUserTemplate.js): `Backend/pages/addedUserTemplate.js`
- [Group email template](https://github.com/harsha12a/workgrid/blob/master/Backend/pages/groupTemplate.js): `Backend/pages/groupTemplate.js`
- [Mongo connection](https://github.com/harsha12a/workgrid/blob/master/Backend/config/mongoConfig.js): `Backend/config/mongoConfig.js`
- [Deadline scheduler](https://github.com/harsha12a/workgrid/blob/master/Backend/config/scheduler.js): `Backend/config/scheduler.js`

### Other components

- **User**
- **Cloudinary**
- **MongoDB**

## Connections

- User → App routes: uses
- App routes → Register and login: routes
- App routes → User profile: routes
- App routes → Task views: routes
- App routes → Task forms: routes
- App routes → Group views: routes
- App routes → Group details: routes
- App routes → Group forms: routes
- App routes → Group task form: routes
- Redux store → User state: registers
- Redux store → Task state: registers
- Redux store → Group state: registers
- Register and login → User state: dispatches
- User profile → User state: dispatches
- Task views → Task state: dispatches
- Task forms → Task state: dispatches
- Group views → Group state: dispatches
- Group details → Group state: dispatches
- Group forms → Group state: dispatches
- Group task form → Group state: dispatches
- User state → WorkGrid API: HTTP requests
- Task state → WorkGrid API: HTTP requests
- Group state → WorkGrid API: HTTP requests
- WorkGrid API → User routes: mounts
- WorkGrid API → Task routes: mounts
- WorkGrid API → Group routes: mounts
- User routes → User operations: dispatches
- Task routes → Task operations: dispatches
- Group routes → Group operations: dispatches
- User operations → User records: reads and writes
- Task operations → Task records: reads and writes
- Task operations → User records: looks up users
- Task operations → Group records: updates group tasks
- Group operations → Group records: reads and writes
- Group operations → User records: looks up users
- Group operations → Task records: creates tasks
- Task routes → File upload: handles files
- File upload → Cloudinary: uploads files
- Task operations → Email delivery: sends notifications
- Task operations → Task email templates: renders
- Task operations → Assignment email template: renders
- Group operations → Email delivery: sends invitations
- Group operations → Group email template: renders
- Mongo connection → MongoDB: connects
- WorkGrid API → Mongo connection: loads
- WorkGrid API → Deadline scheduler: loads
