# aksh0411/note_university architecture

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

- Interactive diagram: https://gitdiagram.com/aksh0411/note_university
- Repository: https://github.com/aksh0411/note_university

## Overview

Noteversity is a university academic portal for student accounts, course notes, previous-year papers, and an AI study mentor. The main workflow runs from the browser through the API: students authenticate, browse or download notes and PYQs, and ask subject-focused questions answered using relevant PDF material and an AI provider. Admins can upload academic files. The backend also supports real-time room chat and persists application data through MongoDB with JSON-backed recovery. The README and sampled source support the AI and authentication flows; some route internals are unsampled, so their detailed links are omitted.

Main entry points: [`noteversity-backend/server.js`](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/server.js) (HTTP and socket server), [`noteversity-backend/config/seeder.js`](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/seeder.js) (Startup data restore), [`noteversity-backend/routes/chat.js`](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/chat.js) (AI chat routes), [`noteversity-backend/services/aiService.js`](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/services/aiService.js) (Academic RAG service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Student experience"]
  node_browser["Web application"]
end

subgraph group_api["API workflows"]
  node_server["HTTP and socket server<br/>[server.js]"]
  node_auth["Authentication routes<br/>[auth.js]"]
  node_authguard["JWT auth guard<br/>[auth.js]"]
  node_notes["Notes library routes<br/>[notes.js]"]
  node_pyqs["PYQ library routes<br/>[pyqs.js]"]
  node_dashboard["Student dashboard<br/>[dashboard.js]"]
  node_chat["AI chat routes<br/>[chat.js]"]
  node_upload["File upload handler<br/>[upload.js]"]
end

subgraph group_learning["Academic content"]
  node_ai["Academic RAG service<br/>[aiService.js]"]
  node_catalog["Course PDF catalog<br/>[libraryCatalog.js]"]
  node_pdfs["Uploaded academic PDFs"]
end

subgraph group_persistence["Data persistence"]
  node_user["User records<br/>[User.js]"]
  node_note["Notes records<br/>[Note.js]"]
  node_pyq["PYQ records<br/>[Pyq.js]"]
  node_message["Room messages<br/>[Message.js]"]
  node_mongo[("MongoDB<br/>[db.js]")]
  node_json["JSON persistence<br/>[jsonStore.js]"]
  node_seeder["Startup data restore<br/>[seeder.js]"]
end

subgraph group_integrations["External services"]
  node_gemini["Google Gemini"]
  node_mailer["Email delivery<br/>[mailer.js]"]
end

node_student(("Student or admin"))

node_student -->|"uses"| node_browser
node_browser -->|"sends API requests"| node_server
node_server -->|"mounts auth"| node_auth
node_server -->|"mounts notes"| node_notes
node_server -->|"mounts PYQs"| node_pyqs
node_server -->|"mounts dashboard"| node_dashboard
node_server -->|"mounts chat"| node_chat
node_auth -->|"reads and writes"| node_user
node_auth -.->|"uses"| node_authguard
node_auth -->|"sends OTP"| node_mailer
node_notes -.->|"handles uploads"| node_upload
node_notes -.->|"manages notes"| node_note
node_pyqs -.->|"handles uploads"| node_upload
node_pyqs -.->|"manages papers"| node_pyq
node_dashboard -.->|"reads student data"| node_user
node_dashboard -.->|"reads note stats"| node_note
node_dashboard -.->|"reads paper stats"| node_pyq
node_upload -->|"writes files"| node_pdfs
node_chat -->|"protects endpoints"| node_authguard
node_chat -->|"requests answers"| node_ai
node_chat -->|"persists history"| node_json
node_chat -->|"loads room messages"| node_message
node_ai -->|"retrieves notes"| node_note
node_ai -->|"retrieves papers"| node_pyq
node_ai -->|"extracts PDF text"| node_pdfs
node_ai -->|"generates answer"| node_gemini
node_server -->|"stores socket messages"| node_message
node_server -->|"checks socket identity"| node_user
node_server -->|"connects on startup"| node_mongo
node_seeder -->|"restores records"| node_json
node_seeder -->|"seeds users"| node_user
node_seeder -->|"seeds notes"| node_note
node_seeder -->|"seeds papers"| node_pyq
node_seeder -->|"seeds chat"| node_message
node_seeder -->|"loads catalog"| node_catalog
node_seeder -->|"imports matching files"| node_pdfs
node_json -.->|"backs up collections"| node_mongo

click node_browser "https://github.com/aksh0411/note_university/blob/main/noteversity-prototype.html"
click node_server "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/server.js"
click node_auth "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/auth.js"
click node_authguard "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/middleware/auth.js"
click node_notes "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/notes.js"
click node_pyqs "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/pyqs.js"
click node_dashboard "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/dashboard.js"
click node_chat "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/chat.js"
click node_upload "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/middleware/upload.js"
click node_ai "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/services/aiService.js"
click node_catalog "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/libraryCatalog.js"
click node_pdfs "https://github.com/aksh0411/note_university/tree/main/noteversity-backend/uploads"
click node_user "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/models/User.js"
click node_note "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/models/Note.js"
click node_pyq "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/models/Pyq.js"
click node_message "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/models/Message.js"
click node_mongo "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/db.js"
click node_json "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/services/jsonStore.js"
click node_seeder "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/seeder.js"
click node_mailer "https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/mailer.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_browser toneBlue
class node_server,node_auth,node_authguard,node_notes,node_pyqs,node_dashboard,node_chat,node_upload toneAmber
class node_ai,node_catalog,node_pdfs toneMint
class node_user,node_note,node_pyq,node_message,node_mongo,node_json,node_seeder toneRose
class node_gemini,node_mailer,node_student toneIndigo
```

## Components

### Student experience

- [Web application](https://github.com/aksh0411/note_university/blob/main/noteversity-prototype.html): `noteversity-prototype.html`

### API workflows

- [HTTP and socket server](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/server.js): `noteversity-backend/server.js`
- [Authentication routes](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/auth.js): `noteversity-backend/routes/auth.js`
- [JWT auth guard](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/middleware/auth.js): `noteversity-backend/middleware/auth.js`
- [Notes library routes](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/notes.js): `noteversity-backend/routes/notes.js`
- [PYQ library routes](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/pyqs.js): `noteversity-backend/routes/pyqs.js`
- [Student dashboard](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/dashboard.js): `noteversity-backend/routes/dashboard.js`
- [AI chat routes](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/routes/chat.js): `noteversity-backend/routes/chat.js`
- [File upload handler](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/middleware/upload.js): `noteversity-backend/middleware/upload.js`

### Academic content

- [Academic RAG service](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/services/aiService.js): `noteversity-backend/services/aiService.js`
- [Course PDF catalog](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/libraryCatalog.js): `noteversity-backend/config/libraryCatalog.js`
- [Uploaded academic PDFs](https://github.com/aksh0411/note_university/tree/main/noteversity-backend/uploads): `noteversity-backend/uploads`

### Data persistence

- [User records](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/models/User.js): `noteversity-backend/models/User.js`
- [Notes records](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/models/Note.js): `noteversity-backend/models/Note.js`
- [PYQ records](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/models/Pyq.js): `noteversity-backend/models/Pyq.js`
- [Room messages](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/models/Message.js): `noteversity-backend/models/Message.js`
- [MongoDB](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/db.js): `noteversity-backend/config/db.js`
- [JSON persistence](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/services/jsonStore.js): `noteversity-backend/services/jsonStore.js`
- [Startup data restore](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/seeder.js): `noteversity-backend/config/seeder.js`

### External services

- **Google Gemini**
- [Email delivery](https://github.com/aksh0411/note_university/blob/main/noteversity-backend/config/mailer.js): `noteversity-backend/config/mailer.js`

### Other components

- **Student or admin**

## Connections

- Student or admin → Web application: uses
- Web application → HTTP and socket server: sends API requests
- HTTP and socket server → Authentication routes: mounts auth
- HTTP and socket server → Notes library routes: mounts notes
- HTTP and socket server → PYQ library routes: mounts PYQs
- HTTP and socket server → Student dashboard: mounts dashboard
- HTTP and socket server → AI chat routes: mounts chat
- Authentication routes → User records: reads and writes
- Authentication routes → JWT auth guard: uses
- Authentication routes → Email delivery: sends OTP
- Notes library routes → File upload handler: handles uploads
- Notes library routes → Notes records: manages notes
- PYQ library routes → File upload handler: handles uploads
- PYQ library routes → PYQ records: manages papers
- Student dashboard → User records: reads student data
- Student dashboard → Notes records: reads note stats
- Student dashboard → PYQ records: reads paper stats
- File upload handler → Uploaded academic PDFs: writes files
- AI chat routes → JWT auth guard: protects endpoints
- AI chat routes → Academic RAG service: requests answers
- AI chat routes → JSON persistence: persists history
- AI chat routes → Room messages: loads room messages
- Academic RAG service → Notes records: retrieves notes
- Academic RAG service → PYQ records: retrieves papers
- Academic RAG service → Uploaded academic PDFs: extracts PDF text
- Academic RAG service → Google Gemini: generates answer
- HTTP and socket server → Room messages: stores socket messages
- HTTP and socket server → User records: checks socket identity
- HTTP and socket server → MongoDB: connects on startup
- Startup data restore → JSON persistence: restores records
- Startup data restore → User records: seeds users
- Startup data restore → Notes records: seeds notes
- Startup data restore → PYQ records: seeds papers
- Startup data restore → Room messages: seeds chat
- Startup data restore → Course PDF catalog: loads catalog
- Startup data restore → Uploaded academic PDFs: imports matching files
- JSON persistence → MongoDB: backs up collections
