# thanuj-imayavaramban31/class-attendance architecture

> Architecture diagram of the GitHub repository thanuj-imayavaramban31/class-attendance, 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/thanuj-imayavaramban31/class-attendance
- Repository: https://github.com/thanuj-imayavaramban31/class-attendance

## Overview

This is a MERN class-attendance system. Students request access, a Head approves them and creates department classes, and Security scans student QR codes to record entry and exit; students and the Head can review attendance. The graph separates the React role workflows from Express API handling and MongoDB-backed domain records. README-described capabilities are included where the tree supports them; several frontend API call details were not sampled, so those links are omitted.

Main entry points: [`frontend/src/App.jsx`](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/App.jsx) (Role routing), [`backend/controllers/headController.js`](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/headController.js) (Administration), [`backend/controllers/securityController.js`](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/securityController.js) (Scan processing), [`backend/server.js`](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/server.js) (Express server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["Role routing<br/>[App.jsx]"]
  node_registration["Registration<br/>[SignIn.jsx]"]
  node_access_request["Access request<br/>[RequestAccess.jsx]"]
  node_login["Sign-in<br/>[Login.jsx]"]
  node_head_dashboard["Head dashboard<br/>[HeadDashboard.jsx]"]
  node_security_dashboard["Security dashboard"]
  node_qr_scanner["QR scanner<br/>[QRScanner.jsx]"]
  node_user_dashboard["Student dashboard<br/>[UserDashboard.jsx]"]
  node_attendance_table["Attendance views"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["API and access"]
  node_server["Express server<br/>[server.js]"]
  node_user_routes["User routes<br/>[userRoutes.js]"]
  node_head_routes["Head routes<br/>[headRoutes.js]"]
  node_security_routes["Security routes<br/>[securityRoutes.js]"]
  node_auth["JWT guard<br/>[auth.js]"]
end

subgraph group_domain["Attendance domain"]
  node_request_controller["Registration handling"]
  node_user_controller["Student access<br/>[userController.js]"]
  node_head_controller["Administration<br/>[headController.js]"]
  node_security_controller["Scan processing"]
  node_qr_generator["QR generation<br/>[qrGenerator.js]"]
  node_time_calculator["Duration calculation<br/>[timeCalculator.js]"]
end

subgraph group_storage["Persistence"]
  node_db_config["Database connection<br/>[db.js]"]
  node_request_model[("Access requests<br/>[Request.js]")]
  node_user_model[("Students<br/>[User.js]")]
  node_head_model[("Head credentials<br/>[Head.js]")]
  node_security_model[("Security credentials<br/>[Security.js]")]
  node_class_model[("Classes<br/>[Class.js]")]
  node_attendance_model[("Attendance records<br/>[Attendance.js]")]
end

node_student(("Student"))
node_head_actor(("Head"))
node_security_actor(("Security"))
node_mongo[("MongoDB")]

node_student -->|"uses"| node_app
node_head_actor -->|"uses"| node_app
node_security_actor -->|"uses"| node_app
node_app -->|"routes"| node_registration
node_app -->|"routes"| node_login
node_app -->|"routes"| node_head_dashboard
node_app -->|"routes"| node_security_dashboard
node_app -->|"routes"| node_user_dashboard
node_student -->|"requests access"| node_access_request
node_security_actor -->|"scans QR"| node_qr_scanner
node_head_dashboard -->|"views records"| node_attendance_table
node_user_dashboard -->|"views history"| node_attendance_table
node_server -->|"connects"| node_db_config
node_db_config -->|"connects"| node_mongo
node_server -->|"mounts"| node_user_routes
node_server -->|"mounts"| node_head_routes
node_server -->|"mounts"| node_security_routes
node_user_routes -->|"dispatches"| node_request_controller
node_user_routes -->|"dispatches"| node_user_controller
node_head_routes -->|"dispatches"| node_head_controller
node_security_routes -->|"dispatches"| node_security_controller
node_head_routes -->|"guards"| node_auth
node_user_routes -->|"guards"| node_auth
node_request_controller -->|"creates"| node_request_model
node_user_controller -->|"authenticates"| node_user_model
node_user_controller -->|"reads"| node_attendance_model
node_head_controller -->|"reviews"| node_request_model
node_head_controller -->|"creates and queries"| node_user_model
node_head_controller -->|"generates QR"| node_qr_generator
node_head_controller -->|"creates and queries"| node_class_model
node_head_controller -->|"queries"| node_attendance_model
node_head_controller -->|"authenticates"| node_head_model
node_security_controller -->|"authenticates"| node_security_model
node_security_controller -->|"looks up"| node_user_model
node_security_controller -->|"finds active class"| node_class_model
node_security_controller -->|"records scans"| node_attendance_model
node_security_controller -->|"calculates duration"| node_time_calculator

click node_app "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/App.jsx"
click node_registration "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/SignIn.jsx"
click node_access_request "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/RequestAccess.jsx"
click node_login "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/Login.jsx"
click node_head_dashboard "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/HeadDashboard.jsx"
click node_security_dashboard "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/SecurityDashboard.jsx"
click node_qr_scanner "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/components/QRScanner.jsx"
click node_user_dashboard "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/UserDashboard.jsx"
click node_attendance_table "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/components/AttendanceTable.jsx"
click node_api_client "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/context/api.js"
click node_server "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/server.js"
click node_user_routes "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/routes/userRoutes.js"
click node_head_routes "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/routes/headRoutes.js"
click node_security_routes "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/routes/securityRoutes.js"
click node_auth "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/middlewares/auth.js"
click node_request_controller "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/requestController.js"
click node_user_controller "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/userController.js"
click node_head_controller "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/headController.js"
click node_security_controller "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/securityController.js"
click node_qr_generator "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/middlewares/qrGenerator.js"
click node_time_calculator "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/middlewares/timeCalculator.js"
click node_db_config "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/config/db.js"
click node_request_model "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Request.js"
click node_user_model "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/User.js"
click node_head_model "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Head.js"
click node_security_model "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Security.js"
click node_class_model "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Class.js"
click node_attendance_model "https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/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_registration,node_access_request,node_login,node_head_dashboard,node_security_dashboard,node_qr_scanner,node_user_dashboard,node_attendance_table,node_api_client toneBlue
class node_server,node_user_routes,node_head_routes,node_security_routes,node_auth,node_mongo toneAmber
class node_request_controller,node_user_controller,node_head_controller,node_security_controller,node_qr_generator,node_time_calculator toneMint
class node_db_config,node_request_model,node_user_model,node_head_model,node_security_model,node_class_model,node_attendance_model toneRose
class node_student,node_head_actor,node_security_actor toneIndigo
```

## Components

### Web application

- [Role routing](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Registration](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/SignIn.jsx): `frontend/src/pages/SignIn.jsx`
- [Access request](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/RequestAccess.jsx): `frontend/src/pages/RequestAccess.jsx`
- [Sign-in](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/Login.jsx): `frontend/src/pages/Login.jsx`
- [Head dashboard](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/HeadDashboard.jsx): `frontend/src/pages/HeadDashboard.jsx`
- [Security dashboard](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/SecurityDashboard.jsx): `frontend/src/pages/SecurityDashboard.jsx`
- [QR scanner](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/components/QRScanner.jsx): `frontend/src/components/QRScanner.jsx`
- [Student dashboard](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/pages/UserDashboard.jsx): `frontend/src/pages/UserDashboard.jsx`
- [Attendance views](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/components/AttendanceTable.jsx): `frontend/src/components/AttendanceTable.jsx`
- [API client](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/frontend/src/context/api.js): `frontend/src/context/api.js`

### API and access

- [Express server](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/server.js): `backend/server.js`
- [User routes](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/routes/userRoutes.js): `backend/routes/userRoutes.js`
- [Head routes](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/routes/headRoutes.js): `backend/routes/headRoutes.js`
- [Security routes](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/routes/securityRoutes.js): `backend/routes/securityRoutes.js`
- [JWT guard](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/middlewares/auth.js): `backend/middlewares/auth.js`

### Attendance domain

- [Registration handling](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/requestController.js): `backend/controllers/requestController.js`
- [Student access](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/userController.js): `backend/controllers/userController.js`
- [Administration](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/headController.js): `backend/controllers/headController.js`
- [Scan processing](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/controllers/securityController.js): `backend/controllers/securityController.js`
- [QR generation](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/middlewares/qrGenerator.js): `backend/middlewares/qrGenerator.js`
- [Duration calculation](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/middlewares/timeCalculator.js): `backend/middlewares/timeCalculator.js`

### Persistence

- [Database connection](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/config/db.js): `backend/config/db.js`
- [Access requests](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Request.js): `backend/models/Request.js`
- [Students](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/User.js): `backend/models/User.js`
- [Head credentials](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Head.js): `backend/models/Head.js`
- [Security credentials](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Security.js): `backend/models/Security.js`
- [Classes](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Class.js): `backend/models/Class.js`
- [Attendance records](https://github.com/thanuj-imayavaramban31/class-attendance/blob/main/backend/models/Attendance.js): `backend/models/Attendance.js`

### Other components

- **Student**
- **Head**
- **Security**
- **MongoDB**

## Connections

- Student → Role routing: uses
- Head → Role routing: uses
- Security → Role routing: uses
- Role routing → Registration: routes
- Role routing → Sign-in: routes
- Role routing → Head dashboard: routes
- Role routing → Security dashboard: routes
- Role routing → Student dashboard: routes
- Student → Access request: requests access
- Security → QR scanner: scans QR
- Head dashboard → Attendance views: views records
- Student dashboard → Attendance views: views history
- Express server → Database connection: connects
- Database connection → MongoDB: connects
- Express server → User routes: mounts
- Express server → Head routes: mounts
- Express server → Security routes: mounts
- User routes → Registration handling: dispatches
- User routes → Student access: dispatches
- Head routes → Administration: dispatches
- Security routes → Scan processing: dispatches
- Head routes → JWT guard: guards
- User routes → JWT guard: guards
- Registration handling → Access requests: creates
- Student access → Students: authenticates
- Student access → Attendance records: reads
- Administration → Access requests: reviews
- Administration → Students: creates and queries
- Administration → QR generation: generates QR
- Administration → Classes: creates and queries
- Administration → Attendance records: queries
- Administration → Head credentials: authenticates
- Scan processing → Security credentials: authenticates
- Scan processing → Students: looks up
- Scan processing → Classes: finds active class
- Scan processing → Attendance records: records scans
- Scan processing → Duration calculation: calculates duration
