# kishorm28/ai-career-advisor architecture

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

- Interactive diagram: https://gitdiagram.com/kishorm28/ai-career-advisor
- Repository: https://github.com/kishorm28/ai-career-advisor

## Overview

This is a Flask resume-analysis and career-assistance app. A user uploads a PDF or selects a role; the app extracts resume text, predicts a role from a trained classifier, compares skills, and may request career materials from Groq. The app also offers cover-letter PDF downloads. The excerpts show the main orchestration and model/API calls, but not all PDF parsing, template wiring, or helper implementations; the separate Gemini generator is not shown connected to the Flask workflow.

Main entry points: [`app.py`](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py) (Flask workflow), [`generate_letter.py`](https://github.com/kishorm28/ai-career-advisor/blob/main/generate_letter.py) (Gemini letter generator), [`templates/index.html`](https://github.com/kishorm28/ai-career-advisor/blob/main/templates/index.html) (Resume interface), [`resume_classifier.pkl`](https://github.com/kishorm28/ai-career-advisor/blob/main/resume_classifier.pkl) (Trained model files)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web workflow"]
  node_flask["Flask workflow<br/>[app.py]"]
  node_resume_pdf["Resume PDF<br/>[app.py]"]
  node_web_template["Resume interface<br/>[index.html]"]
  node_pdf_download["PDF export<br/>[app.py]"]
  node_pdf_library["PDF writer<br/>[app.py]"]
end

subgraph group_analysis["Resume analysis"]
  node_text_extract["PDF text extraction<br/>[app.py]"]
  node_vectorizer["Text vectorizer<br/>[app.py]"]
  node_classifier["Role classifier<br/>[app.py]"]
  node_model_files["Trained model files"]
  node_vector_file["Vectorizer file<br/>[vectorizer.pkl]"]
  node_skill_analysis["Skill gap analysis<br/>[app.py]"]
  node_skill_catalog["Skill catalog<br/>[skill_data.py]"]
end

subgraph group_generation["Career content"]
  node_content_generation["Career content generation<br/>[app.py]"]
  node_gemini_generator["Gemini letter generator<br/>[generate_letter.py]"]
end

node_candidate(("Candidate"))
node_groq_api{{"Groq API"}}
node_gemini_api{{"Gemini API"}}

node_candidate -->|"submits resume"| node_flask
node_flask -->|"renders"| node_web_template
node_flask -->|"extracts text"| node_text_extract
node_flask -->|"transforms text"| node_vectorizer
node_vectorizer -->|"loads"| node_vector_file
node_flask -->|"predicts role"| node_classifier
node_classifier -->|"loads"| node_model_files
node_flask -->|"analyzes skills"| node_skill_analysis
node_flask -->|"requests content"| node_content_generation
node_content_generation -->|"generates text"| node_groq_api
node_candidate -->|"requests download"| node_pdf_download
node_pdf_download -->|"writes PDF"| node_pdf_library
node_pdf_download -->|"sends PDF"| node_candidate
node_gemini_generator -->|"generates letter"| node_gemini_api

click node_flask "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_resume_pdf "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_web_template "https://github.com/kishorm28/ai-career-advisor/blob/main/templates/index.html"
click node_pdf_download "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_pdf_library "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_text_extract "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_vectorizer "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_classifier "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_model_files "https://github.com/kishorm28/ai-career-advisor/blob/main/resume_classifier.pkl"
click node_vector_file "https://github.com/kishorm28/ai-career-advisor/blob/main/vectorizer.pkl"
click node_skill_analysis "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_skill_catalog "https://github.com/kishorm28/ai-career-advisor/blob/main/skill_data.py"
click node_content_generation "https://github.com/kishorm28/ai-career-advisor/blob/main/app.py"
click node_gemini_generator "https://github.com/kishorm28/ai-career-advisor/blob/main/generate_letter.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_flask,node_resume_pdf,node_web_template,node_pdf_download,node_pdf_library toneBlue
class node_text_extract,node_vectorizer,node_classifier,node_model_files,node_vector_file,node_skill_analysis,node_skill_catalog toneAmber
class node_content_generation,node_gemini_generator,node_groq_api,node_gemini_api toneMint
class node_candidate toneIndigo
```

## Components

### Web workflow

- [Flask workflow](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`
- [Resume PDF](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`
- [Resume interface](https://github.com/kishorm28/ai-career-advisor/blob/main/templates/index.html): `templates/index.html`
- [PDF export](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`
- [PDF writer](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`

### Resume analysis

- [PDF text extraction](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`
- [Text vectorizer](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`
- [Role classifier](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`
- [Trained model files](https://github.com/kishorm28/ai-career-advisor/blob/main/resume_classifier.pkl): `resume_classifier.pkl`
- [Vectorizer file](https://github.com/kishorm28/ai-career-advisor/blob/main/vectorizer.pkl): `vectorizer.pkl`
- [Skill gap analysis](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`
- [Skill catalog](https://github.com/kishorm28/ai-career-advisor/blob/main/skill_data.py): `skill_data.py`

### Career content

- [Career content generation](https://github.com/kishorm28/ai-career-advisor/blob/main/app.py): `app.py`
- [Gemini letter generator](https://github.com/kishorm28/ai-career-advisor/blob/main/generate_letter.py): `generate_letter.py`

### Other components

- **Candidate**
- **Groq API**
- **Gemini API**

## Connections

- Candidate → Flask workflow: submits resume (evidence: `app.py`)
- Flask workflow → Resume interface: renders (evidence: `app.py`)
- Flask workflow → PDF text extraction: extracts text (evidence: `app.py`)
- Flask workflow → Text vectorizer: transforms text (evidence: `app.py`)
- Text vectorizer → Vectorizer file: loads (evidence: `app.py`)
- Flask workflow → Role classifier: predicts role (evidence: `app.py`)
- Role classifier → Trained model files: loads (evidence: `app.py`)
- Flask workflow → Skill gap analysis: analyzes skills (evidence: `app.py`)
- Flask workflow → Career content generation: requests content (evidence: `app.py`)
- Career content generation → Groq API: generates text (evidence: `app.py`)
- Candidate → PDF export: requests download (evidence: `app.py`)
- PDF export → PDF writer: writes PDF (evidence: `app.py`)
- PDF export → Candidate: sends PDF (evidence: `app.py`)
- Gemini letter generator → Gemini API: generates letter (evidence: `generate_letter.py`)
