# navyanaik30/resume-job-matcher architecture

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

- Interactive diagram: https://gitdiagram.com/navyanaik30/resume-job-matcher
- Repository: https://github.com/navyanaik30/resume-job-matcher

## Overview

This is a resume-to-job matcher: a user submits a resume PDF and job description, and the Flask endpoint returns an overall match, text and skill scores, matched and missing skills, and recommendations. Internally, the endpoint extracts and validates resume text, computes TF-IDF similarity and skill gaps, then scores features with a trained Random Forest. Separate dataset preparation and training scripts produce the runtime model artifacts. The tree includes a frontend, but its source was not sampled, so its request wiring is uncertain.

Main entry points: [`app.py`](https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py) (Flask API), [`prepare_data.py`](https://github.com/navyanaik30/resume-job-matcher/blob/main/prepare_data.py) (Dataset Preparation), [`train_model.py`](https://github.com/navyanaik30/resume-job-matcher/blob/main/train_model.py) (Model Training), [`skill_gap.py`](https://github.com/navyanaik30/resume-job-matcher/blob/main/skill_gap.py) (Skill Gap)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_matching["Match Analysis"]
  node_api["Flask API<br/>[app.py]"]
  node_pdf["PDF Extraction<br/>[pdf_reader.py]"]
  node_validation["Resume Validation<br/>[app.py]"]
  node_similarity["Text Similarity<br/>[app.py]"]
  node_skills["Skill Gap<br/>[skill_gap.py]"]
  node_scoring["Match Scoring<br/>[app.py]"]
end

subgraph group_presentation["User Interface"]
  node_frontend["Frontend<br/>[index.html]"]
end

subgraph group_training["Model Preparation"]
  node_prepare["Dataset Preparation<br/>[prepare_data.py]"]
  node_training_job["Model Training<br/>[train_model.py]"]
end

subgraph group_assets["Data And Artifacts"]
  node_raw_data[("Source Dataset<br/>[job_resume_fit.csv]")]
  node_processed_data[("Processed Dataset")]
  node_model["Random Forest<br/>[model.pkl]"]
  node_vectorizer["TF-IDF Vectorizer<br/>[vectorizer.pkl]"]
end

node_user(("User"))

node_user -->|"uses"| node_frontend
node_user -->|"submits PDF and job text"| node_api
node_api -->|"extracts text"| node_pdf
node_api -->|"validates resume"| node_validation
node_api -->|"computes similarity"| node_similarity
node_api -->|"requests skill gap"| node_skills
node_api -->|"scores features"| node_scoring
node_api -->|"transforms text"| node_vectorizer
node_api -->|"predicts match"| node_model
node_api -.->|"returns results"| node_frontend
node_prepare -->|"reads"| node_raw_data
node_prepare -->|"calculates skill gaps"| node_skills
node_prepare -->|"writes"| node_processed_data
node_training_job -->|"reads"| node_processed_data
node_training_job -->|"writes"| node_model
node_training_job -->|"writes"| node_vectorizer

click node_frontend "https://github.com/navyanaik30/resume-job-matcher/blob/main/frontend/index.html"
click node_api "https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py"
click node_pdf "https://github.com/navyanaik30/resume-job-matcher/blob/main/pdf_reader.py"
click node_validation "https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py"
click node_similarity "https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py"
click node_skills "https://github.com/navyanaik30/resume-job-matcher/blob/main/skill_gap.py"
click node_scoring "https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py"
click node_raw_data "https://github.com/navyanaik30/resume-job-matcher/blob/main/dataset/job_resume_fit.csv"
click node_prepare "https://github.com/navyanaik30/resume-job-matcher/blob/main/prepare_data.py"
click node_processed_data "https://github.com/navyanaik30/resume-job-matcher/blob/main/dataset/processed_dataset.csv"
click node_training_job "https://github.com/navyanaik30/resume-job-matcher/blob/main/train_model.py"
click node_model "https://github.com/navyanaik30/resume-job-matcher/blob/main/model.pkl"
click node_vectorizer "https://github.com/navyanaik30/resume-job-matcher/blob/main/vectorizer.pkl"

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_api,node_pdf,node_validation,node_similarity,node_skills,node_scoring,node_user toneBlue
class node_frontend toneAmber
class node_prepare,node_training_job toneMint
class node_raw_data,node_processed_data,node_model,node_vectorizer toneRose
```

## Components

### Match Analysis

- [Flask API](https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py): `app.py`
- [PDF Extraction](https://github.com/navyanaik30/resume-job-matcher/blob/main/pdf_reader.py): `pdf_reader.py`
- [Resume Validation](https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py): `app.py`
- [Text Similarity](https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py): `app.py`
- [Skill Gap](https://github.com/navyanaik30/resume-job-matcher/blob/main/skill_gap.py): `skill_gap.py`
- [Match Scoring](https://github.com/navyanaik30/resume-job-matcher/blob/main/app.py): `app.py`

### User Interface

- [Frontend](https://github.com/navyanaik30/resume-job-matcher/blob/main/frontend/index.html): `frontend/index.html`

### Model Preparation

- [Dataset Preparation](https://github.com/navyanaik30/resume-job-matcher/blob/main/prepare_data.py): `prepare_data.py`
- [Model Training](https://github.com/navyanaik30/resume-job-matcher/blob/main/train_model.py): `train_model.py`

### Data And Artifacts

- [Source Dataset](https://github.com/navyanaik30/resume-job-matcher/blob/main/dataset/job_resume_fit.csv): `dataset/job_resume_fit.csv`
- [Processed Dataset](https://github.com/navyanaik30/resume-job-matcher/blob/main/dataset/processed_dataset.csv): `dataset/processed_dataset.csv`
- [Random Forest](https://github.com/navyanaik30/resume-job-matcher/blob/main/model.pkl): `model.pkl`
- [TF-IDF Vectorizer](https://github.com/navyanaik30/resume-job-matcher/blob/main/vectorizer.pkl): `vectorizer.pkl`

### Other components

- **User**

## Connections

- User → Frontend: uses
- User → Flask API: submits PDF and job text
- Flask API → PDF Extraction: extracts text
- Flask API → Resume Validation: validates resume
- Flask API → Text Similarity: computes similarity
- Flask API → Skill Gap: requests skill gap
- Flask API → Match Scoring: scores features
- Flask API → TF-IDF Vectorizer: transforms text
- Flask API → Random Forest: predicts match
- Flask API → Frontend: returns results
- Dataset Preparation → Source Dataset: reads
- Dataset Preparation → Skill Gap: calculates skill gaps
- Dataset Preparation → Processed Dataset: writes
- Model Training → Processed Dataset: reads
- Model Training → Random Forest: writes
- Model Training → TF-IDF Vectorizer: writes
