# devangana16/ai-powered-resume-analyzer architecture

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

- Interactive diagram: https://gitdiagram.com/devangana16/ai-powered-resume-analyzer
- Repository: https://github.com/devangana16/ai-powered-resume-analyzer

## Overview

This is a web-based resume-to-job matching tool. A user uploads a PDF and provides a job description in the React interface; the FastAPI endpoint validates the inputs, extracts resume text, and computes skills, missing skills, a similarity score, and heuristic feedback. With an optional API key, it also requests Gemini analysis. The interface displays the returned results. The backend workflow is supported by sampled source; README capabilities not visible in excerpts are represented only where documented.

Main entry points: [`backend/main.py`](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/main.py) (Analysis endpoint), [`backend/utils.py`](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py) (Resume analysis), [`frontend/src/App.tsx`](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/frontend/src/App.tsx) (Upload and results UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["User interface"]
  node_app["Upload and results UI<br/>[App.tsx]"]
end

subgraph group_api["API workflow"]
  node_endpoint["Analysis endpoint<br/>[main.py]"]
  node_validation["Input validation<br/>[main.py]"]
end

subgraph group_analysis["Resume analysis"]
  node_pdf["PDF text extraction<br/>[utils.py]"]
  node_analyzer["Resume analysis<br/>[utils.py]"]
  node_skills["Skill extraction<br/>[utils.py]"]
  node_scoring["Score and feedback<br/>[utils.py]"]
  node_ai["AI deep analysis<br/>[utils.py]"]
end

subgraph group_integrations["External services"]
  node_gemini{{"Gemini API"}}
end

node_user(("Job seeker"))

node_user -->|"provides inputs"| node_app
node_app -->|"posts resume and job"| node_endpoint
node_endpoint -->|"validates inputs"| node_validation
node_endpoint -->|"extracts PDF text"| node_pdf
node_endpoint -->|"analyzes text"| node_analyzer
node_analyzer -->|"extracts skills"| node_skills
node_analyzer -->|"calculates results"| node_scoring
node_endpoint -.->|"requests optional analysis"| node_ai
node_ai -.->|"generates insights"| node_gemini
node_endpoint -->|"returns analysis"| node_app

click node_app "https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/frontend/src/App.tsx"
click node_endpoint "https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/main.py"
click node_validation "https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/main.py"
click node_pdf "https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py"
click node_analyzer "https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py"
click node_skills "https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py"
click node_scoring "https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py"
click node_ai "https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.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_app toneBlue
class node_endpoint,node_validation toneAmber
class node_pdf,node_analyzer,node_skills,node_scoring,node_ai toneMint
class node_gemini toneRose
class node_user toneIndigo
```

## Components

### User interface

- [Upload and results UI](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`

### API workflow

- [Analysis endpoint](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/main.py): `backend/main.py`
- [Input validation](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/main.py): `backend/main.py`

### Resume analysis

- [PDF text extraction](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py): `backend/utils.py`
- [Resume analysis](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py): `backend/utils.py`
- [Skill extraction](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py): `backend/utils.py`
- [Score and feedback](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py): `backend/utils.py`
- [AI deep analysis](https://github.com/devangana16/ai-powered-resume-analyzer/blob/main/backend/utils.py): `backend/utils.py`

### External services

- **Gemini API**

### Other components

- **Job seeker**

## Connections

- Job seeker → Upload and results UI: provides inputs
- Upload and results UI → Analysis endpoint: posts resume and job
- Analysis endpoint → Input validation: validates inputs
- Analysis endpoint → PDF text extraction: extracts PDF text
- Analysis endpoint → Resume analysis: analyzes text
- Resume analysis → Skill extraction: extracts skills
- Resume analysis → Score and feedback: calculates results
- Analysis endpoint → AI deep analysis: requests optional analysis
- AI deep analysis → Gemini API: generates insights
- Analysis endpoint → Upload and results UI: returns analysis
