# jeys47/cv-parser-ai architecture

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

- Interactive diagram: https://gitdiagram.com/jeys47/cv-parser-ai
- Repository: https://github.com/jeys47/cv-parser-ai

## Overview

This Streamlit ATS lets HR publish job offers, upload CVs for parsing and candidate evaluation, then review ranked results and export shortlists or reserve lists. The main path runs from upload through document parsing, contact/skill extraction, hybrid scoring, and persistence; offer management and dashboard review are separate UI workflows. The excerpts show the pipeline and scoring implementation, but only parts of the UI, so uncertain dashboard and upload details are not expanded.

Main entry points: [`pipeline.py`](https://github.com/jeys47/cv-parser-ai/blob/main/pipeline.py) (Application pipeline), [`app.py`](https://github.com/jeys47/cv-parser-ai/blob/main/app.py) (Ranking dashboard), [`scorer.py`](https://github.com/jeys47/cv-parser-ai/blob/main/scorer.py) (Hybrid scoring), [`models.py`](https://github.com/jeys47/cv-parser-ai/blob/main/models.py) (ATS records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["HR interface"]
  node_upload["CV upload<br/>[app.py]"]
  node_offers["Offer management<br/>[app.py]"]
  node_dashboard["Ranking dashboard<br/>[app.py]"]
  node_exports["CSV exports<br/>[app.py]"]
end

subgraph group_processing["CV processing"]
  node_pipeline["Application pipeline<br/>[pipeline.py]"]
  node_document_parser["Document parser<br/>[parser.py]"]
  node_cv_extraction["Contact and skills<br/>[extractor.py]"]
end

subgraph group_matching["Candidate matching"]
  node_scoring["Hybrid scoring<br/>[scorer.py]"]
  node_semantic["Semantic similarity<br/>[scorer.py]"]
  node_skills_match["Skills coverage<br/>[scorer.py]"]
end

subgraph group_persistence["Application data"]
  node_schema["ATS records<br/>[models.py]"]
  node_database[("Relational database<br/>[database.py]")]
end

node_hr(("HR user"))

node_hr -->|"creates offers"| node_offers
node_hr -->|"uploads CVs"| node_upload
node_hr -->|"reviews rankings"| node_dashboard
node_offers -->|"writes offers"| node_database
node_offers -->|"creates JobOffer"| node_schema
node_upload -->|"submits files"| node_pipeline
node_pipeline -->|"parses document"| node_document_parser
node_pipeline -->|"extracts fields"| node_cv_extraction
node_pipeline -->|"saves candidates and scores"| node_database
node_pipeline -->|"creates candidate records"| node_schema
node_pipeline -->|"requests evaluation"| node_scoring
node_scoring -->|"computes similarity"| node_semantic
node_scoring -->|"computes coverage"| node_skills_match
node_dashboard -->|"reads offers and scores"| node_database
node_dashboard -->|"uses candidate records"| node_schema
node_dashboard -->|"downloads lists"| node_exports

click node_upload "https://github.com/jeys47/cv-parser-ai/blob/main/app.py"
click node_offers "https://github.com/jeys47/cv-parser-ai/blob/main/app.py"
click node_dashboard "https://github.com/jeys47/cv-parser-ai/blob/main/app.py"
click node_exports "https://github.com/jeys47/cv-parser-ai/blob/main/app.py"
click node_pipeline "https://github.com/jeys47/cv-parser-ai/blob/main/pipeline.py"
click node_document_parser "https://github.com/jeys47/cv-parser-ai/blob/main/parser.py"
click node_cv_extraction "https://github.com/jeys47/cv-parser-ai/blob/main/extractor.py"
click node_scoring "https://github.com/jeys47/cv-parser-ai/blob/main/scorer.py"
click node_semantic "https://github.com/jeys47/cv-parser-ai/blob/main/scorer.py"
click node_skills_match "https://github.com/jeys47/cv-parser-ai/blob/main/scorer.py"
click node_schema "https://github.com/jeys47/cv-parser-ai/blob/main/models.py"
click node_database "https://github.com/jeys47/cv-parser-ai/blob/main/database.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_upload,node_offers,node_dashboard,node_exports,node_hr toneBlue
class node_pipeline,node_document_parser,node_cv_extraction toneAmber
class node_scoring,node_semantic,node_skills_match toneMint
class node_schema,node_database toneRose
```

## Components

### HR interface

- [CV upload](https://github.com/jeys47/cv-parser-ai/blob/main/app.py): `app.py`
- [Offer management](https://github.com/jeys47/cv-parser-ai/blob/main/app.py): `app.py`
- [Ranking dashboard](https://github.com/jeys47/cv-parser-ai/blob/main/app.py): `app.py`
- [CSV exports](https://github.com/jeys47/cv-parser-ai/blob/main/app.py): `app.py`

### CV processing

- [Application pipeline](https://github.com/jeys47/cv-parser-ai/blob/main/pipeline.py): `pipeline.py`
- [Document parser](https://github.com/jeys47/cv-parser-ai/blob/main/parser.py): `parser.py`
- [Contact and skills](https://github.com/jeys47/cv-parser-ai/blob/main/extractor.py): `extractor.py`

### Candidate matching

- [Hybrid scoring](https://github.com/jeys47/cv-parser-ai/blob/main/scorer.py): `scorer.py`
- [Semantic similarity](https://github.com/jeys47/cv-parser-ai/blob/main/scorer.py): `scorer.py`
- [Skills coverage](https://github.com/jeys47/cv-parser-ai/blob/main/scorer.py): `scorer.py`

### Application data

- [ATS records](https://github.com/jeys47/cv-parser-ai/blob/main/models.py): `models.py`
- [Relational database](https://github.com/jeys47/cv-parser-ai/blob/main/database.py): `database.py`

### Other components

- **HR user**

## Connections

- HR user → Offer management: creates offers
- HR user → CV upload: uploads CVs
- HR user → Ranking dashboard: reviews rankings
- Offer management → Relational database: writes offers
- Offer management → ATS records: creates JobOffer
- CV upload → Application pipeline: submits files
- Application pipeline → Document parser: parses document
- Application pipeline → Contact and skills: extracts fields
- Application pipeline → Relational database: saves candidates and scores
- Application pipeline → ATS records: creates candidate records
- Application pipeline → Hybrid scoring: requests evaluation
- Hybrid scoring → Semantic similarity: computes similarity
- Hybrid scoring → Skills coverage: computes coverage
- Ranking dashboard → Relational database: reads offers and scores
- Ranking dashboard → ATS records: uses candidate records
- Ranking dashboard → CSV exports: downloads lists
