# azizul-islam-efath/ai-paper-summarizer architecture

> Architecture diagram of the GitHub repository azizul-islam-efath/ai-paper-summarizer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-06). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/azizul-islam-efath/ai-paper-summarizer
- Repository: https://github.com/azizul-islam-efath/ai-paper-summarizer

## Overview

#### Purpose and Entry Points
Paper Generator is a full-stack research workspace: authenticated users organize projects, upload academic PDFs, obtain AI-derived structured summaries and cross-paper analysis, then generate formatted paper drafts. The client starts at `frontend/src/main.jsx` and routes through `frontend/src/App.jsx`; the API process starts at `backend/src/server.js`.

#### Client Application
React 19/Vite provides public authentication pages and protected research-workspace views. Layouts and route guards separate anonymous and authenticated flows; page modules cover upload, project/paper detail, summaries, and generated drafts.
- `frontend/src/routes/PrivateRoute.jsx`
- `frontend/src/layouts/DashboardLayout.jsx`
- `frontend/src/pages/ProjectDetail.jsx`

The browser calls backend endpoints through domain-specific service modules, while authentication/session state is held in React context.
- `frontend/src/services/api.js`
- `frontend/src/services/paperService.js`
- `frontend/src/context/AuthContext.jsx`

#### HTTP API and Control Boundary
Express routes map resource domains—auth, projects, papers, summaries, generated papers, and administration—to controllers. Middleware establishes the API boundary: JWT authentication, request validation/rate limits, multipart upload handling, and centralized failures.
- `backend/src/routes/paperRoutes.js`
- `backend/src/routes/summaryRoutes.js`
- `backend/src/controllers/projectController.js`
- `backend/src/middleware/auth.js`
- `backend/src/middleware/upload.js`

#### Persistent Research Model
Prisma is the persistence boundary over MySQL. It stores user/account state and the research workspace’s projects, paper records, summaries, and generated output, allowing asynchronous-looking processing results to be retrieved by frontend resource views.
- `backend/prisma/schema.prisma`
- `backend/src/config/prisma.js`
- `backend/src/controllers/generatedPaperController.js`

Cloud MySQL is documented as Aiven-hosted in deployment; local development uses `DATABASE_URL`.

#### PDF Ingestion Pipeline
A paper upload enters through multipart middleware, is retained in the backend upload storage area, parsed to text, and then controlled by the paper endpoints/controllers. This separates binary-file handling and PDF extraction from AI and persistence concerns.
- `backend/src/routes/paperRoutes.js`
- `backend/src/services/pdfParserService.js`
- `backend/uploads/.gitkeep`

#### AI Synthesis Pipeline
Gemini is isolated behind an AI client and focused services. Extracted PDF text feeds metadata extraction and structured summarization; multiple project papers can feed prompt templates and paper generation for comparison/gap analysis and publication-style drafts.
- `backend/src/services/AI/geminiClient.js`
- `backend/src/services/AI/MetadataExtractor.js`
- `backend/src/services/AI/Summarizer.js`
- `backend/src/services/AI/PaperGenerator.js`
- `backend/src/services/AI/PromptTemplates.js`

#### Identity, Notifications, and Deployment
Authentication uses JWTs with refresh-token configuration and supports password-reset delivery through Gmail SMTP. Runtime configuration validates secrets and external connection settings. The frontend is intended for Vercel SPA deployment, while the Node/Express service is deployed via Render; Gemini and Aiven MySQL remain external dependencies.
- `backend/src/controllers/authController.js`
- `backend/src/services/emailService.js`
- `backend/src/config/env.js`
- `render.yaml`
- `frontend/vercel.json`

