# techinsightslab/hiresenceai-main architecture

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

- Interactive diagram: https://gitdiagram.com/techinsightslab/hiresenceai-main
- Repository: https://github.com/techinsightslab/hiresenceai-main

## Overview

HireSenceAI is a Streamlit hiring-assistance app. Its main analysis workflow collects resume and job-description text or PDFs, then generates hiring insights; separate pages build job descriptions and manage uploaded JDs and resumes. The graph also shows authentication and the persistence/parsing layer. The README provides no capability detail, and some page implementations were not excerpted, so those branches rely on SOURCE INDEX references; uncertain runtime connections are omitted.

Main entry points: [`HireSenceAI-main/src/auth.py`](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/auth.py) (Authentication), [`HireSenceAI-main/src/generate_sence.py`](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/generate_sence.py) (Hiring Insights), [`HireSenceAI-main/src/jd_builder_sence.py`](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd_builder_sence.py) (JD Generation), [`HireSenceAI-main/pages/3_HireSence.py`](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/3_HireSence.py) (Hiring Analysis Page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access"]
  node_login["Login Page<br/>[Login.py]"]
  node_auth["Authentication<br/>[auth.py]"]
end

subgraph group_analysis["Hiring Analysis"]
  node_analysis_page["Hiring Analysis Page<br/>[3_HireSence.py]"]
  node_analysis_engine["Hiring Insights<br/>[generate_sence.py]"]
  node_analysis_ui["Analysis UI<br/>[ui_components.py]"]
end

subgraph group_jd["Job Descriptions"]
  node_jd_builder_page["JD Builder Page<br/>[2_JDBuilder.py]"]
  node_jd_builder["JD Generation"]
end

subgraph group_records["Uploads And Records"]
  node_jd_upload["JD Upload<br/>[jd_upload_view.py]"]
  node_jd_read["JD PDF Reader<br/>[jd_reader.py]"]
  node_jd_records["JD Records<br/>[jd_repository.py]"]
  node_resume_records["Resume Records<br/>[resume_db.py]"]
  node_file_store["Local File Storage<br/>[file_store.py]"]
  node_database[("SQLite Database<br/>[db.py]")]
  node_jd_upload_page["JD Upload Page<br/>[4_Upload_JD.py]"]
  node_jd_view_page["JD View Page<br/>[5_View_JD.py]"]
  node_resume_upload_page["Resume Upload Page"]
  node_resume_view_page["Resume View Page<br/>[7_View_Resumes.py]"]
end

subgraph group_ai["AI And Parsing"]
  node_pdf["PDF Text Extraction<br/>[pdf_utils.py]"]
  node_analysis_prompt["Analysis Prompt<br/>[prompt_template.py]"]
  node_jd_prompt["JD Prompt"]
  node_gemini["Gemini Wrapper"]
  node_openai["OpenAI Wrapper"]
end

node_user(("User"))

node_user -.->|"signs in"| node_login
node_login -->|"validates credentials"| node_auth
node_analysis_page -->|"guards access"| node_auth
node_analysis_page -->|"renders inputs"| node_analysis_ui
node_analysis_page -->|"requests insights"| node_analysis_engine
node_analysis_engine -->|"uses prompt"| node_analysis_prompt
node_analysis_engine -->|"uses wrapper"| node_gemini
node_analysis_engine -->|"uses wrapper"| node_openai
node_analysis_ui -->|"extracts PDF text"| node_pdf
node_jd_builder_page -->|"guards access"| node_auth
node_jd_builder_page -->|"requests JD"| node_jd_builder
node_jd_builder -->|"uses prompt"| node_jd_prompt
node_jd_builder -->|"uses wrapper"| node_gemini
node_jd_builder -->|"uses wrapper"| node_openai
node_jd_upload_page -->|"guards access"| node_auth
node_jd_upload_page -->|"saves file"| node_file_store
node_jd_upload_page -->|"records upload"| node_database
node_jd_view_page -->|"guards access"| node_auth
node_jd_view_page -->|"lists records"| node_jd_records
node_jd_read -->|"extracts text"| node_pdf
node_jd_records -->|"reads records"| node_database
node_resume_upload_page -->|"guards access"| node_auth
node_resume_upload_page -.->|"saves file"| node_file_store
node_resume_upload_page -.->|"records upload"| node_resume_records
node_resume_view_page -->|"guards access"| node_auth
node_resume_view_page -->|"lists records"| node_resume_records
node_resume_records -->|"reads and writes"| node_database

click node_login "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/Login.py"
click node_auth "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/auth.py"
click node_analysis_page "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/3_HireSence.py"
click node_analysis_engine "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/generate_sence.py"
click node_analysis_ui "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/ui_components.py"
click node_jd_builder_page "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/2_JDBuilder.py"
click node_jd_builder "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd_builder_sence.py"
click node_jd_upload "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd/jd_upload_view.py"
click node_jd_read "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd/jd_reader.py"
click node_jd_records "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd/jd_repository.py"
click node_resume_records "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/resume/resume_db.py"
click node_file_store "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/common/file_store.py"
click node_database "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/db.py"
click node_pdf "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/pdf_utils.py"
click node_analysis_prompt "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/prompts/prompt_template.py"
click node_jd_prompt "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/prompts/prompt_template_jd.py"
click node_gemini "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/gemini_lang_chain_wrapper.py"
click node_openai "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/openai_lang_chain_wrapper.py"
click node_jd_upload_page "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/4_Upload_JD.py"
click node_jd_view_page "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/5_View_JD.py"
click node_resume_upload_page "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/6_Upload_Resumes.py"
click node_resume_view_page "https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/7_View_Resumes.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_login,node_auth,node_user toneBlue
class node_analysis_page,node_analysis_engine,node_analysis_ui toneAmber
class node_jd_builder_page,node_jd_builder toneMint
class node_jd_upload,node_jd_read,node_jd_records,node_resume_records,node_file_store,node_database,node_jd_upload_page,node_jd_view_page,node_resume_upload_page,node_resume_view_page toneRose
class node_pdf,node_analysis_prompt,node_jd_prompt,node_gemini,node_openai toneIndigo
```

## Components

### Access

- [Login Page](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/Login.py): `HireSenceAI-main/Login.py`
- [Authentication](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/auth.py): `HireSenceAI-main/src/auth.py`

### Hiring Analysis

- [Hiring Analysis Page](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/3_HireSence.py): `HireSenceAI-main/pages/3_HireSence.py`
- [Hiring Insights](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/generate_sence.py): `HireSenceAI-main/src/generate_sence.py`
- [Analysis UI](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/ui_components.py): `HireSenceAI-main/src/ui_components.py`

### Job Descriptions

- [JD Builder Page](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/2_JDBuilder.py): `HireSenceAI-main/pages/2_JDBuilder.py`
- [JD Generation](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd_builder_sence.py): `HireSenceAI-main/src/jd_builder_sence.py`

### Uploads And Records

- [JD Upload](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd/jd_upload_view.py): `HireSenceAI-main/src/jd/jd_upload_view.py`
- [JD PDF Reader](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd/jd_reader.py): `HireSenceAI-main/src/jd/jd_reader.py`
- [JD Records](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/jd/jd_repository.py): `HireSenceAI-main/src/jd/jd_repository.py`
- [Resume Records](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/resume/resume_db.py): `HireSenceAI-main/src/resume/resume_db.py`
- [Local File Storage](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/common/file_store.py): `HireSenceAI-main/src/common/file_store.py`
- [SQLite Database](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/db.py): `HireSenceAI-main/src/db.py`
- [JD Upload Page](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/4_Upload_JD.py): `HireSenceAI-main/pages/4_Upload_JD.py`
- [JD View Page](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/5_View_JD.py): `HireSenceAI-main/pages/5_View_JD.py`
- [Resume Upload Page](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/6_Upload_Resumes.py): `HireSenceAI-main/pages/6_Upload_Resumes.py`
- [Resume View Page](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/pages/7_View_Resumes.py): `HireSenceAI-main/pages/7_View_Resumes.py`

### AI And Parsing

- [PDF Text Extraction](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/pdf_utils.py): `HireSenceAI-main/src/pdf_utils.py`
- [Analysis Prompt](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/prompts/prompt_template.py): `HireSenceAI-main/src/prompts/prompt_template.py`
- [JD Prompt](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/prompts/prompt_template_jd.py): `HireSenceAI-main/src/prompts/prompt_template_jd.py`
- [Gemini Wrapper](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/gemini_lang_chain_wrapper.py): `HireSenceAI-main/src/gemini_lang_chain_wrapper.py`
- [OpenAI Wrapper](https://github.com/techinsightslab/hiresenceai-main/blob/main/HireSenceAI-main/src/openai_lang_chain_wrapper.py): `HireSenceAI-main/src/openai_lang_chain_wrapper.py`

### Other components

- **User**

## Connections

- User → Login Page: signs in
- Login Page → Authentication: validates credentials (evidence: `HireSenceAI-main/Login.py`)
- Hiring Analysis Page → Authentication: guards access (evidence: `HireSenceAI-main/pages/3_HireSence.py`)
- Hiring Analysis Page → Analysis UI: renders inputs (evidence: `HireSenceAI-main/pages/3_HireSence.py`)
- Hiring Analysis Page → Hiring Insights: requests insights (evidence: `HireSenceAI-main/pages/3_HireSence.py`)
- Hiring Insights → Analysis Prompt: uses prompt (evidence: `HireSenceAI-main/src/generate_sence.py`)
- Hiring Insights → Gemini Wrapper: uses wrapper (evidence: `HireSenceAI-main/src/generate_sence.py`)
- Hiring Insights → OpenAI Wrapper: uses wrapper (evidence: `HireSenceAI-main/src/generate_sence.py`)
- Analysis UI → PDF Text Extraction: extracts PDF text (evidence: `HireSenceAI-main/src/ui_components.py`)
- JD Builder Page → Authentication: guards access (evidence: `HireSenceAI-main/pages/2_JDBuilder.py`)
- JD Builder Page → JD Generation: requests JD (evidence: `HireSenceAI-main/pages/2_JDBuilder.py`)
- JD Generation → JD Prompt: uses prompt (evidence: `HireSenceAI-main/src/jd_builder_sence.py`)
- JD Generation → Gemini Wrapper: uses wrapper (evidence: `HireSenceAI-main/src/jd_builder_sence.py`)
- JD Generation → OpenAI Wrapper: uses wrapper (evidence: `HireSenceAI-main/src/jd_builder_sence.py`)
- JD Upload Page → Authentication: guards access (evidence: `HireSenceAI-main/pages/4_Upload_JD.py`)
- JD Upload Page → Local File Storage: saves file
- JD Upload Page → SQLite Database: records upload (evidence: `HireSenceAI-main/pages/4_Upload_JD.py`)
- JD View Page → Authentication: guards access (evidence: `HireSenceAI-main/pages/5_View_JD.py`)
- JD View Page → JD Records: lists records (evidence: `HireSenceAI-main/pages/5_View_JD.py`)
- JD PDF Reader → PDF Text Extraction: extracts text (evidence: `HireSenceAI-main/src/jd/jd_reader.py`)
- JD Records → SQLite Database: reads records (evidence: `HireSenceAI-main/src/jd/jd_repository.py`)
- Resume Upload Page → Authentication: guards access (evidence: `HireSenceAI-main/pages/6_Upload_Resumes.py`)
- Resume Upload Page → Local File Storage: saves file (evidence: `HireSenceAI-main/pages/6_Upload_Resumes.py`)
- Resume Upload Page → Resume Records: records upload
- Resume View Page → Authentication: guards access (evidence: `HireSenceAI-main/pages/7_View_Resumes.py`)
- Resume View Page → Resume Records: lists records (evidence: `HireSenceAI-main/pages/7_View_Resumes.py`)
- Resume Records → SQLite Database: reads and writes (evidence: `HireSenceAI-main/src/resume/resume_db.py`)
