# niiiizzz/resume_builder architecture

> Architecture diagram of the GitHub repository niiiizzz/resume_builder, 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/niiiizzz/resume_builder
- Repository: https://github.com/niiiizzz/resume_builder

## Overview

This Streamlit SaaS helps job seekers turn personal and resume data into tailored application materials, assess job-description fit, and retain their work. The main workflow enters through the app, authenticates users, then routes dashboard actions to generation, optimization, or analysis features; users can upload documents for text extraction and export results. Resume, ATS, and cover-letter history is stored in the configured SQL database and surfaced on the dashboard. The sampled code confirms AI-provider routing and selected feature implementations; several app handlers and feature modules were not sampled, so uncertain internal calls are omitted.

Main entry points: [`app.py`](https://github.com/niiiizzz/resume_builder/blob/main/app.py) (Streamlit app), [`database/db.py`](https://github.com/niiiizzz/resume_builder/blob/main/database/db.py) (SQL database), [`ai/ai_client.py`](https://github.com/niiiizzz/resume_builder/blob/main/ai/ai_client.py) (AI provider routing), [`auth/auth_utils.py`](https://github.com/niiiizzz/resume_builder/blob/main/auth/auth_utils.py) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["App and identity"]
  node_app["Streamlit app<br/>[app.py]"]
  node_auth["Authentication<br/>[auth_utils.py]"]
end

subgraph group_career["Career content"]
  node_resume_gen["Resume generation"]
  node_jd_optimizer["JD optimization<br/>[jd_optimizer.py]"]
  node_cover_letter["Cover letters<br/>[cover_letter.py]"]
  node_portfolio["Portfolio content<br/>[portfolio.py]"]
  node_ai_client["AI provider routing<br/>[ai_client.py]"]
end

subgraph group_analysis["Resume analysis"]
  node_ats["ATS scoring<br/>[ats_engine.py]"]
end

subgraph group_platform["Persistence and documents"]
  node_file_parser["Text extraction<br/>[file_parser.py]"]
  node_export["PDF and DOCX export<br/>[export.py]"]
  node_sync["Dashboard history<br/>[data_sync.py]"]
  node_models["Resume and score models<br/>[models.py]"]
  node_db[("SQL database<br/>[db.py]")]
end

node_jobseeker(("Job seeker"))
node_llm{{"LLM providers"}}
node_db_service[("Configured database")]

node_jobseeker -->|"uses"| node_app
node_app -->|"authenticates"| node_auth
node_app -->|"routes generation"| node_resume_gen
node_app -->|"routes optimization"| node_jd_optimizer
node_app -->|"routes letters"| node_cover_letter
node_app -->|"routes portfolio"| node_portfolio
node_app -->|"routes analysis"| node_ats
node_app -->|"extracts uploads"| node_file_parser
node_app -->|"exports results"| node_export
node_app -->|"refreshes dashboard"| node_sync
node_resume_gen -->|"requests generation"| node_ai_client
node_portfolio -->|"requests content"| node_ai_client
node_ai_client -.->|"sends prompts"| node_llm
node_auth -->|"opens sessions"| node_db
node_sync -->|"queries history"| node_db
node_db -->|"maps records"| node_models
node_db -->|"reads and writes"| node_db_service

click node_app "https://github.com/niiiizzz/resume_builder/blob/main/app.py"
click node_auth "https://github.com/niiiizzz/resume_builder/blob/main/auth/auth_utils.py"
click node_resume_gen "https://github.com/niiiizzz/resume_builder/blob/main/ai/resume_generator.py"
click node_jd_optimizer "https://github.com/niiiizzz/resume_builder/blob/main/ai/jd_optimizer.py"
click node_cover_letter "https://github.com/niiiizzz/resume_builder/blob/main/ai/cover_letter.py"
click node_portfolio "https://github.com/niiiizzz/resume_builder/blob/main/ai/portfolio.py"
click node_ai_client "https://github.com/niiiizzz/resume_builder/blob/main/ai/ai_client.py"
click node_ats "https://github.com/niiiizzz/resume_builder/blob/main/ats/ats_engine.py"
click node_file_parser "https://github.com/niiiizzz/resume_builder/blob/main/utils/file_parser.py"
click node_export "https://github.com/niiiizzz/resume_builder/blob/main/utils/export.py"
click node_sync "https://github.com/niiiizzz/resume_builder/blob/main/utils/data_sync.py"
click node_models "https://github.com/niiiizzz/resume_builder/blob/main/database/models.py"
click node_db "https://github.com/niiiizzz/resume_builder/blob/main/database/db.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,node_auth toneBlue
class node_resume_gen,node_jd_optimizer,node_cover_letter,node_portfolio,node_ai_client,node_db_service toneAmber
class node_ats toneMint
class node_file_parser,node_export,node_sync,node_models,node_db toneRose
class node_jobseeker,node_llm toneIndigo
```

## Components

### App and identity

- [Streamlit app](https://github.com/niiiizzz/resume_builder/blob/main/app.py): `app.py`
- [Authentication](https://github.com/niiiizzz/resume_builder/blob/main/auth/auth_utils.py): `auth/auth_utils.py`

### Career content

- [Resume generation](https://github.com/niiiizzz/resume_builder/blob/main/ai/resume_generator.py): `ai/resume_generator.py`
- [JD optimization](https://github.com/niiiizzz/resume_builder/blob/main/ai/jd_optimizer.py): `ai/jd_optimizer.py`
- [Cover letters](https://github.com/niiiizzz/resume_builder/blob/main/ai/cover_letter.py): `ai/cover_letter.py`
- [Portfolio content](https://github.com/niiiizzz/resume_builder/blob/main/ai/portfolio.py): `ai/portfolio.py`
- [AI provider routing](https://github.com/niiiizzz/resume_builder/blob/main/ai/ai_client.py): `ai/ai_client.py`

### Resume analysis

- [ATS scoring](https://github.com/niiiizzz/resume_builder/blob/main/ats/ats_engine.py): `ats/ats_engine.py`

### Persistence and documents

- [Text extraction](https://github.com/niiiizzz/resume_builder/blob/main/utils/file_parser.py): `utils/file_parser.py`
- [PDF and DOCX export](https://github.com/niiiizzz/resume_builder/blob/main/utils/export.py): `utils/export.py`
- [Dashboard history](https://github.com/niiiizzz/resume_builder/blob/main/utils/data_sync.py): `utils/data_sync.py`
- [Resume and score models](https://github.com/niiiizzz/resume_builder/blob/main/database/models.py): `database/models.py`
- [SQL database](https://github.com/niiiizzz/resume_builder/blob/main/database/db.py): `database/db.py`

### Other components

- **Job seeker**
- **LLM providers**
- **Configured database**

## Connections

- Job seeker → Streamlit app: uses
- Streamlit app → Authentication: authenticates
- Streamlit app → Resume generation: routes generation
- Streamlit app → JD optimization: routes optimization
- Streamlit app → Cover letters: routes letters
- Streamlit app → Portfolio content: routes portfolio
- Streamlit app → ATS scoring: routes analysis
- Streamlit app → Text extraction: extracts uploads
- Streamlit app → PDF and DOCX export: exports results
- Streamlit app → Dashboard history: refreshes dashboard
- Resume generation → AI provider routing: requests generation
- Portfolio content → AI provider routing: requests content
- AI provider routing → LLM providers: sends prompts
- Authentication → SQL database: opens sessions
- Dashboard history → SQL database: queries history
- SQL database → Resume and score models: maps records
- SQL database → Configured database: reads and writes
