# rajput-itself/poonaexam architecture

> Architecture diagram of the GitHub repository rajput-itself/poonaexam, 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/rajput-itself/poonaexam
- Repository: https://github.com/rajput-itself/poonaexam

## Overview

PoonaExam is a modular web platform for authoring, delivering, supervising, and evaluating MCQ examinations. Faculty build question banks and exams; students authenticate, start an exam, save answers, and submit; results and analytics follow, while proctors monitor live sessions and security events. The React client uses the Express API, with Socket.IO documented for real-time proctoring and Prisma for relational persistence. The README documents several capabilities whose implementation details were not sampled, so those links are shown at subsystem level; source excerpts confirm selected controller-to-service and client-to-API calls.

Main entry points: [`backend/src/routes/index.ts`](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/routes/index.ts) (API routes), [`frontend/src/app/router/index.tsx`](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/app/router/index.tsx) (App router), [`frontend/src/services/api.ts`](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/services/api.ts) (API client), [`backend/src/config/prisma.ts`](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/config/prisma.ts) (Relational database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web application"]
  node_spa["React application<br/>[App.tsx]"]
  node_router["App router<br/>[index.tsx]"]
  node_authui["Sign-in and registration<br/>[LoginPage.tsx]"]
  node_examui["Exam authoring<br/>[ExamWizard.tsx]"]
  node_questionui["Question banks"]
  node_importui["Question import<br/>[ImportModal.tsx]"]
  node_activeexam["Active exam engine"]
  node_resultui["Results view<br/>[ExamResultView.tsx]"]
  node_monitorui["Live proctor monitor"]
  node_analyticsui["Analytics dashboard<br/>[ExamAnalytics.tsx]"]
  node_superui["Institute subscriptions"]
  node_api["API client<br/>[api.ts]"]
end

subgraph group_assessment["Assessment workflow"]
  node_questions["Question management<br/>[controller.ts]"]
  node_banks["Question banks<br/>[controller.ts]"]
  node_imports["Import ingestion<br/>[controller.ts]"]
  node_exams["Exam management<br/>[controller.ts]"]
  node_attempts["Exam attempts<br/>[controller.ts]"]
  node_evaluation["Evaluation engine<br/>[service.ts]"]
  node_results["Results service<br/>[controller.ts]"]
end

subgraph group_operations["Security and operations"]
  node_security["Security incidents<br/>[controller.ts]"]
  node_sockets["Proctoring sockets<br/>[index.ts]"]
  node_monitoring["Session monitoring<br/>[controller.ts]"]
  node_audit["Audit trail<br/>[controller.ts]"]
  node_analytics["Exam analytics<br/>[controller.ts]"]
  node_userservice["User administration<br/>[controller.ts]"]
  node_superadmin["Institute administration<br/>[controller.ts]"]
end

subgraph group_backend["Backend platform"]
  node_api_routes["API routes<br/>[index.ts]"]
  node_auth["Authentication<br/>[controller.ts]"]
  node_db[("Relational database<br/>[prisma.ts]")]
end

node_users(("Students and staff"))
node_supabase["Supabase auth service"]

node_users -->|"uses"| node_spa
node_spa -->|"renders"| node_router
node_router -->|"routes to"| node_authui
node_router -->|"routes to"| node_examui
node_router -->|"routes to"| node_questionui
node_router -->|"routes to"| node_importui
node_router -->|"routes to"| node_activeexam
node_router -->|"routes to"| node_resultui
node_router -->|"routes to"| node_monitorui
node_router -->|"routes to"| node_analyticsui
node_router -->|"routes to"| node_superui
node_authui -->|"requests"| node_api
node_examui -->|"requests"| node_api
node_questionui -->|"requests"| node_api
node_importui -->|"requests"| node_api
node_activeexam -->|"saves answers"| node_api
node_resultui -->|"requests"| node_api
node_monitorui -->|"requests"| node_api
node_analyticsui -->|"requests"| node_api
node_superui -->|"requests"| node_api
node_api -->|"HTTPS requests"| node_api_routes
node_api_routes -->|"dispatches"| node_auth
node_api_routes -->|"dispatches"| node_questions
node_api_routes -->|"dispatches"| node_banks
node_api_routes -->|"dispatches"| node_imports
node_api_routes -->|"dispatches"| node_exams
node_api_routes -->|"dispatches"| node_attempts
node_api_routes -->|"dispatches"| node_results
node_api_routes -->|"dispatches"| node_security
node_api_routes -->|"dispatches"| node_monitoring
node_api_routes -->|"dispatches"| node_audit
node_api_routes -->|"dispatches"| node_analytics
node_api_routes -->|"dispatches"| node_userservice
node_api_routes -->|"dispatches"| node_superadmin
node_authui -.->|"auth provider"| node_supabase
node_attempts -->|"evaluates submission"| node_evaluation
node_attempts -->|"records incidents"| node_security
node_monitoring -->|"proctor events"| node_sockets
node_activeexam -->|"telemetry"| node_sockets
node_attempts -->|"persists attempts"| node_db
node_exams -->|"persists exams"| node_db
node_questions -->|"persists questions"| node_db
node_banks -->|"persists banks"| node_db
node_imports -->|"ingests questions"| node_questions
node_results -->|"reads results"| node_db
node_analytics -->|"reads metrics"| node_db
node_audit -->|"stores audit trail"| node_db
node_superadmin -->|"manages institutes"| node_db

click node_spa "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/App.tsx"
click node_router "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/app/router/index.tsx"
click node_authui "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/auth/LoginPage.tsx"
click node_examui "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/exams/ExamWizard.tsx"
click node_questionui "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/questions/QuestionBankList.tsx"
click node_importui "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/imports/ImportModal.tsx"
click node_activeexam "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/attempts/ActiveExamEngine.tsx"
click node_resultui "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/results/ExamResultView.tsx"
click node_monitorui "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/monitoring/LiveExamMonitor.tsx"
click node_analyticsui "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/analytics/ExamAnalytics.tsx"
click node_superui "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/superadmin/SubscriptionManager.tsx"
click node_api "https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/services/api.ts"
click node_api_routes "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/routes/index.ts"
click node_auth "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/auth/controller.ts"
click node_questions "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/questions/controller.ts"
click node_banks "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/question-banks/controller.ts"
click node_imports "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/imports/controller.ts"
click node_exams "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/exams/controller.ts"
click node_attempts "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/attempts/controller.ts"
click node_evaluation "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/evaluation/service.ts"
click node_results "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/results/controller.ts"
click node_security "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/security/controller.ts"
click node_sockets "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/sockets/index.ts"
click node_monitoring "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/monitoring/controller.ts"
click node_audit "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/audit/controller.ts"
click node_analytics "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/analytics/controller.ts"
click node_userservice "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/users/controller.ts"
click node_superadmin "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/superadmin/controller.ts"
click node_db "https://github.com/rajput-itself/poonaexam/blob/main/backend/src/config/prisma.ts"

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_spa,node_router,node_authui,node_examui,node_questionui,node_importui,node_activeexam,node_resultui,node_monitorui,node_analyticsui,node_superui,node_api toneBlue
class node_questions,node_banks,node_imports,node_exams,node_attempts,node_evaluation,node_results toneAmber
class node_security,node_sockets,node_monitoring,node_audit,node_analytics,node_userservice,node_superadmin toneMint
class node_api_routes,node_auth,node_db toneRose
class node_users,node_supabase toneIndigo
```

## Components

### Web application

- [React application](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [App router](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/app/router/index.tsx): `frontend/src/app/router/index.tsx`
- [Sign-in and registration](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/auth/LoginPage.tsx): `frontend/src/features/auth/LoginPage.tsx`
- [Exam authoring](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/exams/ExamWizard.tsx): `frontend/src/features/exams/ExamWizard.tsx`
- [Question banks](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/questions/QuestionBankList.tsx): `frontend/src/features/questions/QuestionBankList.tsx`
- [Question import](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/imports/ImportModal.tsx): `frontend/src/features/imports/ImportModal.tsx`
- [Active exam engine](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/attempts/ActiveExamEngine.tsx): `frontend/src/features/attempts/ActiveExamEngine.tsx`
- [Results view](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/results/ExamResultView.tsx): `frontend/src/features/results/ExamResultView.tsx`
- [Live proctor monitor](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/monitoring/LiveExamMonitor.tsx): `frontend/src/features/monitoring/LiveExamMonitor.tsx`
- [Analytics dashboard](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/analytics/ExamAnalytics.tsx): `frontend/src/features/analytics/ExamAnalytics.tsx`
- [Institute subscriptions](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/features/superadmin/SubscriptionManager.tsx): `frontend/src/features/superadmin/SubscriptionManager.tsx`
- [API client](https://github.com/rajput-itself/poonaexam/blob/main/frontend/src/services/api.ts): `frontend/src/services/api.ts`

### Assessment workflow

- [Question management](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/questions/controller.ts): `backend/src/modules/questions/controller.ts`
- [Question banks](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/question-banks/controller.ts): `backend/src/modules/question-banks/controller.ts`
- [Import ingestion](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/imports/controller.ts): `backend/src/modules/imports/controller.ts`
- [Exam management](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/exams/controller.ts): `backend/src/modules/exams/controller.ts`
- [Exam attempts](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/attempts/controller.ts): `backend/src/modules/attempts/controller.ts`
- [Evaluation engine](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/evaluation/service.ts): `backend/src/modules/evaluation/service.ts`
- [Results service](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/results/controller.ts): `backend/src/modules/results/controller.ts`

### Security and operations

- [Security incidents](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/security/controller.ts): `backend/src/modules/security/controller.ts`
- [Proctoring sockets](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/sockets/index.ts): `backend/src/sockets/index.ts`
- [Session monitoring](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/monitoring/controller.ts): `backend/src/modules/monitoring/controller.ts`
- [Audit trail](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/audit/controller.ts): `backend/src/modules/audit/controller.ts`
- [Exam analytics](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/analytics/controller.ts): `backend/src/modules/analytics/controller.ts`
- [User administration](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/users/controller.ts): `backend/src/modules/users/controller.ts`
- [Institute administration](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/superadmin/controller.ts): `backend/src/modules/superadmin/controller.ts`

### Backend platform

- [API routes](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/routes/index.ts): `backend/src/routes/index.ts`
- [Authentication](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/modules/auth/controller.ts): `backend/src/modules/auth/controller.ts`
- [Relational database](https://github.com/rajput-itself/poonaexam/blob/main/backend/src/config/prisma.ts): `backend/src/config/prisma.ts`

### Other components

- **Students and staff**
- **Supabase auth service**

## Connections

- Students and staff → React application: uses
- React application → App router: renders
- App router → Sign-in and registration: routes to
- App router → Exam authoring: routes to
- App router → Question banks: routes to
- App router → Question import: routes to
- App router → Active exam engine: routes to
- App router → Results view: routes to
- App router → Live proctor monitor: routes to
- App router → Analytics dashboard: routes to
- App router → Institute subscriptions: routes to
- Sign-in and registration → API client: requests
- Exam authoring → API client: requests
- Question banks → API client: requests
- Question import → API client: requests
- Active exam engine → API client: saves answers
- Results view → API client: requests
- Live proctor monitor → API client: requests
- Analytics dashboard → API client: requests
- Institute subscriptions → API client: requests
- API client → API routes: HTTPS requests
- API routes → Authentication: dispatches
- API routes → Question management: dispatches
- API routes → Question banks: dispatches
- API routes → Import ingestion: dispatches
- API routes → Exam management: dispatches
- API routes → Exam attempts: dispatches
- API routes → Results service: dispatches
- API routes → Security incidents: dispatches
- API routes → Session monitoring: dispatches
- API routes → Audit trail: dispatches
- API routes → Exam analytics: dispatches
- API routes → User administration: dispatches
- API routes → Institute administration: dispatches
- Sign-in and registration → Supabase auth service: auth provider
- Exam attempts → Evaluation engine: evaluates submission
- Exam attempts → Security incidents: records incidents
- Session monitoring → Proctoring sockets: proctor events
- Active exam engine → Proctoring sockets: telemetry
- Exam attempts → Relational database: persists attempts
- Exam management → Relational database: persists exams
- Question management → Relational database: persists questions
- Question banks → Relational database: persists banks
- Import ingestion → Question management: ingests questions
- Results service → Relational database: reads results
- Exam analytics → Relational database: reads metrics
- Audit trail → Relational database: stores audit trail
- Institute administration → Relational database: manages institutes
