# sophistri/event-management architecture

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

- Interactive diagram: https://gitdiagram.com/sophistri/event-management
- Repository: https://github.com/sophistri/event-management

## Overview

This repository is a React/Express event-management app with cookie-based authentication and MongoDB-backed event and attendance features. The main user journey is to browse events, inspect details, optionally register, and view personal dashboards; signed-in users can also create and manage events. The graph includes the authentication, event, registration, and dashboard stages documented or represented in the tree. Some controller-to-model relationships are supported by the source index; unsampled internals are not expanded beyond that evidence.

Main entry points: [`client/src/AppRoutes/AppRoutes.jsx`](https://github.com/sophistri/event-management/blob/main/client/src/AppRoutes/AppRoutes.jsx) (Page routes), [`client/src/api/events.js`](https://github.com/sophistri/event-management/blob/main/client/src/api/events.js) (Event API client), [`server/src/app.js`](https://github.com/sophistri/event-management/blob/main/server/src/app.js) (API application), [`server/src/routes/event.routes.js`](https://github.com/sophistri/event-management/blob/main/server/src/routes/event.routes.js) (Event routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["React client"]
  node_app["Client app<br/>[App.jsx]"]
  node_routes["Page routes<br/>[AppRoutes.jsx]"]
  node_authstate["Auth state<br/>[AuthContext.jsx]"]
  node_authhook["Auth hook<br/>[useAuth.js]"]
  node_authpages["Login and signup"]
  node_home["Home page<br/>[Home.jsx]"]
  node_eventbrowse["Event browsing<br/>[EventsPage.jsx]"]
  node_eventdetail["Event details"]
  node_eventform["Event editor<br/>[EventFormPage.jsx]"]
  node_dashboards["User dashboards"]
  node_eventapi["Event API client<br/>[events.js]"]
  node_authapi["Auth API client<br/>[auth.js]"]
  node_httpclient["HTTP client<br/>[client.js]"]
end

subgraph group_api["Express API"]
  node_serverapp["API application<br/>[app.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_eventroutes["Event routes<br/>[event.routes.js]"]
  node_meroutes["Personal routes<br/>[me.routes.js]"]
  node_authmiddleware["Session middleware<br/>[authenticate.js]"]
  node_authcontroller["Auth controller<br/>[auth.controller.js]"]
  node_eventcontroller["Event controller"]
  node_attendancecontroller["Attendance controller"]
  node_mecontroller["Dashboard controller<br/>[me.controller.js]"]
  node_authservice["Auth service<br/>[auth.service.js]"]
end

subgraph group_data["MongoDB data"]
  node_user[("User records<br/>[User.js]")]
  node_event[("Event records<br/>[Event.js]")]
  node_attendance[("Attendance records<br/>[Attendance.js]")]
end

node_visitor(("Visitor"))
node_database[("MongoDB")]

node_visitor -->|"uses"| node_app
node_app -->|"renders"| node_routes
node_app -->|"provides auth"| node_authstate
node_routes -->|"routes to"| node_authpages
node_routes -->|"routes to"| node_home
node_routes -->|"routes to"| node_eventbrowse
node_routes -->|"routes to"| node_eventdetail
node_routes -->|"routes to"| node_eventform
node_routes -->|"routes to"| node_dashboards
node_authpages -->|"uses auth"| node_authstate
node_authstate -->|"calls"| node_authapi
node_authhook -->|"reads context"| node_authstate
node_eventbrowse -.->|"requests events"| node_eventapi
node_eventdetail -->|"requests details"| node_eventapi
node_eventform -->|"submits changes"| node_eventapi
node_dashboards -->|"requests dashboard data"| node_eventapi
node_home -->|"requests events"| node_eventapi
node_eventapi -->|"sends requests"| node_httpclient
node_authapi -->|"sends requests"| node_httpclient
node_httpclient -.->|"HTTP requests"| node_serverapp
node_serverapp -->|"mounts routes"| node_authroutes
node_serverapp -->|"mounts routes"| node_eventroutes
node_serverapp -->|"mounts routes"| node_meroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_authroutes -->|"protects profile route"| node_authmiddleware
node_eventroutes -->|"dispatches"| node_eventcontroller
node_eventroutes -->|"dispatches"| node_attendancecontroller
node_eventroutes -->|"protects routes"| node_authmiddleware
node_meroutes -->|"dispatches"| node_mecontroller
node_meroutes -->|"protects routes"| node_authmiddleware
node_authcontroller -->|"reads and writes"| node_user
node_authcontroller -->|"uses password and token helpers"| node_authservice
node_eventcontroller -->|"reads and writes"| node_event
node_eventcontroller -->|"reads registrations"| node_attendance
node_attendancecontroller -->|"reads event"| node_event
node_attendancecontroller -->|"manages registrations"| node_attendance
node_mecontroller -->|"reads events"| node_event
node_mecontroller -->|"reads registrations"| node_attendance
node_user -.->|"persisted in"| node_database
node_event -.->|"persisted in"| node_database
node_attendance -.->|"persisted in"| node_database

click node_app "https://github.com/sophistri/event-management/blob/main/client/src/App.jsx"
click node_routes "https://github.com/sophistri/event-management/blob/main/client/src/AppRoutes/AppRoutes.jsx"
click node_authstate "https://github.com/sophistri/event-management/blob/main/client/src/context/AuthContext.jsx"
click node_authhook "https://github.com/sophistri/event-management/blob/main/client/src/hooks/useAuth.js"
click node_authpages "https://github.com/sophistri/event-management/tree/main/client/src/pages/Login"
click node_home "https://github.com/sophistri/event-management/blob/main/client/src/pages/Home/Home.jsx"
click node_eventbrowse "https://github.com/sophistri/event-management/blob/main/client/src/pages/Events/EventsPage.jsx"
click node_eventdetail "https://github.com/sophistri/event-management/blob/main/client/src/pages/Events/EventDetailPage.jsx"
click node_eventform "https://github.com/sophistri/event-management/blob/main/client/src/pages/Events/EventFormPage.jsx"
click node_dashboards "https://github.com/sophistri/event-management/tree/main/client/src/pages/Dashboard"
click node_eventapi "https://github.com/sophistri/event-management/blob/main/client/src/api/events.js"
click node_authapi "https://github.com/sophistri/event-management/blob/main/client/src/api/auth.js"
click node_httpclient "https://github.com/sophistri/event-management/blob/main/client/src/api/client.js"
click node_serverapp "https://github.com/sophistri/event-management/blob/main/server/src/app.js"
click node_authroutes "https://github.com/sophistri/event-management/blob/main/server/src/routes/auth.routes.js"
click node_eventroutes "https://github.com/sophistri/event-management/blob/main/server/src/routes/event.routes.js"
click node_meroutes "https://github.com/sophistri/event-management/blob/main/server/src/routes/me.routes.js"
click node_authmiddleware "https://github.com/sophistri/event-management/blob/main/server/src/middleware/authenticate.js"
click node_authcontroller "https://github.com/sophistri/event-management/blob/main/server/src/controllers/auth.controller.js"
click node_eventcontroller "https://github.com/sophistri/event-management/blob/main/server/src/controllers/event.controller.js"
click node_attendancecontroller "https://github.com/sophistri/event-management/blob/main/server/src/controllers/attendance.controller.js"
click node_mecontroller "https://github.com/sophistri/event-management/blob/main/server/src/controllers/me.controller.js"
click node_authservice "https://github.com/sophistri/event-management/blob/main/server/src/services/auth.service.js"
click node_user "https://github.com/sophistri/event-management/blob/main/server/src/models/User.js"
click node_event "https://github.com/sophistri/event-management/blob/main/server/src/models/Event.js"
click node_attendance "https://github.com/sophistri/event-management/blob/main/server/src/models/Attendance.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_routes,node_authstate,node_authhook,node_authpages,node_home,node_eventbrowse,node_eventdetail,node_eventform,node_dashboards,node_eventapi,node_authapi,node_httpclient toneBlue
class node_serverapp,node_authroutes,node_eventroutes,node_meroutes,node_authmiddleware,node_authcontroller,node_eventcontroller,node_attendancecontroller,node_mecontroller,node_authservice,node_database toneAmber
class node_user,node_event,node_attendance toneMint
class node_visitor toneIndigo
```

## Components

### React client

- [Client app](https://github.com/sophistri/event-management/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Page routes](https://github.com/sophistri/event-management/blob/main/client/src/AppRoutes/AppRoutes.jsx): `client/src/AppRoutes/AppRoutes.jsx`
- [Auth state](https://github.com/sophistri/event-management/blob/main/client/src/context/AuthContext.jsx): `client/src/context/AuthContext.jsx`
- [Auth hook](https://github.com/sophistri/event-management/blob/main/client/src/hooks/useAuth.js): `client/src/hooks/useAuth.js`
- [Login and signup](https://github.com/sophistri/event-management/tree/main/client/src/pages/Login): `client/src/pages/Login`
- [Home page](https://github.com/sophistri/event-management/blob/main/client/src/pages/Home/Home.jsx): `client/src/pages/Home/Home.jsx`
- [Event browsing](https://github.com/sophistri/event-management/blob/main/client/src/pages/Events/EventsPage.jsx): `client/src/pages/Events/EventsPage.jsx`
- [Event details](https://github.com/sophistri/event-management/blob/main/client/src/pages/Events/EventDetailPage.jsx): `client/src/pages/Events/EventDetailPage.jsx`
- [Event editor](https://github.com/sophistri/event-management/blob/main/client/src/pages/Events/EventFormPage.jsx): `client/src/pages/Events/EventFormPage.jsx`
- [User dashboards](https://github.com/sophistri/event-management/tree/main/client/src/pages/Dashboard): `client/src/pages/Dashboard`
- [Event API client](https://github.com/sophistri/event-management/blob/main/client/src/api/events.js): `client/src/api/events.js`
- [Auth API client](https://github.com/sophistri/event-management/blob/main/client/src/api/auth.js): `client/src/api/auth.js`
- [HTTP client](https://github.com/sophistri/event-management/blob/main/client/src/api/client.js): `client/src/api/client.js`

### Express API

- [API application](https://github.com/sophistri/event-management/blob/main/server/src/app.js): `server/src/app.js`
- [Auth routes](https://github.com/sophistri/event-management/blob/main/server/src/routes/auth.routes.js): `server/src/routes/auth.routes.js`
- [Event routes](https://github.com/sophistri/event-management/blob/main/server/src/routes/event.routes.js): `server/src/routes/event.routes.js`
- [Personal routes](https://github.com/sophistri/event-management/blob/main/server/src/routes/me.routes.js): `server/src/routes/me.routes.js`
- [Session middleware](https://github.com/sophistri/event-management/blob/main/server/src/middleware/authenticate.js): `server/src/middleware/authenticate.js`
- [Auth controller](https://github.com/sophistri/event-management/blob/main/server/src/controllers/auth.controller.js): `server/src/controllers/auth.controller.js`
- [Event controller](https://github.com/sophistri/event-management/blob/main/server/src/controllers/event.controller.js): `server/src/controllers/event.controller.js`
- [Attendance controller](https://github.com/sophistri/event-management/blob/main/server/src/controllers/attendance.controller.js): `server/src/controllers/attendance.controller.js`
- [Dashboard controller](https://github.com/sophistri/event-management/blob/main/server/src/controllers/me.controller.js): `server/src/controllers/me.controller.js`
- [Auth service](https://github.com/sophistri/event-management/blob/main/server/src/services/auth.service.js): `server/src/services/auth.service.js`

### MongoDB data

- [User records](https://github.com/sophistri/event-management/blob/main/server/src/models/User.js): `server/src/models/User.js`
- [Event records](https://github.com/sophistri/event-management/blob/main/server/src/models/Event.js): `server/src/models/Event.js`
- [Attendance records](https://github.com/sophistri/event-management/blob/main/server/src/models/Attendance.js): `server/src/models/Attendance.js`

### Other components

- **Visitor**
- **MongoDB**

## Connections

- Visitor → Client app: uses
- Client app → Page routes: renders (evidence: `client/src/App.jsx`)
- Client app → Auth state: provides auth (evidence: `client/src/App.jsx`)
- Page routes → Login and signup: routes to (evidence: `client/src/AppRoutes/AppRoutes.jsx`)
- Page routes → Home page: routes to (evidence: `client/src/AppRoutes/AppRoutes.jsx`)
- Page routes → Event browsing: routes to (evidence: `client/src/AppRoutes/AppRoutes.jsx`)
- Page routes → Event details: routes to (evidence: `client/src/AppRoutes/AppRoutes.jsx`)
- Page routes → Event editor: routes to (evidence: `client/src/AppRoutes/AppRoutes.jsx`)
- Page routes → User dashboards: routes to (evidence: `client/src/AppRoutes/AppRoutes.jsx`)
- Login and signup → Auth state: uses auth (evidence: `client/src/pages/Login/Login.jsx`)
- Auth state → Auth API client: calls (evidence: `client/src/context/AuthContext.jsx`)
- Auth hook → Auth state: reads context (evidence: `client/src/hooks/useAuth.js`)
- Event browsing → Event API client: requests events
- Event details → Event API client: requests details (evidence: `client/src/pages/Events/EventDetailPage.jsx`)
- Event editor → Event API client: submits changes (evidence: `client/src/pages/Events/EventFormPage.jsx`)
- User dashboards → Event API client: requests dashboard data (evidence: `client/src/pages/Dashboard/AnalyticsPage.jsx`)
- Home page → Event API client: requests events (evidence: `client/src/pages/Home/Home.jsx`)
- Event API client → HTTP client: sends requests (evidence: `client/src/api/events.js`)
- Auth API client → HTTP client: sends requests (evidence: `client/src/api/auth.js`)
- HTTP client → API application: HTTP requests
- API application → Auth routes: mounts routes (evidence: `server/src/app.js`)
- API application → Event routes: mounts routes (evidence: `server/src/app.js`)
- API application → Personal routes: mounts routes (evidence: `server/src/app.js`)
- Auth routes → Auth controller: dispatches (evidence: `server/src/routes/auth.routes.js`)
- Auth routes → Session middleware: protects profile route (evidence: `server/src/routes/auth.routes.js`)
- Event routes → Event controller: dispatches (evidence: `server/src/routes/event.routes.js`)
- Event routes → Attendance controller: dispatches (evidence: `server/src/routes/event.routes.js`)
- Event routes → Session middleware: protects routes (evidence: `server/src/routes/event.routes.js`)
- Personal routes → Dashboard controller: dispatches (evidence: `server/src/routes/me.routes.js`)
- Personal routes → Session middleware: protects routes (evidence: `server/src/routes/me.routes.js`)
- Auth controller → User records: reads and writes (evidence: `server/src/controllers/auth.controller.js`)
- Auth controller → Auth service: uses password and token helpers (evidence: `server/src/controllers/auth.controller.js`)
- Event controller → Event records: reads and writes (evidence: `server/src/controllers/event.controller.js`)
- Event controller → Attendance records: reads registrations (evidence: `server/src/controllers/event.controller.js`)
- Attendance controller → Event records: reads event (evidence: `server/src/controllers/attendance.controller.js`)
- Attendance controller → Attendance records: manages registrations (evidence: `server/src/controllers/attendance.controller.js`)
- Dashboard controller → Event records: reads events (evidence: `server/src/controllers/me.controller.js`)
- Dashboard controller → Attendance records: reads registrations (evidence: `server/src/controllers/me.controller.js`)
- User records → MongoDB: persisted in
- Event records → MongoDB: persisted in
- Attendance records → MongoDB: persisted in
