# ericson-999/qr-event-attendance-system architecture

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

- Interactive diagram: https://gitdiagram.com/ericson-999/qr-event-attendance-system
- Repository: https://github.com/ericson-999/qr-event-attendance-system

## Overview

QR Attendance System is an admin-managed web app with public student self-registration. Its main workflow is: register a student and issue a signed QR; create and start an event; scan and verify the QR, show the student for admin confirmation, and record time-in or time-out; then review attendance and export reports. The graph preserves the documented admin registration, event scheduling, dashboard, and retrieval capabilities. Backend wiring and several route-to-model/helper relationships are supported by the source index; frontend-to-API details are not shown in the excerpts, so those links are omitted.

Main entry points: [`server.js`](https://github.com/ericson-999/qr-event-attendance-system/blob/main/server.js) (Express app), [`routes/scan.js`](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/scan.js) (Scan verification), [`routes/attendanceExport.js`](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/attendanceExport.js) (Attendance export), [`routes/attendance.js`](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/attendance.js) (Attendance queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web experience"]
  node_registration_ui["Student registration<br/>[join.js]"]
  node_admin_registration_ui["Admin registration<br/>[register.js]"]
  node_login_ui["Admin login<br/>[login.html]"]
  node_events_ui["Event controls<br/>[events.js]"]
  node_scan_ui["QR scanning<br/>[scan.js]"]
  node_dashboard_ui["Attendance dashboard<br/>[dashboard.js]"]
  node_export_ui["Document export<br/>[export-doc.js]"]
end

subgraph group_identity["Student identity"]
  node_student_routes["Student management<br/>[students.js]"]
  node_public_routes["Public registration<br/>[public.js]"]
  node_student_model[("Student records<br/>[Student.js]")]
  node_qr_tokens["Signed QR tokens<br/>[qrToken.js]"]
end

subgraph group_events["Events and scanning"]
  node_event_routes["Event management<br/>[events.js]"]
  node_event_model[("Event records<br/>[Event.js]")]
  node_event_time["Event scheduling<br/>[eventTime.js]"]
  node_scan_routes["Scan verification<br/>[scan.js]"]
end

subgraph group_attendance["Attendance and reporting"]
  node_attendance_routes["Attendance queries<br/>[attendance.js]"]
  node_export_routes["Attendance export"]
  node_attendance_rules["Attendance rules<br/>[attendanceRules.js]"]
  node_attendance_doc["Word report builder<br/>[attendanceDoc.js]"]
  node_attendance_model[("Attendance records<br/>[Attendance.js]")]
end

subgraph group_runtime["Application runtime"]
  node_app_server["Express app<br/>[server.js]"]
  node_auth_routes["Login sessions<br/>[auth.js]"]
  node_auth_guard["Admin route guard<br/>[auth.js]"]
  node_mongo[("MongoDB")]
end

node_admin(("Administrator"))
node_student(("Student"))

node_admin -->|"signs in"| node_login_ui
node_student -->|"registers"| node_registration_ui
node_admin -->|"registers students"| node_admin_registration_ui
node_admin -->|"manages events"| node_events_ui
node_admin -->|"scans QR"| node_scan_ui
node_admin -->|"reviews attendance"| node_dashboard_ui
node_app_server -->|"mounts"| node_auth_routes
node_app_server -->|"mounts"| node_student_routes
node_app_server -->|"mounts"| node_event_routes
node_app_server -->|"mounts"| node_scan_routes
node_app_server -->|"mounts"| node_attendance_routes
node_app_server -->|"mounts"| node_export_routes
node_app_server -->|"mounts"| node_public_routes
node_app_server -->|"connects"| node_mongo
node_student_routes -->|"guards routes"| node_auth_guard
node_student_routes -->|"reads and writes"| node_student_model
node_student_routes -->|"generates tokens"| node_qr_tokens
node_public_routes -->|"uses records"| node_student_model
node_public_routes -->|"issues tokens"| node_qr_tokens
node_scan_routes -->|"guards routes"| node_auth_guard
node_scan_routes -->|"verifies tokens"| node_qr_tokens
node_scan_routes -->|"looks up student"| node_student_model
node_scan_routes -->|"finds active event"| node_event_model
node_scan_routes -->|"reads and records"| node_attendance_model
node_scan_routes -->|"evaluates scans"| node_attendance_rules
node_scan_routes -->|"serializes event"| node_event_time
node_event_routes -->|"guards routes"| node_auth_guard
node_event_routes -->|"manages records"| node_event_model
node_event_routes -->|"parses schedules"| node_event_time
node_attendance_routes -->|"guards routes"| node_auth_guard
node_attendance_routes -->|"reads records"| node_attendance_model
node_attendance_routes -->|"uses student data"| node_student_model
node_attendance_routes -->|"builds categories"| node_attendance_rules
node_export_routes -->|"guards routes"| node_auth_guard
node_export_routes -->|"reads records"| node_attendance_model
node_export_routes -->|"uses student data"| node_student_model
node_export_routes -->|"reads event"| node_event_model
node_export_routes -->|"categorizes attendance"| node_attendance_rules
node_export_routes -->|"builds document"| node_attendance_doc

click node_registration_ui "https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/join.js"
click node_admin_registration_ui "https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/register.js"
click node_login_ui "https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/login.html"
click node_events_ui "https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/events.js"
click node_scan_ui "https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/scan.js"
click node_dashboard_ui "https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/dashboard.js"
click node_export_ui "https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/export-doc.js"
click node_app_server "https://github.com/ericson-999/qr-event-attendance-system/blob/main/server.js"
click node_auth_routes "https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/auth.js"
click node_auth_guard "https://github.com/ericson-999/qr-event-attendance-system/blob/main/middleware/auth.js"
click node_student_routes "https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/students.js"
click node_public_routes "https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/public.js"
click node_student_model "https://github.com/ericson-999/qr-event-attendance-system/blob/main/models/Student.js"
click node_qr_tokens "https://github.com/ericson-999/qr-event-attendance-system/blob/main/utils/qrToken.js"
click node_event_routes "https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/events.js"
click node_event_model "https://github.com/ericson-999/qr-event-attendance-system/blob/main/models/Event.js"
click node_event_time "https://github.com/ericson-999/qr-event-attendance-system/blob/main/utils/eventTime.js"
click node_scan_routes "https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/scan.js"
click node_attendance_routes "https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/attendance.js"
click node_export_routes "https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/attendanceExport.js"
click node_attendance_rules "https://github.com/ericson-999/qr-event-attendance-system/blob/main/utils/attendanceRules.js"
click node_attendance_doc "https://github.com/ericson-999/qr-event-attendance-system/blob/main/utils/attendanceDoc.js"
click node_attendance_model "https://github.com/ericson-999/qr-event-attendance-system/blob/main/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_registration_ui,node_admin_registration_ui,node_login_ui,node_events_ui,node_scan_ui,node_dashboard_ui,node_export_ui toneBlue
class node_student_routes,node_public_routes,node_student_model,node_qr_tokens toneAmber
class node_event_routes,node_event_model,node_event_time,node_scan_routes toneMint
class node_attendance_routes,node_export_routes,node_attendance_rules,node_attendance_doc,node_attendance_model toneRose
class node_app_server,node_auth_routes,node_auth_guard,node_mongo,node_admin,node_student toneIndigo
```

## Components

### Web experience

- [Student registration](https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/join.js): `public/js/join.js`
- [Admin registration](https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/register.js): `public/js/register.js`
- [Admin login](https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/login.html): `public/login.html`
- [Event controls](https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/events.js): `public/js/events.js`
- [QR scanning](https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/scan.js): `public/js/scan.js`
- [Attendance dashboard](https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/dashboard.js): `public/js/dashboard.js`
- [Document export](https://github.com/ericson-999/qr-event-attendance-system/blob/main/public/js/export-doc.js): `public/js/export-doc.js`

### Student identity

- [Student management](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/students.js): `routes/students.js`
- [Public registration](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/public.js): `routes/public.js`
- [Student records](https://github.com/ericson-999/qr-event-attendance-system/blob/main/models/Student.js): `models/Student.js`
- [Signed QR tokens](https://github.com/ericson-999/qr-event-attendance-system/blob/main/utils/qrToken.js): `utils/qrToken.js`

### Events and scanning

- [Event management](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/events.js): `routes/events.js`
- [Event records](https://github.com/ericson-999/qr-event-attendance-system/blob/main/models/Event.js): `models/Event.js`
- [Event scheduling](https://github.com/ericson-999/qr-event-attendance-system/blob/main/utils/eventTime.js): `utils/eventTime.js`
- [Scan verification](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/scan.js): `routes/scan.js`

### Attendance and reporting

- [Attendance queries](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/attendance.js): `routes/attendance.js`
- [Attendance export](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/attendanceExport.js): `routes/attendanceExport.js`
- [Attendance rules](https://github.com/ericson-999/qr-event-attendance-system/blob/main/utils/attendanceRules.js): `utils/attendanceRules.js`
- [Word report builder](https://github.com/ericson-999/qr-event-attendance-system/blob/main/utils/attendanceDoc.js): `utils/attendanceDoc.js`
- [Attendance records](https://github.com/ericson-999/qr-event-attendance-system/blob/main/models/Attendance.js): `models/Attendance.js`

### Application runtime

- [Express app](https://github.com/ericson-999/qr-event-attendance-system/blob/main/server.js): `server.js`
- [Login sessions](https://github.com/ericson-999/qr-event-attendance-system/blob/main/routes/auth.js): `routes/auth.js`
- [Admin route guard](https://github.com/ericson-999/qr-event-attendance-system/blob/main/middleware/auth.js): `middleware/auth.js`
- **MongoDB**

### Other components

- **Administrator**
- **Student**

## Connections

- Administrator → Admin login: signs in (evidence: `README.md`)
- Student → Student registration: registers (evidence: `README.md`)
- Administrator → Admin registration: registers students (evidence: `README.md`)
- Administrator → Event controls: manages events (evidence: `README.md`)
- Administrator → QR scanning: scans QR (evidence: `README.md`)
- Administrator → Attendance dashboard: reviews attendance (evidence: `README.md`)
- Express app → Login sessions: mounts (evidence: `server.js`)
- Express app → Student management: mounts (evidence: `server.js`)
- Express app → Event management: mounts (evidence: `server.js`)
- Express app → Scan verification: mounts (evidence: `server.js`)
- Express app → Attendance queries: mounts (evidence: `server.js`)
- Express app → Attendance export: mounts (evidence: `server.js`)
- Express app → Public registration: mounts (evidence: `server.js`)
- Express app → MongoDB: connects (evidence: `server.js`)
- Student management → Admin route guard: guards routes (evidence: `routes/students.js`)
- Student management → Student records: reads and writes (evidence: `routes/students.js`)
- Student management → Signed QR tokens: generates tokens (evidence: `routes/students.js`)
- Public registration → Student records: uses records (evidence: `routes/public.js`)
- Public registration → Signed QR tokens: issues tokens (evidence: `routes/public.js`)
- Scan verification → Admin route guard: guards routes (evidence: `routes/scan.js`)
- Scan verification → Signed QR tokens: verifies tokens (evidence: `routes/scan.js`)
- Scan verification → Student records: looks up student (evidence: `routes/scan.js`)
- Scan verification → Event records: finds active event (evidence: `routes/scan.js`)
- Scan verification → Attendance records: reads and records (evidence: `routes/scan.js`)
- Scan verification → Attendance rules: evaluates scans (evidence: `routes/scan.js`)
- Scan verification → Event scheduling: serializes event (evidence: `routes/scan.js`)
- Event management → Admin route guard: guards routes (evidence: `routes/events.js`)
- Event management → Event records: manages records (evidence: `routes/events.js`)
- Event management → Event scheduling: parses schedules (evidence: `routes/events.js`)
- Attendance queries → Admin route guard: guards routes (evidence: `routes/attendance.js`)
- Attendance queries → Attendance records: reads records (evidence: `routes/attendance.js`)
- Attendance queries → Student records: uses student data (evidence: `routes/attendance.js`)
- Attendance queries → Attendance rules: builds categories (evidence: `routes/attendance.js`)
- Attendance export → Admin route guard: guards routes (evidence: `routes/attendanceExport.js`)
- Attendance export → Attendance records: reads records (evidence: `routes/attendanceExport.js`)
- Attendance export → Student records: uses student data (evidence: `routes/attendanceExport.js`)
- Attendance export → Event records: reads event (evidence: `routes/attendanceExport.js`)
- Attendance export → Attendance rules: categorizes attendance (evidence: `routes/attendanceExport.js`)
- Attendance export → Word report builder: builds document (evidence: `routes/attendanceExport.js`)
