# mattakarthikeya1232/resumelens architecture

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

- Interactive diagram: https://gitdiagram.com/mattakarthikeya1232/resumelens
- Repository: https://github.com/mattakarthikeya1232/resumelens

## Overview

ResumeLens is a local-first resume analysis application: a user uploads a PDF or DOCX, receives evidence-backed technical and professional classifications and an explanation, then can review reports, history, settings, and runtime diagnostics. The Java analysis service orchestrates parsing, section and candidate extraction, classification, explanation, and session-only result storage. Optional local ONNX embeddings and a trusted local LLM enhance analysis without being required. Frontend page behavior and some orchestration details were not sampled; those connections rely on documented capabilities, and uncertain wiring is omitted.

Main entry points: [`backend/src/main/java/com/resumelens/service/ResumeAnalysisService.java`](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/ResumeAnalysisService.java) (Analysis orchestrator), [`backend/src/main/java/com/resumelens/controller/ResumeController.java`](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/controller/ResumeController.java) (REST controller), [`backend/src/main/java/com/resumelens/service/DiagnosticsService.java`](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/DiagnosticsService.java) (Runtime diagnostics), [`backend/src/main/java/com/resumelens/llm/LocalLlmService.java`](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/llm/LocalLlmService.java) (Local LLM adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["ResumeLens UI"]
  node_app["React application<br/>[App.tsx]"]
  node_pages["Product pages"]
  node_client["API client<br/>[api.ts]"]
end

subgraph group_api["API and sessions"]
  node_controller["REST controller"]
  node_report["Analysis result"]
  node_session["Session history"]
  node_diagnostics["Runtime diagnostics"]
  node_diagnostics_dto["Diagnostics response<br/>[Diagnostics.java]"]
end

subgraph group_analysis["Resume analysis"]
  node_analysis_service["Analysis orchestrator"]
  node_extractors["PDF and DOCX parsing"]
  node_pdf["PDF extractor"]
  node_docx["DOCX extractor"]
  node_sections["Section detection"]
  node_candidate["Candidate extraction"]
  node_classifier["Evidence classifier"]
  node_catalog["Skill catalog<br/>[SkillCatalog.java]"]
  node_fallback["Deterministic explanation"]
end

subgraph group_optional["Optional local models"]
  node_llm["Local LLM adapter"]
  node_onnx["MiniLM embeddings"]
end

node_user(("Resume user"))
node_local_process(("Trusted local runner"))

node_user -->|"uses"| node_app
node_app -->|"routes"| node_pages
node_pages -->|"requests"| node_client
node_client -->|"HTTP requests"| node_controller
node_controller -->|"analyzes and retrieves"| node_analysis_service
node_analysis_service -->|"extracts text"| node_extractors
node_pdf -->|"implements"| node_extractors
node_docx -->|"implements"| node_extractors
node_analysis_service -->|"detects sections"| node_sections
node_analysis_service -->|"extracts candidate info"| node_candidate
node_analysis_service -->|"classifies sections"| node_classifier
node_classifier -->|"matches skills"| node_catalog
node_classifier -.->|"requests relevance"| node_onnx
node_analysis_service -->|"creates explanation"| node_fallback
node_analysis_service -.->|"requests explanation"| node_llm
node_llm -.->|"runs prompt"| node_local_process
node_analysis_service -->|"builds result"| node_report
node_analysis_service -->|"stores and reads"| node_session
node_controller -->|"requests snapshot"| node_diagnostics
node_diagnostics -->|"reads model status"| node_onnx
node_diagnostics -->|"reads adapter status"| node_llm
node_diagnostics -->|"returns snapshot"| node_diagnostics_dto
node_controller -->|"reads or updates settings"| node_llm

click node_app "https://github.com/mattakarthikeya1232/resumelens/blob/main/frontend/src/App.tsx"
click node_pages "https://github.com/mattakarthikeya1232/resumelens/tree/main/frontend/src/pages"
click node_client "https://github.com/mattakarthikeya1232/resumelens/blob/main/frontend/src/services/api.ts"
click node_controller "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/controller/ResumeController.java"
click node_analysis_service "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/ResumeAnalysisService.java"
click node_extractors "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/DocumentTextExtractor.java"
click node_pdf "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/PdfTextExtractor.java"
click node_docx "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/DocxTextExtractor.java"
click node_sections "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/SectionDetector.java"
click node_candidate "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/CandidateInfoExtractor.java"
click node_classifier "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/ClassifierService.java"
click node_catalog "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/SkillCatalog.java"
click node_report "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/dto/AnalysisResult.java"
click node_session "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/ResumeAnalysisService.java"
click node_fallback "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/llm/DeterministicExplanationService.java"
click node_llm "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/llm/LocalLlmService.java"
click node_onnx "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/OnnxEmbeddingService.java"
click node_diagnostics "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/DiagnosticsService.java"
click node_diagnostics_dto "https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/dto/Diagnostics.java"

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_pages,node_client,node_user toneBlue
class node_controller,node_report,node_session,node_diagnostics,node_diagnostics_dto toneAmber
class node_analysis_service,node_extractors,node_pdf,node_docx,node_sections,node_candidate,node_classifier,node_catalog,node_fallback toneMint
class node_llm,node_onnx toneRose
class node_local_process toneIndigo
```

## Components

### ResumeLens UI

- [React application](https://github.com/mattakarthikeya1232/resumelens/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Product pages](https://github.com/mattakarthikeya1232/resumelens/tree/main/frontend/src/pages): `frontend/src/pages`
- [API client](https://github.com/mattakarthikeya1232/resumelens/blob/main/frontend/src/services/api.ts): `frontend/src/services/api.ts`

### API and sessions

- [REST controller](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/controller/ResumeController.java): `backend/src/main/java/com/resumelens/controller/ResumeController.java`
- [Analysis result](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/dto/AnalysisResult.java): `backend/src/main/java/com/resumelens/dto/AnalysisResult.java`
- [Session history](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/ResumeAnalysisService.java): `backend/src/main/java/com/resumelens/service/ResumeAnalysisService.java`
- [Runtime diagnostics](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/DiagnosticsService.java): `backend/src/main/java/com/resumelens/service/DiagnosticsService.java`
- [Diagnostics response](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/dto/Diagnostics.java): `backend/src/main/java/com/resumelens/dto/Diagnostics.java`

### Resume analysis

- [Analysis orchestrator](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/ResumeAnalysisService.java): `backend/src/main/java/com/resumelens/service/ResumeAnalysisService.java`
- [PDF and DOCX parsing](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/DocumentTextExtractor.java): `backend/src/main/java/com/resumelens/parser/DocumentTextExtractor.java`
- [PDF extractor](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/PdfTextExtractor.java): `backend/src/main/java/com/resumelens/parser/PdfTextExtractor.java`
- [DOCX extractor](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/DocxTextExtractor.java): `backend/src/main/java/com/resumelens/parser/DocxTextExtractor.java`
- [Section detection](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/SectionDetector.java): `backend/src/main/java/com/resumelens/parser/SectionDetector.java`
- [Candidate extraction](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/parser/CandidateInfoExtractor.java): `backend/src/main/java/com/resumelens/parser/CandidateInfoExtractor.java`
- [Evidence classifier](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/ClassifierService.java): `backend/src/main/java/com/resumelens/service/ClassifierService.java`
- [Skill catalog](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/SkillCatalog.java): `backend/src/main/java/com/resumelens/service/SkillCatalog.java`
- [Deterministic explanation](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/llm/DeterministicExplanationService.java): `backend/src/main/java/com/resumelens/llm/DeterministicExplanationService.java`

### Optional local models

- [Local LLM adapter](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/llm/LocalLlmService.java): `backend/src/main/java/com/resumelens/llm/LocalLlmService.java`
- [MiniLM embeddings](https://github.com/mattakarthikeya1232/resumelens/blob/main/backend/src/main/java/com/resumelens/service/OnnxEmbeddingService.java): `backend/src/main/java/com/resumelens/service/OnnxEmbeddingService.java`

### Other components

- **Resume user**
- **Trusted local runner**

## Connections

- Resume user → React application: uses
- React application → Product pages: routes
- Product pages → API client: requests
- API client → REST controller: HTTP requests
- REST controller → Analysis orchestrator: analyzes and retrieves
- Analysis orchestrator → PDF and DOCX parsing: extracts text
- PDF extractor → PDF and DOCX parsing: implements
- DOCX extractor → PDF and DOCX parsing: implements
- Analysis orchestrator → Section detection: detects sections
- Analysis orchestrator → Candidate extraction: extracts candidate info
- Analysis orchestrator → Evidence classifier: classifies sections
- Evidence classifier → Skill catalog: matches skills
- Evidence classifier → MiniLM embeddings: requests relevance
- Analysis orchestrator → Deterministic explanation: creates explanation
- Analysis orchestrator → Local LLM adapter: requests explanation
- Local LLM adapter → Trusted local runner: runs prompt
- Analysis orchestrator → Analysis result: builds result
- Analysis orchestrator → Session history: stores and reads
- REST controller → Runtime diagnostics: requests snapshot
- Runtime diagnostics → MiniLM embeddings: reads model status
- Runtime diagnostics → Local LLM adapter: reads adapter status
- Runtime diagnostics → Diagnostics response: returns snapshot
- REST controller → Local LLM adapter: reads or updates settings
