# mamoonali1/ai-resume-screening-system architecture

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

- Interactive diagram: https://gitdiagram.com/mamoonali1/ai-resume-screening-system
- Repository: https://github.com/mamoonali1/ai-resume-screening-system

## Overview

HR submits resumes, a job description, and screening filters through the browser. The backend extracts resume text, then analyzes candidates with an LLM, applies filters, ranks matches, and returns a shortlist for display. The analyzer also extracts candidate details and produces fit scores; filtering and ranking are distinct stages within that module. The README documents the product workflow, while the excerpts show the request handling and analysis calls. The model provider is evidenced in the analyzer; other unsampled integrations are not inferred.

Main entry points: [`backend/app.py`](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/app.py) (Screen API), [`frontend/app.js`](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/frontend/app.js) (Browser controller), [`backend/analyzer.py`](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/analyzer.py) (AI extraction and scoring), [`frontend/index.html`](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/frontend/index.html) (Screening page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["HR interface"]
  node_screening_ui["Screening page<br/>[index.html]"]
  node_browser_controller["Browser controller<br/>[app.js]"]
end

subgraph group_backend["Screening backend"]
  node_screen_api["Screen API<br/>[app.py]"]
  node_resume_text["Resume text extraction<br/>[parser.py]"]
end

subgraph group_analysis["Candidate analysis"]
  node_candidate_analysis["AI extraction and scoring<br/>[analyzer.py]"]
  node_candidate_filters["Candidate filters<br/>[analyzer.py]"]
  node_shortlist_ranking["Shortlist ranking<br/>[analyzer.py]"]
end

subgraph group_external["External service"]
  node_groq_model["Groq LLM"]
end

node_hr(("HR user"))

node_hr -->|"provides inputs"| node_screening_ui
node_screening_ui -->|"uses controller"| node_browser_controller
node_browser_controller -->|"posts screening data"| node_screen_api
node_screen_api -->|"extracts resume text"| node_resume_text
node_resume_text -->|"returns text"| node_screen_api
node_screen_api -->|"analyzes resumes"| node_candidate_analysis
node_candidate_analysis -->|"invokes model"| node_groq_model
node_groq_model -->|"returns JSON"| node_candidate_analysis
node_candidate_analysis -->|"filters candidates"| node_candidate_filters
node_candidate_filters -->|"sorts and limits"| node_shortlist_ranking
node_shortlist_ranking -->|"returns shortlist"| node_screen_api
node_screen_api -->|"returns results"| node_browser_controller
node_browser_controller -->|"renders shortlist"| node_screening_ui

click node_screening_ui "https://github.com/mamoonali1/ai-resume-screening-system/blob/main/frontend/index.html"
click node_browser_controller "https://github.com/mamoonali1/ai-resume-screening-system/blob/main/frontend/app.js"
click node_screen_api "https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/app.py"
click node_resume_text "https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/parser.py"
click node_candidate_analysis "https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/analyzer.py"
click node_candidate_filters "https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/analyzer.py"
click node_shortlist_ranking "https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/analyzer.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_screening_ui,node_browser_controller,node_hr toneBlue
class node_screen_api,node_resume_text toneAmber
class node_candidate_analysis,node_candidate_filters,node_shortlist_ranking toneMint
class node_groq_model toneRose
```

## Components

### HR interface

- [Screening page](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/frontend/index.html): `frontend/index.html`
- [Browser controller](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/frontend/app.js): `frontend/app.js`

### Screening backend

- [Screen API](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/app.py): `backend/app.py`
- [Resume text extraction](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/parser.py): `backend/parser.py`

### Candidate analysis

- [AI extraction and scoring](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/analyzer.py): `backend/analyzer.py`
- [Candidate filters](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/analyzer.py): `backend/analyzer.py`
- [Shortlist ranking](https://github.com/mamoonali1/ai-resume-screening-system/blob/main/backend/analyzer.py): `backend/analyzer.py`

### External service

- **Groq LLM**

### Other components

- **HR user**

## Connections

- HR user → Screening page: provides inputs (evidence: `README.md`)
- Screening page → Browser controller: uses controller (evidence: `README.md`)
- Browser controller → Screen API: posts screening data (evidence: `frontend/app.js`)
- Screen API → Resume text extraction: extracts resume text (evidence: `backend/app.py`)
- Resume text extraction → Screen API: returns text (evidence: `backend/app.py`)
- Screen API → AI extraction and scoring: analyzes resumes (evidence: `backend/app.py`)
- AI extraction and scoring → Groq LLM: invokes model (evidence: `backend/analyzer.py`)
- Groq LLM → AI extraction and scoring: returns JSON (evidence: `backend/analyzer.py`)
- AI extraction and scoring → Candidate filters: filters candidates (evidence: `backend/analyzer.py`)
- Candidate filters → Shortlist ranking: sorts and limits (evidence: `backend/analyzer.py`)
- Shortlist ranking → Screen API: returns shortlist (evidence: `backend/app.py`)
- Screen API → Browser controller: returns results (evidence: `frontend/app.js`)
- Browser controller → Screening page: renders shortlist (evidence: `frontend/app.js`)
