# devartslab/documind architecture

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

- Interactive diagram: https://gitdiagram.com/devartslab/documind
- Repository: https://github.com/devartslab/documind

## Overview

DocuMind is a document-ingestion and RAG question-answering application. Users upload PDF or text files, which the backend parses, chunks, embeds, and indexes; questions are embedded to retrieve relevant chunks, then answered with an LLM and cited sources. The React UI also supports document status/list management and conversation history. The graph reflects sampled service and controller calls plus README-documented capabilities; LangChain wiring and deployment resources are represented only where the tree or documentation supports them.

Main entry points: [`infra/lib/documind-stack.ts`](https://github.com/devartslab/documind/blob/main/infra/lib/documind-stack.ts) (AWS stack), [`frontend/src/api.ts`](https://github.com/devartslab/documind/blob/main/frontend/src/api.ts) (API client), [`frontend/src/App.tsx`](https://github.com/devartslab/documind/blob/main/frontend/src/App.tsx) (App workflow), [`backend/src/main/java/com/documind/service/QaService.java`](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/service/QaService.java) (RAG answering)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Web interface"]
  node_app["App workflow<br/>[App.tsx]"]
  node_upload_ui["Document upload<br/>[DocumentUpload.tsx]"]
  node_list_ui["Document list<br/>[DocumentList.tsx]"]
  node_chat_ui["Chat interface<br/>[ChatInterface.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_api["Application services"]
  node_doc_controller["Document API"]
  node_qa_controller["Q&amp;A API<br/>[QaController.java]"]
  node_doc_service["Document processing"]
  node_qa_service["RAG answering<br/>[QaService.java]"]
end

subgraph group_state["Persistence and AI"]
  node_document_repo["Document repository"]
  node_chat_repo["Chat repository"]
  node_postgres[("PostgreSQL")]
  node_vector_store[("Embedding index")]
  node_embed_model["Embedding model"]
  node_chat_model["Chat model"]
end

subgraph group_cloud["AWS deployment"]
  node_cloud_stack["AWS stack<br/>[documind-stack.ts]"]
  node_cloudfront["CloudFront"]
  node_frontend_bucket[("Frontend bucket")]
  node_ecs["Backend service"]
  node_rds[("RDS PostgreSQL")]
  node_docs_bucket[("Documents bucket")]
  node_secrets[("Secrets Manager")]
end

node_user(("User"))
node_openai{{"OpenAI"}}

node_user -->|"uses"| node_app
node_app -->|"renders"| node_upload_ui
node_app -->|"renders"| node_list_ui
node_app -->|"renders"| node_chat_ui
node_app -->|"refreshes status"| node_api_client
node_upload_ui -->|"uploads file"| node_api_client
node_list_ui -->|"manages documents"| node_api_client
node_chat_ui -->|"asks questions"| node_api_client
node_api_client -->|"HTTP requests"| node_doc_controller
node_api_client -->|"HTTP requests"| node_qa_controller
node_doc_controller -->|"calls"| node_doc_service
node_qa_controller -->|"calls"| node_qa_service
node_doc_service -->|"saves and loads"| node_document_repo
node_doc_service -->|"embeds chunks"| node_embed_model
node_doc_service -->|"indexes chunks"| node_vector_store
node_qa_service -->|"embeds question"| node_embed_model
node_qa_service -->|"searches chunks"| node_vector_store
node_qa_service -->|"generates answer"| node_chat_model
node_qa_service -->|"reads and saves history"| node_chat_repo
node_document_repo -->|"persists metadata"| node_postgres
node_chat_repo -->|"persists messages"| node_postgres
node_chat_model -.->|"calls model"| node_openai
node_cloud_stack -->|"provisions"| node_cloudfront
node_cloud_stack -->|"provisions"| node_frontend_bucket
node_cloud_stack -->|"provisions"| node_ecs
node_cloud_stack -->|"provisions"| node_rds
node_cloud_stack -->|"provisions"| node_docs_bucket
node_cloud_stack -->|"provisions"| node_secrets
node_cloudfront -->|"serves assets"| node_frontend_bucket
node_cloudfront -->|"routes API"| node_ecs
node_ecs -->|"connects"| node_rds

click node_app "https://github.com/devartslab/documind/blob/main/frontend/src/App.tsx"
click node_upload_ui "https://github.com/devartslab/documind/blob/main/frontend/src/components/DocumentUpload.tsx"
click node_list_ui "https://github.com/devartslab/documind/blob/main/frontend/src/components/DocumentList.tsx"
click node_chat_ui "https://github.com/devartslab/documind/blob/main/frontend/src/components/ChatInterface.tsx"
click node_api_client "https://github.com/devartslab/documind/blob/main/frontend/src/api.ts"
click node_doc_controller "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/controller/DocumentController.java"
click node_qa_controller "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/controller/QaController.java"
click node_doc_service "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/service/DocumentService.java"
click node_qa_service "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/service/QaService.java"
click node_document_repo "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/repository/DocumentRepository.java"
click node_chat_repo "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/repository/ChatMessageRepository.java"
click node_vector_store "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/config/LangChainConfig.java"
click node_embed_model "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/config/LangChainConfig.java"
click node_chat_model "https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/config/LangChainConfig.java"
click node_cloud_stack "https://github.com/devartslab/documind/blob/main/infra/lib/documind-stack.ts"

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_upload_ui,node_list_ui,node_chat_ui,node_api_client,node_user toneBlue
class node_doc_controller,node_qa_controller,node_doc_service,node_qa_service toneAmber
class node_document_repo,node_chat_repo,node_postgres,node_vector_store,node_embed_model,node_chat_model toneMint
class node_cloud_stack,node_cloudfront,node_frontend_bucket,node_ecs,node_rds,node_docs_bucket,node_secrets toneRose
class node_openai toneIndigo
```

## Components

### Web interface

- [App workflow](https://github.com/devartslab/documind/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Document upload](https://github.com/devartslab/documind/blob/main/frontend/src/components/DocumentUpload.tsx): `frontend/src/components/DocumentUpload.tsx`
- [Document list](https://github.com/devartslab/documind/blob/main/frontend/src/components/DocumentList.tsx): `frontend/src/components/DocumentList.tsx`
- [Chat interface](https://github.com/devartslab/documind/blob/main/frontend/src/components/ChatInterface.tsx): `frontend/src/components/ChatInterface.tsx`
- [API client](https://github.com/devartslab/documind/blob/main/frontend/src/api.ts): `frontend/src/api.ts`

### Application services

- [Document API](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/controller/DocumentController.java): `backend/src/main/java/com/documind/controller/DocumentController.java`
- [Q&A API](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/controller/QaController.java): `backend/src/main/java/com/documind/controller/QaController.java`
- [Document processing](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/service/DocumentService.java): `backend/src/main/java/com/documind/service/DocumentService.java`
- [RAG answering](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/service/QaService.java): `backend/src/main/java/com/documind/service/QaService.java`

### Persistence and AI

- [Document repository](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/repository/DocumentRepository.java): `backend/src/main/java/com/documind/repository/DocumentRepository.java`
- [Chat repository](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/repository/ChatMessageRepository.java): `backend/src/main/java/com/documind/repository/ChatMessageRepository.java`
- **PostgreSQL**
- [Embedding index](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/config/LangChainConfig.java): `backend/src/main/java/com/documind/config/LangChainConfig.java`
- [Embedding model](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/config/LangChainConfig.java): `backend/src/main/java/com/documind/config/LangChainConfig.java`
- [Chat model](https://github.com/devartslab/documind/blob/main/backend/src/main/java/com/documind/config/LangChainConfig.java): `backend/src/main/java/com/documind/config/LangChainConfig.java`

### AWS deployment

- [AWS stack](https://github.com/devartslab/documind/blob/main/infra/lib/documind-stack.ts): `infra/lib/documind-stack.ts`
- **CloudFront**
- **Frontend bucket**
- **Backend service**
- **RDS PostgreSQL**
- **Documents bucket**
- **Secrets Manager**

### Other components

- **User**
- **OpenAI**

## Connections

- User → App workflow: uses
- App workflow → Document upload: renders
- App workflow → Document list: renders
- App workflow → Chat interface: renders
- App workflow → API client: refreshes status
- Document upload → API client: uploads file
- Document list → API client: manages documents
- Chat interface → API client: asks questions
- API client → Document API: HTTP requests
- API client → Q&A API: HTTP requests
- Document API → Document processing: calls
- Q&A API → RAG answering: calls
- Document processing → Document repository: saves and loads
- Document processing → Embedding model: embeds chunks
- Document processing → Embedding index: indexes chunks
- RAG answering → Embedding model: embeds question
- RAG answering → Embedding index: searches chunks
- RAG answering → Chat model: generates answer
- RAG answering → Chat repository: reads and saves history
- Document repository → PostgreSQL: persists metadata
- Chat repository → PostgreSQL: persists messages
- Chat model → OpenAI: calls model
- AWS stack → CloudFront: provisions
- AWS stack → Frontend bucket: provisions
- AWS stack → Backend service: provisions
- AWS stack → RDS PostgreSQL: provisions
- AWS stack → Documents bucket: provisions
- AWS stack → Secrets Manager: provisions
- CloudFront → Frontend bucket: serves assets
- CloudFront → Backend service: routes API
- Backend service → RDS PostgreSQL: connects
