# abhishek-verse/campus-connect architecture

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

- Interactive diagram: https://gitdiagram.com/abhishek-verse/campus-connect
- Repository: https://github.com/abhishek-verse/campus-connect

## Overview

CampusHub is a college event and attendance platform. Students create accounts, discover events, register, and use a permanent QR pass; club organizers manage events and registrations, scan attendees, and export attendance. The graph shows the documented portals and API route-to-controller flow, plus the sampled business-service and persistence layers. Several frontend screens and the QR scanner implementation are not present in the supplied tree, so those capabilities are represented at the frontend directory level; their internal calls are not inferred.

Main entry points: [`backend/src/app.js`](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/app.js) (Express app), [`backend/src/config/database.js`](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/config/database.js) (Prisma client), [`backend/src/middleware/auth.middleware.js`](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/middleware/auth.middleware.js) (Authentication and roles), [`frontend/js`](https://github.com/abhishek-verse/campus-connect/tree/main/frontend/js) (Student and club portal)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Portals"]
  node_frontend["Student and club portal"]
  node_api_client["API client<br/>[client.js]"]
  node_pwa["PWA support<br/>[pwa.js]"]
end

subgraph group_api["API and access"]
  node_app["Express app<br/>[app.js]"]
  node_auth_routes["Authentication routes<br/>[auth.routes.js]"]
  node_student_routes["Student routes<br/>[student.routes.js]"]
  node_event_routes["Event routes<br/>[event.routes.js]"]
  node_registration_routes["Registration routes"]
  node_attendance_routes["Attendance routes"]
  node_notice_routes["Notice routes<br/>[notice.routes.js]"]
  node_auth_access["Authentication and roles<br/>[auth.middleware.js]"]
end

subgraph group_events["Event operations"]
  node_event_controller["Event management"]
  node_registration_controller["Registration management"]
  node_attendance_controller["Attendance and export"]
  node_notice_controller["Notices"]
  node_event_service["Event rules<br/>[event.service.js]"]
  node_registration_service["Registration rules"]
  node_attendance_service["Check-in rules"]
  node_export_service["Attendance exports<br/>[export.service.js]"]
  node_notice_service["Notice rules<br/>[notice.service.js]"]
end

subgraph group_identity["Student identity"]
  node_student_controller["Student profile and history"]
  node_auth_controller["Account access<br/>[auth.controller.js]"]
  node_auth_service["Identity and QR pass<br/>[auth.service.js]"]
  node_qr_service["QR token generation<br/>[qr.service.js]"]
end

subgraph group_platform["Persistence and reporting"]
  node_prisma["Prisma client<br/>[database.js]"]
  node_postgres[("PostgreSQL")]
end

node_student(("Student"))
node_organizer(("Club organizer"))

node_student -->|"uses"| node_frontend
node_organizer -->|"uses"| node_frontend
node_frontend -.->|"requests API"| node_api_client
node_frontend -.->|"uses PWA"| node_pwa
node_api_client -.->|"calls API"| node_app
node_app -->|"mounts"| node_auth_routes
node_app -->|"mounts"| node_student_routes
node_app -->|"mounts"| node_event_routes
node_app -->|"mounts"| node_registration_routes
node_app -->|"mounts"| node_attendance_routes
node_app -->|"mounts"| node_notice_routes
node_auth_routes -->|"routes to"| node_auth_controller
node_student_routes -->|"routes to"| node_student_controller
node_event_routes -->|"routes to"| node_event_controller
node_registration_routes -->|"routes to"| node_registration_controller
node_attendance_routes -->|"routes to"| node_attendance_controller
node_notice_routes -->|"routes to"| node_notice_controller
node_auth_routes -->|"authenticates"| node_auth_access
node_event_routes -->|"checks access"| node_auth_access
node_registration_routes -->|"checks access"| node_auth_access
node_attendance_routes -->|"checks access"| node_auth_access
node_notice_routes -->|"checks access"| node_auth_access
node_event_controller -->|"delegates"| node_event_service
node_registration_controller -->|"delegates"| node_registration_service
node_attendance_controller -->|"delegates"| node_attendance_service
node_attendance_controller -->|"exports records"| node_export_service
node_notice_controller -->|"delegates"| node_notice_service
node_student_controller -->|"gets profile"| node_auth_service
node_student_controller -->|"gets registrations"| node_registration_service
node_auth_controller -->|"delegates"| node_auth_service
node_auth_service -->|"generates token"| node_qr_service
node_auth_access -->|"loads user"| node_prisma
node_auth_service -->|"reads and writes"| node_prisma
node_event_service -->|"reads and writes"| node_prisma
node_registration_service -->|"reads and writes"| node_prisma
node_attendance_service -->|"reads and writes"| node_prisma
node_export_service -->|"reads records"| node_prisma
node_notice_service -->|"reads and writes"| node_prisma
node_prisma -.->|"queries"| node_postgres

click node_frontend "https://github.com/abhishek-verse/campus-connect/tree/main/frontend/js"
click node_api_client "https://github.com/abhishek-verse/campus-connect/blob/main/frontend/js/api/client.js"
click node_pwa "https://github.com/abhishek-verse/campus-connect/blob/main/frontend/js/utils/pwa.js"
click node_app "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/app.js"
click node_auth_routes "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/auth.routes.js"
click node_student_routes "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/student.routes.js"
click node_event_routes "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/event.routes.js"
click node_registration_routes "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/registration.routes.js"
click node_attendance_routes "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/attendance.routes.js"
click node_notice_routes "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/notice.routes.js"
click node_auth_access "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/middleware/auth.middleware.js"
click node_event_controller "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/event.controller.js"
click node_registration_controller "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/registration.controller.js"
click node_attendance_controller "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/attendance.controller.js"
click node_notice_controller "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/notice.controller.js"
click node_event_service "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/event.service.js"
click node_registration_service "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/registration.service.js"
click node_attendance_service "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/attendance.service.js"
click node_export_service "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/export.service.js"
click node_notice_service "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/notice.service.js"
click node_student_controller "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/student.controller.js"
click node_auth_controller "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/auth.controller.js"
click node_auth_service "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/auth.service.js"
click node_qr_service "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/qr.service.js"
click node_prisma "https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/config/database.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_frontend,node_api_client,node_pwa toneBlue
class node_app,node_auth_routes,node_student_routes,node_event_routes,node_registration_routes,node_attendance_routes,node_notice_routes,node_auth_access toneAmber
class node_event_controller,node_registration_controller,node_attendance_controller,node_notice_controller,node_event_service,node_registration_service,node_attendance_service,node_export_service,node_notice_service toneMint
class node_student_controller,node_auth_controller,node_auth_service,node_qr_service toneRose
class node_prisma,node_postgres,node_student,node_organizer toneIndigo
```

## Components

### Portals

- [Student and club portal](https://github.com/abhishek-verse/campus-connect/tree/main/frontend/js): `frontend/js`
- [API client](https://github.com/abhishek-verse/campus-connect/blob/main/frontend/js/api/client.js): `frontend/js/api/client.js`
- [PWA support](https://github.com/abhishek-verse/campus-connect/blob/main/frontend/js/utils/pwa.js): `frontend/js/utils/pwa.js`

### API and access

- [Express app](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/app.js): `backend/src/app.js`
- [Authentication routes](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/auth.routes.js): `backend/src/routes/auth.routes.js`
- [Student routes](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/student.routes.js): `backend/src/routes/student.routes.js`
- [Event routes](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/event.routes.js): `backend/src/routes/event.routes.js`
- [Registration routes](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/registration.routes.js): `backend/src/routes/registration.routes.js`
- [Attendance routes](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/attendance.routes.js): `backend/src/routes/attendance.routes.js`
- [Notice routes](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/routes/notice.routes.js): `backend/src/routes/notice.routes.js`
- [Authentication and roles](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/middleware/auth.middleware.js): `backend/src/middleware/auth.middleware.js`

### Event operations

- [Event management](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/event.controller.js): `backend/src/controllers/event.controller.js`
- [Registration management](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/registration.controller.js): `backend/src/controllers/registration.controller.js`
- [Attendance and export](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/attendance.controller.js): `backend/src/controllers/attendance.controller.js`
- [Notices](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/notice.controller.js): `backend/src/controllers/notice.controller.js`
- [Event rules](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/event.service.js): `backend/src/services/event.service.js`
- [Registration rules](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/registration.service.js): `backend/src/services/registration.service.js`
- [Check-in rules](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/attendance.service.js): `backend/src/services/attendance.service.js`
- [Attendance exports](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/export.service.js): `backend/src/services/export.service.js`
- [Notice rules](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/notice.service.js): `backend/src/services/notice.service.js`

### Student identity

- [Student profile and history](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/student.controller.js): `backend/src/controllers/student.controller.js`
- [Account access](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/controllers/auth.controller.js): `backend/src/controllers/auth.controller.js`
- [Identity and QR pass](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/auth.service.js): `backend/src/services/auth.service.js`
- [QR token generation](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/services/qr.service.js): `backend/src/services/qr.service.js`

### Persistence and reporting

- [Prisma client](https://github.com/abhishek-verse/campus-connect/blob/main/backend/src/config/database.js): `backend/src/config/database.js`
- **PostgreSQL**

### Other components

- **Student**
- **Club organizer**

## Connections

- Student → Student and club portal: uses (evidence: `README.md`)
- Club organizer → Student and club portal: uses (evidence: `README.md`)
- Student and club portal → API client: requests API
- Student and club portal → PWA support: uses PWA (evidence: `frontend/js/utils/navigation.js`)
- API client → Express app: calls API
- Express app → Authentication routes: mounts (evidence: `backend/src/app.js`)
- Express app → Student routes: mounts (evidence: `backend/src/app.js`)
- Express app → Event routes: mounts (evidence: `backend/src/app.js`)
- Express app → Registration routes: mounts (evidence: `backend/src/app.js`)
- Express app → Attendance routes: mounts (evidence: `backend/src/app.js`)
- Express app → Notice routes: mounts (evidence: `backend/src/app.js`)
- Authentication routes → Account access: routes to (evidence: `backend/src/routes/auth.routes.js`)
- Student routes → Student profile and history: routes to (evidence: `backend/src/routes/student.routes.js`)
- Event routes → Event management: routes to (evidence: `backend/src/routes/event.routes.js`)
- Registration routes → Registration management: routes to (evidence: `backend/src/routes/registration.routes.js`)
- Attendance routes → Attendance and export: routes to (evidence: `backend/src/routes/attendance.routes.js`)
- Notice routes → Notices: routes to (evidence: `backend/src/routes/notice.routes.js`)
- Authentication routes → Authentication and roles: authenticates (evidence: `backend/src/routes/auth.routes.js`)
- Event routes → Authentication and roles: checks access (evidence: `backend/src/routes/event.routes.js`)
- Registration routes → Authentication and roles: checks access (evidence: `backend/src/routes/registration.routes.js`)
- Attendance routes → Authentication and roles: checks access (evidence: `backend/src/routes/attendance.routes.js`)
- Notice routes → Authentication and roles: checks access (evidence: `backend/src/routes/notice.routes.js`)
- Event management → Event rules: delegates (evidence: `backend/src/controllers/event.controller.js`)
- Registration management → Registration rules: delegates (evidence: `backend/src/controllers/registration.controller.js`)
- Attendance and export → Check-in rules: delegates (evidence: `backend/src/controllers/attendance.controller.js`)
- Attendance and export → Attendance exports: exports records (evidence: `backend/src/controllers/attendance.controller.js`)
- Notices → Notice rules: delegates (evidence: `backend/src/controllers/notice.controller.js`)
- Student profile and history → Identity and QR pass: gets profile (evidence: `backend/src/controllers/student.controller.js`)
- Student profile and history → Registration rules: gets registrations (evidence: `backend/src/controllers/student.controller.js`)
- Account access → Identity and QR pass: delegates (evidence: `backend/src/controllers/auth.controller.js`)
- Identity and QR pass → QR token generation: generates token (evidence: `backend/src/services/auth.service.js`)
- Authentication and roles → Prisma client: loads user (evidence: `backend/src/middleware/auth.middleware.js`)
- Identity and QR pass → Prisma client: reads and writes (evidence: `backend/src/services/auth.service.js`)
- Event rules → Prisma client: reads and writes (evidence: `backend/src/services/event.service.js`)
- Registration rules → Prisma client: reads and writes (evidence: `backend/src/services/registration.service.js`)
- Check-in rules → Prisma client: reads and writes (evidence: `backend/src/services/attendance.service.js`)
- Attendance exports → Prisma client: reads records (evidence: `backend/src/services/export.service.js`)
- Notice rules → Prisma client: reads and writes (evidence: `backend/src/services/notice.service.js`)
- Prisma client → PostgreSQL: queries
