# pratham-taikar/multimodal-document-intelligence architecture

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

- Interactive diagram: https://gitdiagram.com/pratham-taikar/multimodal-document-intelligence
- Repository: https://github.com/pratham-taikar/multimodal-document-intelligence

## Overview

AskMyNotes is a web app for organizing study subjects, uploading notes, asking questions grounded in those notes, and generating practice questions. The main workflow is to create a subject, upload and process PDF/TXT notes into searchable chunks, then ask questions or generate MCQs and short-answer exercises. Authentication and subject ownership scope access to this data. The graph reflects the sampled server, controllers, and services; the README is empty, and unsampled modules are represented only where their paths and roles are clear from the tree.

Main entry points: [`server.js`](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/server.js) (Express app), [`models/DocumentChunk.js`](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/models/DocumentChunk.js) (Document chunks), [`models/Subject.js`](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/models/Subject.js) (Subject model), [`controllers/documentController.js`](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/documentController.js) (Document controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web entry"]
  node_server["Express app<br/>[server.js]"]
  node_authmw["Auth middleware<br/>[auth.js]"]
  node_views["EJS views"]
end

subgraph group_workspace["Accounts and subjects"]
  node_subjectroutes["Subject routes<br/>[subjectRoutes.js]"]
  node_subjectctl["Subject controller"]
  node_user["User model<br/>[User.js]"]
  node_subject["Subject model<br/>[Subject.js]"]
end

subgraph group_notes["Notes ingestion"]
  node_docroutes["Document routes<br/>[documentRoutes.js]"]
  node_docctl["Document controller"]
  node_processor["Document processor"]
end

subgraph group_study["Study tools"]
  node_chatroutes["Chat routes<br/>[chatRoutes.js]"]
  node_chatctl["Chat controller<br/>[chatController.js]"]
  node_rag["Notes Q&amp;A<br/>[ragService.js]"]
  node_questionroutes["Question routes<br/>[questionRoutes.js]"]
  node_questionctl["Question controller"]
  node_questionservice["Practice generator<br/>[questionService.js]"]
end

subgraph group_state["Data and AI"]
  node_chunks[("Document chunks<br/>[DocumentChunk.js]")]
  node_aiservice["AI service<br/>[aiService.js]"]
  node_mongo[("MongoDB")]
end

node_browser(("User browser"))
node_openrouter{{"OpenRouter API"}}

node_browser -->|"requests pages"| node_server
node_server -->|"renders"| node_views
node_server -->|"guards routes"| node_authmw
node_server -->|"mounts"| node_subjectroutes
node_server -->|"mounts"| node_docroutes
node_server -->|"mounts"| node_chatroutes
node_server -->|"mounts"| node_questionroutes
node_server -->|"registers and logs in"| node_user
node_subjectroutes -->|"dispatches"| node_subjectctl
node_subjectctl -->|"reads and writes"| node_subject
node_subjectctl -->|"deletes chunks"| node_chunks
node_docroutes -->|"dispatches"| node_docctl
node_docctl -->|"reads and updates"| node_subject
node_docctl -->|"extracts and chunks"| node_processor
node_docctl -->|"writes and deletes"| node_chunks
node_chatroutes -->|"dispatches"| node_chatctl
node_chatctl -->|"checks ownership"| node_subject
node_chatctl -->|"checks availability"| node_chunks
node_chatctl -->|"requests answers"| node_rag
node_rag -->|"retrieves notes"| node_chunks
node_rag -->|"generates answer"| node_aiservice
node_questionroutes -->|"dispatches"| node_questionctl
node_questionctl -->|"checks ownership"| node_subject
node_questionctl -->|"requests exercises"| node_questionservice
node_questionservice -->|"reads notes"| node_chunks
node_questionservice -->|"generates questions"| node_aiservice
node_aiservice -->|"sends prompts"| node_openrouter
node_server -->|"stores sessions"| node_mongo
node_user -->|"reads and writes"| node_mongo
node_subject -->|"reads and writes"| node_mongo
node_chunks -->|"reads and writes"| node_mongo

click node_server "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/server.js"
click node_authmw "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/middleware/auth.js"
click node_views "https://github.com/pratham-taikar/multimodal-document-intelligence/tree/main/views"
click node_subjectroutes "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/routes/subjectRoutes.js"
click node_subjectctl "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/subjectController.js"
click node_user "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/models/User.js"
click node_subject "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/models/Subject.js"
click node_docroutes "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/routes/documentRoutes.js"
click node_docctl "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/documentController.js"
click node_processor "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/services/documentProcessor.js"
click node_chunks "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/models/DocumentChunk.js"
click node_chatroutes "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/routes/chatRoutes.js"
click node_chatctl "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/chatController.js"
click node_rag "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/services/ragService.js"
click node_questionroutes "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/routes/questionRoutes.js"
click node_questionctl "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/questionController.js"
click node_questionservice "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/services/questionService.js"
click node_aiservice "https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/services/aiService.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_server,node_authmw,node_views,node_browser toneBlue
class node_subjectroutes,node_subjectctl,node_user,node_subject toneAmber
class node_docroutes,node_docctl,node_processor,node_openrouter toneMint
class node_chatroutes,node_chatctl,node_rag,node_questionroutes,node_questionctl,node_questionservice toneRose
class node_chunks,node_aiservice,node_mongo toneIndigo
```

## Components

### Web entry

- [Express app](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/server.js): `server.js`
- [Auth middleware](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/middleware/auth.js): `middleware/auth.js`
- [EJS views](https://github.com/pratham-taikar/multimodal-document-intelligence/tree/main/views): `views`

### Accounts and subjects

- [Subject routes](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/routes/subjectRoutes.js): `routes/subjectRoutes.js`
- [Subject controller](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/subjectController.js): `controllers/subjectController.js`
- [User model](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/models/User.js): `models/User.js`
- [Subject model](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/models/Subject.js): `models/Subject.js`

### Notes ingestion

- [Document routes](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/routes/documentRoutes.js): `routes/documentRoutes.js`
- [Document controller](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/documentController.js): `controllers/documentController.js`
- [Document processor](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/services/documentProcessor.js): `services/documentProcessor.js`

### Study tools

- [Chat routes](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/routes/chatRoutes.js): `routes/chatRoutes.js`
- [Chat controller](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/chatController.js): `controllers/chatController.js`
- [Notes Q&A](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/services/ragService.js): `services/ragService.js`
- [Question routes](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/routes/questionRoutes.js): `routes/questionRoutes.js`
- [Question controller](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/controllers/questionController.js): `controllers/questionController.js`
- [Practice generator](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/services/questionService.js): `services/questionService.js`

### Data and AI

- [Document chunks](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/models/DocumentChunk.js): `models/DocumentChunk.js`
- [AI service](https://github.com/pratham-taikar/multimodal-document-intelligence/blob/main/services/aiService.js): `services/aiService.js`
- **MongoDB**

### Other components

- **User browser**
- **OpenRouter API**

## Connections

- User browser → Express app: requests pages
- Express app → EJS views: renders
- Express app → Auth middleware: guards routes
- Express app → Subject routes: mounts
- Express app → Document routes: mounts
- Express app → Chat routes: mounts
- Express app → Question routes: mounts
- Express app → User model: registers and logs in
- Subject routes → Subject controller: dispatches
- Subject controller → Subject model: reads and writes
- Subject controller → Document chunks: deletes chunks
- Document routes → Document controller: dispatches
- Document controller → Subject model: reads and updates
- Document controller → Document processor: extracts and chunks
- Document controller → Document chunks: writes and deletes
- Chat routes → Chat controller: dispatches
- Chat controller → Subject model: checks ownership
- Chat controller → Document chunks: checks availability
- Chat controller → Notes Q&A: requests answers
- Notes Q&A → Document chunks: retrieves notes
- Notes Q&A → AI service: generates answer
- Question routes → Question controller: dispatches
- Question controller → Subject model: checks ownership
- Question controller → Practice generator: requests exercises
- Practice generator → Document chunks: reads notes
- Practice generator → AI service: generates questions
- AI service → OpenRouter API: sends prompts
- Express app → MongoDB: stores sessions
- User model → MongoDB: reads and writes
- Subject model → MongoDB: reads and writes
- Document chunks → MongoDB: reads and writes
