# prashantyadavcode/jobfit-copilot architecture

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

- Interactive diagram: https://gitdiagram.com/prashantyadavcode/jobfit-copilot
- Repository: https://github.com/prashantyadavcode/jobfit-copilot

## Overview

JobFit Copilot is a resume-to-job-description fit analyzer with a separate LaTeX resume-improvement workflow. A user submits a resume and job description through the browser; the API parses uploaded files, extracts resume and JD features, scores their match, and returns gaps and suggestions for display. The user can then submit LaTeX, select sections, and receive rewritten code. The graph includes documented optional model providers; unsampled internals of the LaTeX service are kept together rather than inferred from its name.

Main entry points: [`app/main.py`](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/app/main.py) (FastAPI routes), [`src/services/latex_service.py`](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/latex_service.py) (LaTeX section rewrite), [`src/services/analyzer_service.py`](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/analyzer_service.py) (Analysis coordinator), [`app/static/index.html`](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/app/static/index.html) (Web interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Browser experience"]
  node_browser["Web interface<br/>[index.html]"]
  node_browser_logic["Upload and results UI<br/>[app.js]"]
end

subgraph group_api["API and ingestion"]
  node_api["FastAPI routes<br/>[main.py]"]
  node_request_models["Request schemas<br/>[schemas.py]"]
  node_settings["Application settings<br/>[config.py]"]
  node_file_parser["Resume file parser<br/>[parser_service.py]"]
end

subgraph group_matching["NLP matching"]
  node_analyzer["Analysis coordinator"]
  node_extractor["Feature extraction<br/>[extractor.py]"]
  node_text_utils["Text cleaning<br/>[text_utils.py]"]
  node_matcher["Fit scoring<br/>[matcher_service.py]"]
end

subgraph group_latex["LaTeX improvement"]
  node_latex_service["LaTeX section rewrite<br/>[latex_service.py]"]
end

node_user(("Job seeker"))
node_ollama["Ollama model"]
node_openai["OpenAI API"]
node_latex_compiler["LaTeX compiler"]

node_user -->|"uses"| node_browser
node_browser -->|"runs"| node_browser_logic
node_browser_logic -->|"posts requests"| node_api
node_api -->|"serves UI"| node_browser
node_api -->|"validates requests"| node_request_models
node_api -->|"loads settings"| node_settings
node_api -->|"parses uploads"| node_file_parser
node_api -->|"runs analysis"| node_analyzer
node_analyzer -->|"extracts features"| node_extractor
node_extractor -->|"cleans text"| node_text_utils
node_analyzer -->|"computes match"| node_matcher
node_api -->|"handles LaTeX"| node_latex_service
node_latex_service -->|"requests rewrites"| node_ollama
node_latex_service -->|"requests rewrites"| node_openai
node_latex_service -.->|"may compile"| node_latex_compiler

click node_browser "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/app/static/index.html"
click node_browser_logic "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/app/static/app.js"
click node_api "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/app/main.py"
click node_request_models "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/api/schemas.py"
click node_settings "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/core/config.py"
click node_file_parser "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/parser_service.py"
click node_analyzer "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/analyzer_service.py"
click node_extractor "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/nlp/extractor.py"
click node_text_utils "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/utils/text_utils.py"
click node_matcher "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/matcher_service.py"
click node_latex_service "https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/latex_service.py"

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_browser,node_browser_logic toneBlue
class node_api,node_request_models,node_settings,node_file_parser toneAmber
class node_analyzer,node_extractor,node_text_utils,node_matcher,node_openai toneMint
class node_latex_service toneRose
class node_user,node_ollama,node_latex_compiler toneIndigo
```

## Components

### Browser experience

- [Web interface](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/app/static/index.html): `app/static/index.html`
- [Upload and results UI](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/app/static/app.js): `app/static/app.js`

### API and ingestion

- [FastAPI routes](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/app/main.py): `app/main.py`
- [Request schemas](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/api/schemas.py): `src/api/schemas.py`
- [Application settings](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/core/config.py): `src/core/config.py`
- [Resume file parser](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/parser_service.py): `src/services/parser_service.py`

### NLP matching

- [Analysis coordinator](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/analyzer_service.py): `src/services/analyzer_service.py`
- [Feature extraction](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/nlp/extractor.py): `src/nlp/extractor.py`
- [Text cleaning](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/utils/text_utils.py): `src/utils/text_utils.py`
- [Fit scoring](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/matcher_service.py): `src/services/matcher_service.py`

### LaTeX improvement

- [LaTeX section rewrite](https://github.com/prashantyadavcode/jobfit-copilot/blob/main/src/services/latex_service.py): `src/services/latex_service.py`

### Other components

- **Job seeker**
- **Ollama model**
- **OpenAI API**
- **LaTeX compiler**

## Connections

- Job seeker → Web interface: uses (evidence: `README.md`)
- Web interface → Upload and results UI: runs (evidence: `README.md`)
- Upload and results UI → FastAPI routes: posts requests (evidence: `app/static/app.js`)
- FastAPI routes → Web interface: serves UI (evidence: `README.md`)
- FastAPI routes → Request schemas: validates requests (evidence: `app/main.py`)
- FastAPI routes → Application settings: loads settings (evidence: `app/main.py`)
- FastAPI routes → Resume file parser: parses uploads (evidence: `app/main.py`)
- FastAPI routes → Analysis coordinator: runs analysis (evidence: `app/main.py`)
- Analysis coordinator → Feature extraction: extracts features (evidence: `src/services/analyzer_service.py`)
- Feature extraction → Text cleaning: cleans text (evidence: `src/nlp/extractor.py`)
- Analysis coordinator → Fit scoring: computes match (evidence: `src/services/analyzer_service.py`)
- FastAPI routes → LaTeX section rewrite: handles LaTeX (evidence: `app/main.py`)
- LaTeX section rewrite → Ollama model: requests rewrites (evidence: `src/services/latex_service.py`)
- LaTeX section rewrite → OpenAI API: requests rewrites (evidence: `src/services/latex_service.py`)
- LaTeX section rewrite → LaTeX compiler: may compile
