# yogesh-pandey090/ai-resume-analyzer architecture

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

- Interactive diagram: https://gitdiagram.com/yogesh-pandey090/ai-resume-analyzer
- Repository: https://github.com/yogesh-pandey090/ai-resume-analyzer

## Overview

This is a Flask resume analyzer. A user submits a PDF and selects a target role; the application extracts text, identifies skills, compares them with role requirements, and gathers job recommendations, keyword matches, and feedback before rendering a result. The tree and sampled source support this workflow, but the README is empty and template contents were not sampled, so template-to-browser wiring and the dashboard’s role are uncertain.

Main entry points: [`app.py`](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py) (Flask application), [`job_recommender.py`](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/job_recommender.py) (Job recommendation), [`skills.py`](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/skills.py) (Skill and role data), [`templates/index.html`](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/templates/index.html) (Upload page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web workflow"]
  node_webapp["Flask application<br/>[app.py]"]
  node_index["Upload page<br/>[index.html]"]
  node_result["Analysis results<br/>[result.html]"]
  node_dashboard["Dashboard template<br/>[dashboard.html]"]
  node_chart["Score chart<br/>[chart.js]"]
end

subgraph group_analysis["Resume analysis"]
  node_pdf["PDF text extraction<br/>[app.py]"]
  node_pdfreader["PyPDF2 reader"]
  node_skillscan["Skill extraction<br/>[app.py]"]
  node_skillcatalog["Skill and role data<br/>[skills.py]"]
  node_rolecompare["Role skill comparison<br/>[app.py]"]
  node_atscore["ATS score helper<br/>[ats.py]"]
  node_keywordscan["Keyword analysis"]
end

subgraph group_guidance["Career guidance"]
  node_jobrecommend["Job recommendation<br/>[job_recommender.py]"]
  node_jobroles["Recommendation role data<br/>[job_recommender.py]"]
  node_feedback["Skill feedback<br/>[ai_feedback.py]"]
end

node_user(("Resume user"))

node_user -->|"submits resume"| node_webapp
node_webapp -->|"renders page"| node_index
node_webapp -->|"extracts text"| node_pdf
node_pdf -->|"reads PDF"| node_pdfreader
node_webapp -->|"finds skills"| node_skillscan
node_skillscan -->|"checks terms"| node_skillcatalog
node_webapp -->|"compares skills"| node_rolecompare
node_rolecompare -->|"reads requirements"| node_skillcatalog
node_webapp -->|"finds keywords"| node_keywordscan
node_webapp -->|"requests recommendation"| node_jobrecommend
node_jobrecommend -->|"checks roles"| node_jobroles
node_webapp -->|"requests tips"| node_feedback
node_webapp -->|"renders analysis"| node_result

click node_webapp "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py"
click node_pdf "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py"
click node_skillscan "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py"
click node_skillcatalog "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/skills.py"
click node_rolecompare "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py"
click node_atscore "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/ats.py"
click node_keywordscan "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/keyword_analyzer.py"
click node_jobrecommend "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/job_recommender.py"
click node_jobroles "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/job_recommender.py"
click node_feedback "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/ai_feedback.py"
click node_index "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/templates/index.html"
click node_result "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/templates/result.html"
click node_dashboard "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/templates/dashboard.html"
click node_chart "https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/static/chart.js"

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_webapp,node_index,node_result,node_dashboard,node_chart,node_user toneBlue
class node_pdf,node_pdfreader,node_skillscan,node_skillcatalog,node_rolecompare,node_atscore,node_keywordscan toneAmber
class node_jobrecommend,node_jobroles,node_feedback toneMint
```

## Components

### Web workflow

- [Flask application](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py): `app.py`
- [Upload page](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/templates/index.html): `templates/index.html`
- [Analysis results](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/templates/result.html): `templates/result.html`
- [Dashboard template](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/templates/dashboard.html): `templates/dashboard.html`
- [Score chart](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/static/chart.js): `static/chart.js`

### Resume analysis

- [PDF text extraction](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py): `app.py`
- **PyPDF2 reader**
- [Skill extraction](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py): `app.py`
- [Skill and role data](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/skills.py): `skills.py`
- [Role skill comparison](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/app.py): `app.py`
- [ATS score helper](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/ats.py): `ats.py`
- [Keyword analysis](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/keyword_analyzer.py): `keyword_analyzer.py`

### Career guidance

- [Job recommendation](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/job_recommender.py): `job_recommender.py`
- [Recommendation role data](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/job_recommender.py): `job_recommender.py`
- [Skill feedback](https://github.com/yogesh-pandey090/ai-resume-analyzer/blob/main/ai_feedback.py): `ai_feedback.py`

### Other components

- **Resume user**

## Connections

- Resume user → Flask application: submits resume
- Flask application → Upload page: renders page
- Flask application → PDF text extraction: extracts text
- PDF text extraction → PyPDF2 reader: reads PDF
- Flask application → Skill extraction: finds skills
- Skill extraction → Skill and role data: checks terms
- Flask application → Role skill comparison: compares skills
- Role skill comparison → Skill and role data: reads requirements
- Flask application → Keyword analysis: finds keywords
- Flask application → Job recommendation: requests recommendation
- Job recommendation → Recommendation role data: checks roles
- Flask application → Skill feedback: requests tips
- Flask application → Analysis results: renders analysis
