# vedhavyav/co-organizer architecture

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

- Interactive diagram: https://gitdiagram.com/vedhavyav/co-organizer
- Repository: https://github.com/vedhavyav/co-organizer

## Overview

This is a planner and learning-progress web app with account access, tasks, calendar events, playlists, and learning pages. Users enter through the React app, authenticate or sign up, then use protected dashboard features; event and task actions reach backend routes and controllers that use MySQL. The graph preserves playlist and learning-progress capabilities visible in the tree, though their full wiring is not shown. Some frontend-to-backend links are dashed because the available excerpts do not establish the complete HTTP route mapping.

Main entry points: [`frontend/src/App.jsx`](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/App.jsx) (App routing), [`backend/db.js`](https://github.com/vedhavyav/co-organizer/blob/main/backend/db.js) (MySQL pool), [`backend/server.js`](https://github.com/vedhavyav/co-organizer/blob/main/backend/server.js) (HTTP server), [`frontend/src/api/eventApi.js`](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/api/eventApi.js) (Event API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["App routing<br/>[App.jsx]"]
end

subgraph group_identity["Identity"]
  node_authstate["Auth state<br/>[AuthContext.jsx]"]
  node_login["Login and signup<br/>[Login.jsx]"]
  node_oauthui["OAuth callback<br/>[OAuthHandler.jsx]"]
end

subgraph group_planning["Planning features"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_tasksui["Task manager<br/>[Tasks.jsx]"]
  node_calendarui["Calendar<br/>[Calendar.jsx]"]
  node_eventui["Event details<br/>[Event.jsx]"]
  node_addevent["Event editor<br/>[AddEvent.jsx]"]
  node_eventapi["Event API client<br/>[eventApi.js]"]
  node_playlistui["Playlist editor<br/>[AddPlaylist.jsx]"]
  node_player["Playlist player<br/>[PlaylistPlayer.jsx]"]
  node_progress["Learning progress"]
end

subgraph group_backend["Backend services"]
  node_server["HTTP server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_authcontroller["Account logic<br/>[authController.js]"]
  node_passport["Google sign-in<br/>[passport.js]"]
  node_taskroutes["Task routes<br/>[tasksRoutes.js]"]
  node_taskcontroller["Task logic<br/>[taskController.js]"]
  node_calroutes["Event routes<br/>[calendarRoutes.js]"]
  node_calcontroller["Event logic"]
  node_playroutes["Playlist routes<br/>[playlistRoutes.js]"]
  node_playcontroller["Playlist logic"]
  node_db[("MySQL pool<br/>[db.js]")]
end

node_user(("User"))
node_google(("Google OAuth"))

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_login
node_app -->|"protects and routes"| node_dashboard
node_app -->|"protects and routes"| node_tasksui
node_app -->|"protects and routes"| node_calendarui
node_app -->|"protects and routes"| node_eventui
node_app -->|"protects and routes"| node_addevent
node_app -->|"routes to"| node_oauthui
node_login -->|"uses"| node_authstate
node_oauthui -->|"stores login"| node_authstate
node_server -->|"mounts"| node_authroutes
node_server -->|"mounts"| node_taskroutes
node_server -->|"mounts"| node_calroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_authroutes -->|"invokes"| node_passport
node_google -.->|"authenticates with"| node_passport
node_passport -->|"reads and writes"| node_db
node_authcontroller -->|"reads and writes"| node_db
node_taskroutes -->|"dispatches"| node_taskcontroller
node_taskroutes -.->|"requires token from"| node_authstate
node_taskcontroller -->|"reads and writes"| node_db
node_calroutes -->|"dispatches"| node_calcontroller
node_calcontroller -->|"reads and writes"| node_db
node_calendarui -->|"requests events via"| node_eventapi
node_eventui -->|"requests events via"| node_eventapi
node_addevent -->|"submits events via"| node_eventapi
node_eventapi -.->|"calls HTTP API"| node_server
node_playlistui -.->|"uses API"| node_playroutes
node_player -.->|"uses API"| node_playroutes
node_playroutes -->|"dispatches"| node_playcontroller
node_playcontroller -->|"reads and writes"| node_db

click node_app "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/App.jsx"
click node_authstate "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/context/AuthContext.jsx"
click node_login "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Login.jsx"
click node_oauthui "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/OAuthHandler.jsx"
click node_dashboard "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Dashboard.jsx"
click node_tasksui "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Tasks.jsx"
click node_calendarui "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Calendar.jsx"
click node_eventui "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Event.jsx"
click node_addevent "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/AddEvent.jsx"
click node_eventapi "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/api/eventApi.js"
click node_playlistui "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/AddPlaylist.jsx"
click node_player "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/PlaylistPlayer.jsx"
click node_progress "https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/LearningProgress.jsx"
click node_server "https://github.com/vedhavyav/co-organizer/blob/main/backend/server.js"
click node_authroutes "https://github.com/vedhavyav/co-organizer/blob/main/backend/routes/authRoutes.js"
click node_authcontroller "https://github.com/vedhavyav/co-organizer/blob/main/backend/controllers/authController.js"
click node_passport "https://github.com/vedhavyav/co-organizer/blob/main/backend/config/passport.js"
click node_taskroutes "https://github.com/vedhavyav/co-organizer/blob/main/backend/routes/tasksRoutes.js"
click node_taskcontroller "https://github.com/vedhavyav/co-organizer/blob/main/backend/controllers/taskController.js"
click node_calroutes "https://github.com/vedhavyav/co-organizer/blob/main/backend/routes/calendarRoutes.js"
click node_calcontroller "https://github.com/vedhavyav/co-organizer/blob/main/backend/controllers/calendarController.js"
click node_playroutes "https://github.com/vedhavyav/co-organizer/blob/main/backend/routes/playlistRoutes.js"
click node_playcontroller "https://github.com/vedhavyav/co-organizer/blob/main/backend/controllers/playlistController.js"
click node_db "https://github.com/vedhavyav/co-organizer/blob/main/backend/db.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_user toneBlue
class node_authstate,node_login,node_oauthui toneAmber
class node_dashboard,node_tasksui,node_calendarui,node_eventui,node_addevent,node_eventapi,node_playlistui,node_player,node_progress toneMint
class node_server,node_authroutes,node_authcontroller,node_passport,node_taskroutes,node_taskcontroller,node_calroutes,node_calcontroller,node_playroutes,node_playcontroller,node_db toneRose
class node_google toneIndigo
```

## Components

### Web application

- [App routing](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`

### Identity

- [Auth state](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [Login and signup](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Login.jsx): `frontend/src/pages/Login.jsx`
- [OAuth callback](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/OAuthHandler.jsx): `frontend/src/pages/OAuthHandler.jsx`

### Planning features

- [Dashboard](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Dashboard.jsx): `frontend/src/pages/Dashboard.jsx`
- [Task manager](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Tasks.jsx): `frontend/src/pages/Tasks.jsx`
- [Calendar](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Calendar.jsx): `frontend/src/pages/Calendar.jsx`
- [Event details](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/Event.jsx): `frontend/src/pages/Event.jsx`
- [Event editor](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/AddEvent.jsx): `frontend/src/pages/AddEvent.jsx`
- [Event API client](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/api/eventApi.js): `frontend/src/api/eventApi.js`
- [Playlist editor](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/AddPlaylist.jsx): `frontend/src/pages/AddPlaylist.jsx`
- [Playlist player](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/PlaylistPlayer.jsx): `frontend/src/pages/PlaylistPlayer.jsx`
- [Learning progress](https://github.com/vedhavyav/co-organizer/blob/main/frontend/src/pages/LearningProgress.jsx): `frontend/src/pages/LearningProgress.jsx`

### Backend services

- [HTTP server](https://github.com/vedhavyav/co-organizer/blob/main/backend/server.js): `backend/server.js`
- [Auth routes](https://github.com/vedhavyav/co-organizer/blob/main/backend/routes/authRoutes.js): `backend/routes/authRoutes.js`
- [Account logic](https://github.com/vedhavyav/co-organizer/blob/main/backend/controllers/authController.js): `backend/controllers/authController.js`
- [Google sign-in](https://github.com/vedhavyav/co-organizer/blob/main/backend/config/passport.js): `backend/config/passport.js`
- [Task routes](https://github.com/vedhavyav/co-organizer/blob/main/backend/routes/tasksRoutes.js): `backend/routes/tasksRoutes.js`
- [Task logic](https://github.com/vedhavyav/co-organizer/blob/main/backend/controllers/taskController.js): `backend/controllers/taskController.js`
- [Event routes](https://github.com/vedhavyav/co-organizer/blob/main/backend/routes/calendarRoutes.js): `backend/routes/calendarRoutes.js`
- [Event logic](https://github.com/vedhavyav/co-organizer/blob/main/backend/controllers/calendarController.js): `backend/controllers/calendarController.js`
- [Playlist routes](https://github.com/vedhavyav/co-organizer/blob/main/backend/routes/playlistRoutes.js): `backend/routes/playlistRoutes.js`
- [Playlist logic](https://github.com/vedhavyav/co-organizer/blob/main/backend/controllers/playlistController.js): `backend/controllers/playlistController.js`
- [MySQL pool](https://github.com/vedhavyav/co-organizer/blob/main/backend/db.js): `backend/db.js`

### Other components

- **User**
- **Google OAuth**

## Connections

- User → App routing: uses (evidence: `frontend/src/App.jsx`)
- App routing → Login and signup: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Dashboard: protects and routes (evidence: `frontend/src/App.jsx`)
- App routing → Task manager: protects and routes (evidence: `frontend/src/App.jsx`)
- App routing → Calendar: protects and routes (evidence: `frontend/src/App.jsx`)
- App routing → Event details: protects and routes (evidence: `frontend/src/App.jsx`)
- App routing → Event editor: protects and routes (evidence: `frontend/src/App.jsx`)
- App routing → OAuth callback: routes to (evidence: `frontend/src/App.jsx`)
- Login and signup → Auth state: uses (evidence: `frontend/src/pages/Login.jsx`)
- OAuth callback → Auth state: stores login (evidence: `frontend/src/pages/OAuthHandler.jsx`)
- HTTP server → Auth routes: mounts (evidence: `backend/server.js`)
- HTTP server → Task routes: mounts (evidence: `backend/server.js`)
- HTTP server → Event routes: mounts (evidence: `backend/server.js`)
- Auth routes → Account logic: dispatches (evidence: `backend/routes/authRoutes.js`)
- Auth routes → Google sign-in: invokes (evidence: `backend/routes/authRoutes.js`)
- Google OAuth → Google sign-in: authenticates with
- Google sign-in → MySQL pool: reads and writes (evidence: `backend/config/passport.js`)
- Account logic → MySQL pool: reads and writes (evidence: `backend/controllers/authController.js`)
- Task routes → Task logic: dispatches (evidence: `backend/routes/tasksRoutes.js`)
- Task routes → Auth state: requires token from
- Task logic → MySQL pool: reads and writes (evidence: `backend/controllers/taskController.js`)
- Event routes → Event logic: dispatches (evidence: `backend/routes/calendarRoutes.js`)
- Event logic → MySQL pool: reads and writes (evidence: `backend/controllers/calendarController.js`)
- Calendar → Event API client: requests events via (evidence: `frontend/src/pages/Calendar.jsx`)
- Event details → Event API client: requests events via (evidence: `frontend/src/pages/Event.jsx`)
- Event editor → Event API client: submits events via (evidence: `frontend/src/pages/AddEvent.jsx`)
- Event API client → HTTP server: calls HTTP API
- Playlist editor → Playlist routes: uses API
- Playlist player → Playlist routes: uses API
- Playlist routes → Playlist logic: dispatches (evidence: `backend/routes/playlistRoutes.js`)
- Playlist logic → MySQL pool: reads and writes (evidence: `backend/controllers/playlistController.js`)
