# palaksukhadeve14/doculens-ai architecture

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

- Interactive diagram: https://gitdiagram.com/palaksukhadeve14/doculens-ai
- Repository: https://github.com/palaksukhadeve14/doculens-ai

## Overview

Doculens AI is a web app for signing in, uploading a PDF, and asking questions grounded in its contents. The dashboard coordinates PDF upload and chat; the server extracts and chunks document text, stores embeddings in Qdrant, then retrieves relevant chunks to ground Gemini answers. Authentication uses session-backed API routes and MongoDB user records. The sampled server excerpt shows these processing stages, but some implementation details and the uploader/chat component internals were not shown; their links are included only where the dashboard or server excerpt supports them.

Main entry points: [`server.js`](https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js) (API server), [`client/src/pages/Dashboard.jsx`](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/pages/Dashboard.jsx) (Dashboard), [`routes/authRoutes.js`](https://github.com/palaksukhadeve14/doculens-ai/blob/main/routes/authRoutes.js) (Auth routes), [`client/src/App.jsx`](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/App.jsx) (Route application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web interface"]
  node_app["Route application<br/>[App.jsx]"]
  node_auth_context["Auth context<br/>[AuthContext.jsx]"]
  node_login["Login page<br/>[Login.jsx]"]
  node_register["Registration page<br/>[Register.jsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_header["Dashboard header<br/>[Header.jsx]"]
  node_pdf_uploader["PDF uploader<br/>[PdfUploader.jsx]"]
  node_chat_panel["Chat panel<br/>[ChatPanel.jsx]"]
end

subgraph group_auth["Authentication"]
  node_auth_api["Auth routes<br/>[authRoutes.js]"]
  node_auth_controller["Auth controller<br/>[authControllers.js]"]
  node_auth_middleware["Session auth<br/>[authMiddleware.js]"]
  node_user_model[("User records<br/>[User.js]")]
  node_db_connection["MongoDB connection<br/>[db.js]"]
end

subgraph group_document["Document question answering"]
  node_api_server["API server<br/>[server.js]"]
  node_pdf_ingestion["PDF ingestion<br/>[server.js]"]
  node_document_embeddings["Document embeddings<br/>[server.js]"]
  node_vector_store[("PDF vector store<br/>[server.js]")]
  node_retrieval["Chunk retrieval<br/>[server.js]"]
  node_answer_generation["Answer generation<br/>[server.js]"]
end

node_user(("User"))
node_gemini["Gemini API"]
node_qdrant[("Qdrant service")]
node_mongodb[("MongoDB service")]

node_user -->|"opens"| node_app
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_login
node_app -->|"routes to"| node_register
node_dashboard -->|"renders"| node_header
node_dashboard -->|"renders"| node_pdf_uploader
node_dashboard -->|"renders"| node_chat_panel
node_login -->|"submits login"| node_auth_api
node_auth_context -->|"checks session"| node_auth_api
node_dashboard -->|"uploads and asks"| node_api_server
node_api_server -->|"mounts routes"| node_auth_api
node_auth_api -->|"dispatches to"| node_auth_controller
node_auth_api -->|"protects profile"| node_auth_middleware
node_auth_controller -->|"reads and writes"| node_user_model
node_auth_middleware -->|"loads user"| node_user_model
node_api_server -->|"connects database"| node_db_connection
node_db_connection -->|"connects"| node_mongodb
node_api_server -->|"stores sessions"| node_mongodb
node_api_server -->|"handles upload"| node_pdf_ingestion
node_pdf_ingestion -->|"embeds chunks"| node_document_embeddings
node_document_embeddings -->|"requests embeddings"| node_gemini
node_pdf_ingestion -->|"stores vectors"| node_vector_store
node_vector_store -->|"upserts vectors"| node_qdrant
node_api_server -->|"handles PDF questions"| node_retrieval
node_retrieval -->|"embeds query"| node_document_embeddings
node_retrieval -->|"searches chunks"| node_vector_store
node_vector_store -->|"queries vectors"| node_qdrant
node_retrieval -->|"provides context"| node_answer_generation
node_answer_generation -->|"generates answer"| node_gemini
node_api_server -->|"answers general asks"| node_gemini

click node_app "https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/App.jsx"
click node_auth_context "https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/context/AuthContext.jsx"
click node_login "https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/pages/Login.jsx"
click node_register "https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/pages/Register.jsx"
click node_dashboard "https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/pages/Dashboard.jsx"
click node_header "https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/components/Header.jsx"
click node_pdf_uploader "https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/components/PdfUploader.jsx"
click node_chat_panel "https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/components/ChatPanel.jsx"
click node_auth_api "https://github.com/palaksukhadeve14/doculens-ai/blob/main/routes/authRoutes.js"
click node_auth_controller "https://github.com/palaksukhadeve14/doculens-ai/blob/main/controllers/authControllers.js"
click node_auth_middleware "https://github.com/palaksukhadeve14/doculens-ai/blob/main/middleware/authMiddleware.js"
click node_user_model "https://github.com/palaksukhadeve14/doculens-ai/blob/main/models/User.js"
click node_db_connection "https://github.com/palaksukhadeve14/doculens-ai/blob/main/config/db.js"
click node_api_server "https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js"
click node_pdf_ingestion "https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js"
click node_document_embeddings "https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js"
click node_vector_store "https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js"
click node_retrieval "https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js"
click node_answer_generation "https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.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_app,node_auth_context,node_login,node_register,node_dashboard,node_header,node_pdf_uploader,node_chat_panel,node_user toneBlue
class node_auth_api,node_auth_controller,node_auth_middleware,node_user_model,node_db_connection,node_qdrant,node_mongodb toneAmber
class node_api_server,node_pdf_ingestion,node_document_embeddings,node_vector_store,node_retrieval,node_answer_generation,node_gemini toneMint
```

## Components

### Web interface

- [Route application](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Auth context](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/context/AuthContext.jsx): `client/src/context/AuthContext.jsx`
- [Login page](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/pages/Login.jsx): `client/src/pages/Login.jsx`
- [Registration page](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/pages/Register.jsx): `client/src/pages/Register.jsx`
- [Dashboard](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/pages/Dashboard.jsx): `client/src/pages/Dashboard.jsx`
- [Dashboard header](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/components/Header.jsx): `client/src/components/Header.jsx`
- [PDF uploader](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/components/PdfUploader.jsx): `client/src/components/PdfUploader.jsx`
- [Chat panel](https://github.com/palaksukhadeve14/doculens-ai/blob/main/client/src/components/ChatPanel.jsx): `client/src/components/ChatPanel.jsx`

### Authentication

- [Auth routes](https://github.com/palaksukhadeve14/doculens-ai/blob/main/routes/authRoutes.js): `routes/authRoutes.js`
- [Auth controller](https://github.com/palaksukhadeve14/doculens-ai/blob/main/controllers/authControllers.js): `controllers/authControllers.js`
- [Session auth](https://github.com/palaksukhadeve14/doculens-ai/blob/main/middleware/authMiddleware.js): `middleware/authMiddleware.js`
- [User records](https://github.com/palaksukhadeve14/doculens-ai/blob/main/models/User.js): `models/User.js`
- [MongoDB connection](https://github.com/palaksukhadeve14/doculens-ai/blob/main/config/db.js): `config/db.js`

### Document question answering

- [API server](https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js): `server.js`
- [PDF ingestion](https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js): `server.js`
- [Document embeddings](https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js): `server.js`
- [PDF vector store](https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js): `server.js`
- [Chunk retrieval](https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js): `server.js`
- [Answer generation](https://github.com/palaksukhadeve14/doculens-ai/blob/main/server.js): `server.js`

### Other components

- **User**
- **Gemini API**
- **Qdrant service**
- **MongoDB service**

## Connections

- User → Route application: opens (evidence: `client/src/App.jsx`)
- Route application → Dashboard: routes to (evidence: `client/src/App.jsx`)
- Route application → Login page: routes to (evidence: `client/src/App.jsx`)
- Route application → Registration page: routes to (evidence: `client/src/App.jsx`)
- Dashboard → Dashboard header: renders (evidence: `client/src/pages/Dashboard.jsx`)
- Dashboard → PDF uploader: renders (evidence: `client/src/pages/Dashboard.jsx`)
- Dashboard → Chat panel: renders (evidence: `client/src/pages/Dashboard.jsx`)
- Login page → Auth routes: submits login (evidence: `client/src/pages/Login.jsx`)
- Auth context → Auth routes: checks session (evidence: `client/src/context/AuthContext.jsx`)
- Dashboard → API server: uploads and asks (evidence: `client/src/pages/Dashboard.jsx`)
- API server → Auth routes: mounts routes (evidence: `server.js`)
- Auth routes → Auth controller: dispatches to (evidence: `routes/authRoutes.js`)
- Auth routes → Session auth: protects profile (evidence: `routes/authRoutes.js`)
- Auth controller → User records: reads and writes (evidence: `controllers/authControllers.js`)
- Session auth → User records: loads user (evidence: `middleware/authMiddleware.js`)
- API server → MongoDB connection: connects database (evidence: `server.js`)
- MongoDB connection → MongoDB service: connects (evidence: `config/db.js`)
- API server → MongoDB service: stores sessions (evidence: `server.js`)
- API server → PDF ingestion: handles upload (evidence: `server.js`)
- PDF ingestion → Document embeddings: embeds chunks (evidence: `server.js`)
- Document embeddings → Gemini API: requests embeddings (evidence: `server.js`)
- PDF ingestion → PDF vector store: stores vectors (evidence: `server.js`)
- PDF vector store → Qdrant service: upserts vectors (evidence: `server.js`)
- API server → Chunk retrieval: handles PDF questions (evidence: `server.js`)
- Chunk retrieval → Document embeddings: embeds query (evidence: `server.js`)
- Chunk retrieval → PDF vector store: searches chunks (evidence: `server.js`)
- PDF vector store → Qdrant service: queries vectors (evidence: `server.js`)
- Chunk retrieval → Answer generation: provides context (evidence: `server.js`)
- Answer generation → Gemini API: generates answer (evidence: `server.js`)
- API server → Gemini API: answers general asks (evidence: `server.js`)