Main entry points: [`backend/src/routes/paperRoutes.js`](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/routes/paperRoutes.js) (Resource routes & controllers), [`backend/src/services/AI/Summarizer.js`](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/AI/Summarizer.js) (AI synthesis services), [`backend/src/server.js`](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/server.js) (API server), [`frontend/src/main.jsx`](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/main.jsx) (Client entry & routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React Client"]
  node_client_entry["Client entry &amp; routes<br/>React/Vite app<br/>[main.jsx]"]
  node_workspace_ui["Research workspace<br/>protected UI<br/>[ProjectDetail.jsx]"]
  node_auth_state["Auth session state<br/>React context<br/>[AuthContext.jsx]"]
  node_api_services["API service modules<br/>browser API client<br/>[api.js]"]
end

subgraph group_api["Express API"]
  node_api_server["API server<br/>Express process<br/>[server.js]"]
  node_routes_controllers["Resource routes &amp; controllers<br/>Express handlers<br/>[paperRoutes.js]"]
  node_api_middleware["Security &amp; upload middleware<br/>Express middleware<br/>[auth.js]"]
end

subgraph group_processing["Document &amp; AI Processing"]
  node_pdf_storage["Uploaded PDFs<br/>file storage<br/>[.gitkeep]"]
  node_pdf_parser["PDF text extraction<br/>parser service"]
  node_ai_services["AI synthesis services<br/>Gemini workflows<br/>[Summarizer.js]"]
  node_prompt_templates["Generation prompts<br/>prompt templates<br/>[PromptTemplates.js]"]
end

subgraph group_data["Persistence &amp; External Services"]
  node_prisma["Prisma data access<br/>ORM boundary<br/>[prisma.js]"]
  node_mysql[("Research workspace data<br/>MySQL<br/>[schema.prisma]")]
  node_gemini{{"Gemini<br/>external AI<br/>[geminiClient.js]"}}
  node_email{{"Gmail SMTP<br/>email delivery<br/>[emailService.js]"}}
  node_runtime_config["Runtime configuration<br/>environment validation<br/>[env.js]"]
end

subgraph group_deployment["Deployment"]
  node_vercel{{"Vercel<br/>frontend deployment<br/>[vercel.json]"}}
  node_render{{"Render<br/>backend deployment<br/>[render.yaml]"}}
end

node_client_entry -->|"renders protected views"| node_workspace_ui
node_client_entry -->|"provides session"| node_auth_state
node_workspace_ui -->|"requests resources"| node_api_services
node_auth_state -->|"attaches session"| node_api_services
node_api_services -->|"HTTPS API calls"| node_api_server
node_api_server -->|"applies boundary controls"| node_api_middleware
node_api_middleware -->|"passes validated requests"| node_routes_controllers
node_routes_controllers -->|"stores uploads"| node_pdf_storage
node_routes_controllers -->|"parses uploaded papers"| node_pdf_parser
node_pdf_storage -->|"PDF input"| node_pdf_parser
node_pdf_parser -->|"extracted text"| node_ai_services
node_routes_controllers -->|"requests summaries and drafts"| node_ai_services
node_ai_services -->|"uses prompts"| node_prompt_templates
node_ai_services -->|"AI inference"| node_gemini
node_routes_controllers -->|"reads and writes workspace"| node_prisma
node_ai_services -->|"persists processing results"| node_prisma
node_prisma -->|"database access"| node_mysql
node_routes_controllers -->|"password resets"| node_email
node_runtime_config -.->|"configures runtime"| node_api_server
node_vercel -.->|"deploys"| node_client_entry
node_render -.->|"deploys"| node_api_server

click node_client_entry "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/main.jsx"
click node_workspace_ui "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/pages/ProjectDetail.jsx"
click node_auth_state "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/context/AuthContext.jsx"
click node_api_services "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/services/api.js"
click node_api_server "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/server.js"
click node_routes_controllers "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/routes/paperRoutes.js"
click node_api_middleware "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/middleware/auth.js"
click node_pdf_storage "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/uploads/.gitkeep"
click node_pdf_parser "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/pdfParserService.js"
click node_ai_services "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/AI/Summarizer.js"
click node_prompt_templates "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/AI/PromptTemplates.js"
click node_prisma "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/config/prisma.js"
click node_mysql "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/prisma/schema.prisma"
click node_gemini "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/AI/geminiClient.js"
click node_email "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/emailService.js"
click node_runtime_config "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/config/env.js"
click node_vercel "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/vercel.json"
click node_render "https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/render.yaml"

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_client_entry,node_workspace_ui,node_auth_state,node_api_services toneBlue
class node_api_server,node_routes_controllers,node_api_middleware toneAmber
class node_pdf_storage,node_pdf_parser,node_ai_services,node_prompt_templates toneMint
class node_prisma,node_mysql,node_gemini,node_email,node_runtime_config toneRose
class node_vercel,node_render toneIndigo
```

## Components

### React Client

- [Client entry & routes](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/main.jsx): React/Vite app · Starts the SPA and selects public or protected views. · `frontend/src/main.jsx`
- [Research workspace](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/pages/ProjectDetail.jsx): protected UI · Project, paper, summary, upload, and draft views. · `frontend/src/pages/ProjectDetail.jsx`
- [Auth session state](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/context/AuthContext.jsx): React context · `frontend/src/context/AuthContext.jsx`
- [API service modules](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/src/services/api.js): browser API client · `frontend/src/services/api.js`

### Express API

- [API server](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/server.js): Express process · HTTP entry point and resource API boundary. · `backend/src/server.js`
- [Resource routes & controllers](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/routes/paperRoutes.js): Express handlers · Handles auth, projects, papers, summaries, drafts, and administration. · `backend/src/routes/paperRoutes.js`
- [Security & upload middleware](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/middleware/auth.js): Express middleware · JWT protection, validation, rate limits, multipart handling, and failures. · `backend/src/middleware/auth.js`

### Document & AI Processing

- [Uploaded PDFs](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/uploads/.gitkeep): file storage · Backend-managed retained upload files. · `backend/uploads/.gitkeep`
- [PDF text extraction](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/pdfParserService.js): parser service · `backend/src/services/pdfParserService.js`
- [AI synthesis services](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/AI/Summarizer.js): Gemini workflows · Extracts metadata, summarizes papers, compares project sources, and generates drafts. · `backend/src/services/AI/Summarizer.js`
- [Generation prompts](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/AI/PromptTemplates.js): prompt templates · `backend/src/services/AI/PromptTemplates.js`

### Persistence & External Services

- [Prisma data access](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/config/prisma.js): ORM boundary · `backend/src/config/prisma.js`
- [Research workspace data](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/prisma/schema.prisma): MySQL · Users, projects, papers, summaries, and generated papers. · `backend/prisma/schema.prisma`
- [Gemini](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/AI/geminiClient.js): external AI · `backend/src/services/AI/geminiClient.js`
- [Gmail SMTP](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/services/emailService.js): email delivery · Delivers password-reset messages. · `backend/src/services/emailService.js`
- [Runtime configuration](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/backend/src/config/env.js): environment validation · Validates secrets and external connection settings. · `backend/src/config/env.js`

### Deployment

- [Vercel](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/frontend/vercel.json): frontend deployment · Hosts the SPA. · `frontend/vercel.json`
- [Render](https://github.com/azizul-islam-efath/ai-paper-summarizer/blob/main/render.yaml): backend deployment · Runs the Node/Express service. · `render.yaml`

## Connections

- Client entry & routes → Research workspace: renders protected views
- Client entry & routes → Auth session state: provides session
- Research workspace → API service modules: requests resources
- Auth session state → API service modules: attaches session
- API service modules → API server: HTTPS API calls
- API server → Security & upload middleware: applies boundary controls
- Security & upload middleware → Resource routes & controllers: passes validated requests
- Resource routes & controllers → Uploaded PDFs: stores uploads
- Resource routes & controllers → PDF text extraction: parses uploaded papers
- Uploaded PDFs → PDF text extraction: PDF input
- PDF text extraction → AI synthesis services: extracted text
- Resource routes & controllers → AI synthesis services: requests summaries and drafts
- AI synthesis services → Generation prompts: uses prompts
- AI synthesis services → Gemini: AI inference
- Resource routes & controllers → Prisma data access: reads and writes workspace
- AI synthesis services → Prisma data access: persists processing results
- Prisma data access → Research workspace data: database access
- Resource routes & controllers → Gmail SMTP: password resets
- Runtime configuration → API server: configures runtime
- Vercel → Client entry & routes: deploys
- Render → API server: deploys
