# suryashkhrdutta/ai-resume-rating architecture

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

- Interactive diagram: https://gitdiagram.com/suryashkhrdutta/ai-resume-rating
- Repository: https://github.com/suryashkhrdutta/ai-resume-rating

## Overview

AI Resume Rating is a command-line tool that parses a job description and a folder of PDF/DOCX resumes, asks Groq to extract and compare structured requirements, then applies a deterministic Python rubric to rank candidates. Its results include skill matches and gaps, evidence, strengths, quality issues, and suggestions; they can be displayed in the terminal or exported as JSON/CSV. The README documents the workflow and capabilities; the sampled implementation is concentrated in one module, so several components share its path.

Main entry points: [`src/resumeRating/__init__.py`](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py) (CLI entry), [`resume_parser.py`](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/resume_parser.py) (Legacy launcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_intake["Inputs and CLI"]
  node_cli["CLI entry<br/>[__init__.py]"]
  node_job_input["Job description<br/>[__init__.py]"]
  node_resume_files["Resume files<br/>[__init__.py]"]
  node_resume_reader["PDF/DOCX reader<br/>[__init__.py]"]
end

subgraph group_analysis["LLM Analysis"]
  node_job_parser["Job parser<br/>[__init__.py]"]
  node_resume_parser["Resume parser<br/>[__init__.py]"]
  node_match_analysis["Match analysis<br/>[__init__.py]"]
  node_structured_data["Validated profiles<br/>[__init__.py]"]
end

subgraph group_results["Scoring and Results"]
  node_scoring["Rubric scoring<br/>[__init__.py]"]
  node_candidate_results["Candidate results<br/>[__init__.py]"]
  node_ranking["Ranked summary<br/>[__init__.py]"]
  node_terminal["Terminal output<br/>[__init__.py]"]
  node_export["JSON/CSV export<br/>[__init__.py]"]
end

subgraph group_runtime["Runtime Integration"]
  node_groq{{"Groq API"}}
  node_resume_parser_script["Legacy launcher<br/>[resume_parser.py]"]
end

node_user(("Recruiter"))
node_export_files["Export files"]

node_user -->|"runs"| node_cli
node_user -->|"provides"| node_job_input
node_user -->|"places resumes"| node_resume_files
node_cli -->|"reads"| node_job_input
node_cli -->|"processes folder"| node_resume_files
node_resume_files -->|"supplies files"| node_resume_reader
node_resume_reader -->|"extracts text"| node_resume_parser
node_job_input -->|"extracts requirements"| node_job_parser
node_resume_parser -->|"validates profile"| node_structured_data
node_job_parser -->|"validates requirements"| node_structured_data
node_job_parser -->|"requests extraction"| node_groq
node_resume_parser -->|"requests extraction"| node_groq
node_match_analysis -->|"requests comparison"| node_groq
node_structured_data -->|"compares profiles"| node_match_analysis
node_match_analysis -->|"provides judgments"| node_scoring
node_scoring -->|"computes breakdown"| node_candidate_results
node_candidate_results -->|"sorts candidates"| node_ranking
node_ranking -->|"prints summary"| node_terminal
node_candidate_results -->|"serializes results"| node_export
node_export -->|"writes files"| node_export_files
node_resume_parser_script -->|"invokes main"| node_cli

click node_cli "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_job_input "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_resume_files "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_resume_reader "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_job_parser "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_resume_parser "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_match_analysis "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_structured_data "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_scoring "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_candidate_results "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_ranking "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_terminal "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_export "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py"
click node_resume_parser_script "https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/resume_parser.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_cli,node_job_input,node_resume_files,node_resume_reader toneBlue
class node_job_parser,node_resume_parser,node_match_analysis,node_structured_data toneAmber
class node_scoring,node_candidate_results,node_ranking,node_terminal,node_export toneMint
class node_groq,node_resume_parser_script toneRose
class node_user,node_export_files toneIndigo
```

## Components

### Inputs and CLI

- [CLI entry](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [Job description](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [Resume files](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [PDF/DOCX reader](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`

### LLM Analysis

- [Job parser](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [Resume parser](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [Match analysis](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [Validated profiles](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`

### Scoring and Results

- [Rubric scoring](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [Candidate results](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [Ranked summary](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [Terminal output](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`
- [JSON/CSV export](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/src/resumeRating/__init__.py): `src/resumeRating/__init__.py`

### Runtime Integration

- **Groq API**
- [Legacy launcher](https://github.com/suryashkhrdutta/ai-resume-rating/blob/main/resume_parser.py): `resume_parser.py`

### Other components

- **Recruiter**
- **Export files**

## Connections

- Recruiter → CLI entry: runs (evidence: `README.md`)
- Recruiter → Job description: provides (evidence: `README.md`)
- Recruiter → Resume files: places resumes (evidence: `README.md`)
- CLI entry → Job description: reads (evidence: `README.md`)
- CLI entry → Resume files: processes folder (evidence: `README.md`)
- Resume files → PDF/DOCX reader: supplies files (evidence: `README.md`)
- PDF/DOCX reader → Resume parser: extracts text (evidence: `README.md`)
- Job description → Job parser: extracts requirements (evidence: `README.md`)
- Resume parser → Validated profiles: validates profile (evidence: `README.md`)
- Job parser → Validated profiles: validates requirements (evidence: `README.md`)
- Job parser → Groq API: requests extraction (evidence: `src/resumeRating/__init__.py`)
- Resume parser → Groq API: requests extraction (evidence: `src/resumeRating/__init__.py`)
- Match analysis → Groq API: requests comparison (evidence: `src/resumeRating/__init__.py`)
- Validated profiles → Match analysis: compares profiles (evidence: `README.md`)
- Match analysis → Rubric scoring: provides judgments (evidence: `README.md`)
- Rubric scoring → Candidate results: computes breakdown (evidence: `src/resumeRating/__init__.py`)
- Candidate results → Ranked summary: sorts candidates (evidence: `README.md`)
- Ranked summary → Terminal output: prints summary (evidence: `README.md`)
- Candidate results → JSON/CSV export: serializes results (evidence: `src/resumeRating/__init__.py`)
- JSON/CSV export → Export files: writes files (evidence: `src/resumeRating/__init__.py`)
- Legacy launcher → CLI entry: invokes main (evidence: `resume_parser.py`)
