# chaudhary-danish/examforge architecture

> Architecture diagram of the GitHub repository chaudhary-danish/examforge, 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/chaudhary-danish/examforge
- Repository: https://github.com/chaudhary-danish/examforge

## Overview

ExamForge is a student and administrator portal for academic resources, notices, and AI study help. The main workflow spans account access, academic organization, learning-material uploads and retrieval, and student-facing AI and notice features; administrators also manage students and subjects. The graph emphasizes those product stages and the shared authentication and database layer. Several UI and API files were not excerpted, so their internal interactions are omitted rather than inferred; dashed links are not used to imply undocumented flows.

Main entry points: [`src/lib/supabase/server.ts`](https://github.com/chaudhary-danish/examforge/blob/main/src/lib/supabase/server.ts) (Supabase client), [`src/lib/auth.ts`](https://github.com/chaudhary-danish/examforge/blob/main/src/lib/auth.ts) (JWT auth), [`src/app/api/admin/students/route.ts`](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/admin/students/route.ts) (Student management), [`src/app/api/upload/route.ts`](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/upload/route.ts) (Resource upload)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Identity &amp; Access"]
  node_login_ui["Login screen<br/>[page.tsx]"]
  node_login_api["Login API<br/>[route.ts]"]
  node_signup_api["Student signup<br/>[route.ts]"]
end

subgraph group_academics["Academic Administration"]
  node_admin_students["Student management<br/>[route.ts]"]
  node_departments["Department management<br/>[route.ts]"]
  node_subjects["Subject catalog<br/>[route.ts]"]
  node_admin_ui["Admin portal<br/>[page.tsx]"]
end

subgraph group_resources["Learning Resources"]
  node_upload["Resource upload<br/>[route.ts]"]
  node_pyqs["Past exam papers<br/>[route.ts]"]
  node_file_api["File delivery<br/>[route.ts]"]
  node_student_subject["Subject learning<br/>[page.tsx]"]
end

subgraph group_engagement["Student Services"]
  node_ai_chat["AI study chat<br/>[route.ts]"]
  node_ai_ask["AI question endpoint<br/>[route.ts]"]
  node_student_ai["AI study interface<br/>[page.tsx]"]
  node_notices["Notice service<br/>[route.ts]"]
  node_student_notices["Notice feed<br/>[page.tsx]"]
end

subgraph group_platform["Shared Services"]
  node_auth["JWT auth<br/>[auth.ts]"]
  node_supabase_client["Supabase client<br/>[server.ts]"]
  node_database[("Supabase database")]
  node_email["Email delivery<br/>[email.ts]"]
  node_telegram["Telegram file storage<br/>[telegram.ts]"]
end

node_user(("Student or admin"))
node_openrouter["OpenRouter AI"]

node_login_api -->|"creates client"| node_supabase_client
node_login_api -->|"creates token"| node_auth
node_signup_api -->|"creates client"| node_supabase_client
node_signup_api -->|"sends credentials"| node_email
node_admin_students -->|"verifies access"| node_auth
node_admin_students -->|"creates client"| node_supabase_client
node_admin_students -->|"sends credentials"| node_email
node_departments -->|"verifies access"| node_auth
node_subjects -->|"verifies access"| node_auth
node_subjects -->|"creates client"| node_supabase_client
node_upload -->|"verifies access"| node_auth
node_upload -->|"creates client"| node_supabase_client
node_upload -->|"uploads document"| node_telegram
node_ai_chat -->|"verifies access"| node_auth
node_ai_chat -->|"creates client"| node_supabase_client
node_ai_chat -->|"requests completion"| node_openrouter
node_notices -->|"verifies access"| node_auth
node_notices -->|"creates client"| node_supabase_client
node_supabase_client -->|"connects to"| node_database

click node_login_ui "https://github.com/chaudhary-danish/examforge/blob/main/src/app/login/page.tsx"
click node_login_api "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/auth/login/route.ts"
click node_signup_api "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/auth/student-signup/route.ts"
click node_auth "https://github.com/chaudhary-danish/examforge/blob/main/src/lib/auth.ts"
click node_admin_students "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/admin/students/route.ts"
click node_departments "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/admin/departments/route.ts"
click node_subjects "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/subjects/route.ts"
click node_admin_ui "https://github.com/chaudhary-danish/examforge/blob/main/src/app/admin/dashboard/page.tsx"
click node_upload "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/upload/route.ts"
click node_pyqs "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/pyqs/route.ts"
click node_file_api "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/files/%5Bid%5D/route.ts"
click node_student_subject "https://github.com/chaudhary-danish/examforge/blob/main/src/app/student/subject/%5Bid%5D/page.tsx"
click node_ai_chat "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/ai/chat/route.ts"
click node_ai_ask "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/ai/ask/route.ts"
click node_student_ai "https://github.com/chaudhary-danish/examforge/blob/main/src/app/student/ai/page.tsx"
click node_notices "https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/notices/route.ts"
click node_student_notices "https://github.com/chaudhary-danish/examforge/blob/main/src/app/student/notices/page.tsx"
click node_supabase_client "https://github.com/chaudhary-danish/examforge/blob/main/src/lib/supabase/server.ts"
click node_email "https://github.com/chaudhary-danish/examforge/blob/main/src/lib/email.ts"
click node_telegram "https://github.com/chaudhary-danish/examforge/blob/main/src/lib/telegram.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_login_ui,node_login_api,node_signup_api toneBlue
class node_admin_students,node_departments,node_subjects,node_admin_ui toneAmber
class node_upload,node_pyqs,node_file_api,node_student_subject,node_openrouter toneMint
class node_ai_chat,node_ai_ask,node_student_ai,node_notices,node_student_notices toneRose
class node_auth,node_supabase_client,node_database,node_email,node_telegram,node_user toneIndigo
```

## Components

### Identity & Access

- [Login screen](https://github.com/chaudhary-danish/examforge/blob/main/src/app/login/page.tsx): `src/app/login/page.tsx`
- [Login API](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/auth/login/route.ts): `src/app/api/auth/login/route.ts`
- [Student signup](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/auth/student-signup/route.ts): `src/app/api/auth/student-signup/route.ts`

### Academic Administration

- [Student management](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/admin/students/route.ts): `src/app/api/admin/students/route.ts`
- [Department management](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/admin/departments/route.ts): `src/app/api/admin/departments/route.ts`
- [Subject catalog](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/subjects/route.ts): `src/app/api/subjects/route.ts`
- [Admin portal](https://github.com/chaudhary-danish/examforge/blob/main/src/app/admin/dashboard/page.tsx): `src/app/admin/dashboard/page.tsx`

### Learning Resources

- [Resource upload](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/upload/route.ts): `src/app/api/upload/route.ts`
- [Past exam papers](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/pyqs/route.ts): `src/app/api/pyqs/route.ts`
- [File delivery](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/files/%5Bid%5D/route.ts): `src/app/api/files/[id]/route.ts`
- [Subject learning](https://github.com/chaudhary-danish/examforge/blob/main/src/app/student/subject/%5Bid%5D/page.tsx): `src/app/student/subject/[id]/page.tsx`

### Student Services

- [AI study chat](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/ai/chat/route.ts): `src/app/api/ai/chat/route.ts`
- [AI question endpoint](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/ai/ask/route.ts): `src/app/api/ai/ask/route.ts`
- [AI study interface](https://github.com/chaudhary-danish/examforge/blob/main/src/app/student/ai/page.tsx): `src/app/student/ai/page.tsx`
- [Notice service](https://github.com/chaudhary-danish/examforge/blob/main/src/app/api/notices/route.ts): `src/app/api/notices/route.ts`
- [Notice feed](https://github.com/chaudhary-danish/examforge/blob/main/src/app/student/notices/page.tsx): `src/app/student/notices/page.tsx`

### Shared Services

- [JWT auth](https://github.com/chaudhary-danish/examforge/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Supabase client](https://github.com/chaudhary-danish/examforge/blob/main/src/lib/supabase/server.ts): `src/lib/supabase/server.ts`
- **Supabase database**
- [Email delivery](https://github.com/chaudhary-danish/examforge/blob/main/src/lib/email.ts): `src/lib/email.ts`
- [Telegram file storage](https://github.com/chaudhary-danish/examforge/blob/main/src/lib/telegram.ts): `src/lib/telegram.ts`

### Other components

- **Student or admin**
- **OpenRouter AI**

## Connections

- Login API → Supabase client: creates client (evidence: `src/app/api/auth/login/route.ts`)
- Login API → JWT auth: creates token (evidence: `src/app/api/auth/login/route.ts`)
- Student signup → Supabase client: creates client (evidence: `src/app/api/auth/student-signup/route.ts`)
- Student signup → Email delivery: sends credentials (evidence: `src/app/api/auth/student-signup/route.ts`)
- Student management → JWT auth: verifies access (evidence: `src/app/api/admin/students/route.ts`)
- Student management → Supabase client: creates client (evidence: `src/app/api/admin/students/route.ts`)
- Student management → Email delivery: sends credentials (evidence: `src/app/api/admin/students/route.ts`)
- Department management → JWT auth: verifies access (evidence: `src/app/api/admin/departments/route.ts`)
- Subject catalog → JWT auth: verifies access (evidence: `src/app/api/subjects/route.ts`)
- Subject catalog → Supabase client: creates client (evidence: `src/app/api/subjects/route.ts`)
- Resource upload → JWT auth: verifies access (evidence: `src/app/api/upload/route.ts`)
- Resource upload → Supabase client: creates client (evidence: `src/app/api/upload/route.ts`)
- Resource upload → Telegram file storage: uploads document (evidence: `src/app/api/upload/route.ts`)
- AI study chat → JWT auth: verifies access (evidence: `src/app/api/ai/chat/route.ts`)
- AI study chat → Supabase client: creates client (evidence: `src/app/api/ai/chat/route.ts`)
- AI study chat → OpenRouter AI: requests completion (evidence: `src/app/api/ai/chat/route.ts`)
- Notice service → JWT auth: verifies access (evidence: `src/app/api/notices/route.ts`)
- Notice service → Supabase client: creates client (evidence: `src/app/api/notices/route.ts`)
- Supabase client → Supabase database: connects to (evidence: `src/lib/supabase/server.ts`)
