# pawan3890/ai-study-helper architecture

> Architecture diagram of the GitHub repository pawan3890/ai-study-helper, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pawan3890/ai-study-helper
- Repository: https://github.com/pawan3890/ai-study-helper

## Overview

AI Study Helper serves a browser-based study workflow: students submit notes or files for summaries and quizzes, start a context-grounded tutor session, or request a leveled topic explanation. Express routes own these distinct tasks and call shared content utilities and the swappable AI provider; chat additionally keeps bounded session history in memory. The README documents a PDF/DOCX/TXT upload capability and provider choices. The graph shows the documented browser/API interaction; source excerpts confirm backend calls, while frontend request details are only partially sampled.

Main entry points: [`services/aiProvider.js`](https://github.com/pawan3890/ai-study-helper/blob/main/services/aiProvider.js) (AI gateway), [`server.js`](https://github.com/pawan3890/ai-study-helper/blob/main/server.js) (HTTP server), [`routes/chat.js`](https://github.com/pawan3890/ai-study-helper/blob/main/routes/chat.js) (Tutor chat), [`routes/summarize.js`](https://github.com/pawan3890/ai-study-helper/blob/main/routes/summarize.js) (Summarizer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Study interface"]
  node_webui["Study UI<br/>[app.js]"]
end

subgraph group_api["Study workflows"]
  node_express["HTTP server<br/>[server.js]"]
  node_summarize["Summarizer<br/>[summarize.js]"]
  node_quiz["Quiz generator<br/>[quiz.js]"]
  node_chat["Tutor chat<br/>[chat.js]"]
  node_explain["Topic explainer<br/>[explain.js]"]
end

subgraph group_shared["Shared services"]
  node_uploads["File extraction<br/>[upload.js]"]
  node_textutils["Content validation<br/>[textUtils.js]"]
  node_sessions[("Chat sessions<br/>[sessionStore.js]")]
  node_provider["AI gateway<br/>[aiProvider.js]"]
end

node_student(("Student"))
node_anthropic["Anthropic"]
node_openai["OpenAI"]
node_openrouter["OpenRouter"]

node_student -->|"uses"| node_webui
node_webui -->|"sends API requests"| node_express
node_express -->|"routes requests"| node_summarize
node_express -->|"routes requests"| node_quiz
node_express -->|"routes requests"| node_chat
node_express -->|"routes requests"| node_explain
node_summarize -->|"extracts files"| node_uploads
node_quiz -->|"extracts files"| node_uploads
node_chat -->|"extracts files"| node_uploads
node_summarize -->|"validates and clamps"| node_textutils
node_quiz -->|"validates and clamps"| node_textutils
node_chat -->|"clamps content"| node_textutils
node_explain -->|"validates topic"| node_textutils
node_summarize -->|"generates summary"| node_provider
node_quiz -->|"generates materials"| node_provider
node_chat -->|"generates reply"| node_provider
node_explain -->|"generates explanation"| node_provider
node_chat -->|"reads and updates"| node_sessions
node_provider -->|"dispatches generation"| node_anthropic
node_provider -->|"dispatches generation"| node_openai
node_provider -->|"dispatches generation"| node_openrouter

click node_webui "https://github.com/pawan3890/ai-study-helper/blob/main/public/app.js"
click node_express "https://github.com/pawan3890/ai-study-helper/blob/main/server.js"
click node_summarize "https://github.com/pawan3890/ai-study-helper/blob/main/routes/summarize.js"
click node_quiz "https://github.com/pawan3890/ai-study-helper/blob/main/routes/quiz.js"
click node_chat "https://github.com/pawan3890/ai-study-helper/blob/main/routes/chat.js"
click node_explain "https://github.com/pawan3890/ai-study-helper/blob/main/routes/explain.js"
click node_uploads "https://github.com/pawan3890/ai-study-helper/blob/main/middleware/upload.js"
click node_textutils "https://github.com/pawan3890/ai-study-helper/blob/main/utils/textUtils.js"
click node_sessions "https://github.com/pawan3890/ai-study-helper/blob/main/services/sessionStore.js"
click node_provider "https://github.com/pawan3890/ai-study-helper/blob/main/services/aiProvider.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_webui toneBlue
class node_express,node_summarize,node_quiz,node_chat,node_explain toneAmber
class node_uploads,node_textutils,node_sessions,node_provider,node_openrouter toneMint
class node_student,node_anthropic,node_openai toneIndigo
```

## Components

### Study interface

- [Study UI](https://github.com/pawan3890/ai-study-helper/blob/main/public/app.js): `public/app.js`

### Study workflows

- [HTTP server](https://github.com/pawan3890/ai-study-helper/blob/main/server.js): `server.js`
- [Summarizer](https://github.com/pawan3890/ai-study-helper/blob/main/routes/summarize.js): `routes/summarize.js`
- [Quiz generator](https://github.com/pawan3890/ai-study-helper/blob/main/routes/quiz.js): `routes/quiz.js`
- [Tutor chat](https://github.com/pawan3890/ai-study-helper/blob/main/routes/chat.js): `routes/chat.js`
- [Topic explainer](https://github.com/pawan3890/ai-study-helper/blob/main/routes/explain.js): `routes/explain.js`

### Shared services

- [File extraction](https://github.com/pawan3890/ai-study-helper/blob/main/middleware/upload.js): `middleware/upload.js`
- [Content validation](https://github.com/pawan3890/ai-study-helper/blob/main/utils/textUtils.js): `utils/textUtils.js`
- [Chat sessions](https://github.com/pawan3890/ai-study-helper/blob/main/services/sessionStore.js): `services/sessionStore.js`
- [AI gateway](https://github.com/pawan3890/ai-study-helper/blob/main/services/aiProvider.js): `services/aiProvider.js`

### Other components

- **Student**
- **Anthropic**
- **OpenAI**
- **OpenRouter**

## Connections

- Student → Study UI: uses (evidence: `README.md`)
- Study UI → HTTP server: sends API requests (evidence: `README.md`)
- HTTP server → Summarizer: routes requests (evidence: `server.js`)
- HTTP server → Quiz generator: routes requests (evidence: `server.js`)
- HTTP server → Tutor chat: routes requests (evidence: `server.js`)
- HTTP server → Topic explainer: routes requests (evidence: `server.js`)
- Summarizer → File extraction: extracts files (evidence: `routes/summarize.js`)
- Quiz generator → File extraction: extracts files (evidence: `routes/quiz.js`)
- Tutor chat → File extraction: extracts files (evidence: `routes/chat.js`)
- Summarizer → Content validation: validates and clamps (evidence: `routes/summarize.js`)
- Quiz generator → Content validation: validates and clamps (evidence: `routes/quiz.js`)
- Tutor chat → Content validation: clamps content (evidence: `routes/chat.js`)
- Topic explainer → Content validation: validates topic (evidence: `routes/explain.js`)
- Summarizer → AI gateway: generates summary (evidence: `routes/summarize.js`)
- Quiz generator → AI gateway: generates materials (evidence: `routes/quiz.js`)
- Tutor chat → AI gateway: generates reply (evidence: `routes/chat.js`)
- Topic explainer → AI gateway: generates explanation (evidence: `routes/explain.js`)
- Tutor chat → Chat sessions: reads and updates (evidence: `routes/chat.js`)
- AI gateway → Anthropic: dispatches generation (evidence: `services/aiProvider.js`)
- AI gateway → OpenAI: dispatches generation (evidence: `services/aiProvider.js`)
- AI gateway → OpenRouter: dispatches generation (evidence: `services/aiProvider.js`)
