# kareemmas3ud/hirewire architecture

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

## Overview

HireWire connects a Chrome extension to a Flask service: candidates upload a resume, inspect a job posting, and receive a match analysis and tailored letter. The service persists resumes and applications and also powers a web command center for managing the application pipeline, profile, and letters. The README documents these capabilities; sampled excerpts confirm the extension scrape/upload/analyze calls, analysis-service behavior, and SQLite access. Dashboard route wiring and some backend details are only partially sampled, so uncertain links are omitted.

Main entry points: [`backend/app.py`](https://github.com/kareemmas3ud/hirewire/blob/main/backend/app.py) (Flask API), [`extension/popup.js`](https://github.com/kareemmas3ud/hirewire/blob/main/extension/popup.js) (Extension Popup), [`backend/templates/dashboard.html`](https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/dashboard.html) (Application Dashboard), [`backend/templates/detail.html`](https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/detail.html) (Application Detail)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_extension["Chrome Extension"]
  node_popup["Extension Popup<br/>[popup.js]"]
  node_scraper["Job Scraper<br/>[content.js]"]
end

subgraph group_backend["Backend Services"]
  node_api["Flask API<br/>[app.py]"]
  node_resume_ingest["Resume Ingestion<br/>[app.py]"]
  node_analysis["Job Analysis<br/>[ai_service.py]"]
  node_fallback["Heuristic Fallback<br/>[ai_service.py]"]
end

subgraph group_dashboard["Web Command Center"]
  node_dashboard["Application Dashboard<br/>[dashboard.html]"]
  node_application_detail["Application Detail<br/>[detail.html]"]
  node_resume_page["Resume Manager<br/>[resume.html]"]
  node_layout["Web Layout<br/>[layout.html]"]
end

subgraph group_persistence["Persistence"]
  node_db_access["Database Access<br/>[database.py]"]
  node_sqlite[("SQLite Data<br/>[schema.sql]")]
end

node_candidate(("Candidate"))
node_job_board["Job Listing"]
node_gemini["Google Gemini"]

node_candidate -->|"uses"| node_popup
node_job_board -->|"provides page"| node_scraper
node_popup -->|"requests scrape"| node_scraper
node_popup -->|"uploads resume"| node_api
node_api -->|"handles upload"| node_resume_ingest
node_resume_ingest -->|"saves resume"| node_db_access
node_popup -->|"submits job"| node_api
node_api -->|"requests analysis"| node_analysis
node_analysis -.->|"analyzes with"| node_gemini
node_analysis -->|"falls back"| node_fallback
node_api -->|"reads and saves"| node_db_access
node_db_access -->|"queries and updates"| node_sqlite
node_api -->|"returns results"| node_popup
node_api -->|"renders dashboard"| node_dashboard
node_api -->|"renders detail"| node_application_detail
node_api -->|"renders resume page"| node_resume_page
node_candidate -->|"manages applications"| node_dashboard
node_candidate -->|"edits application"| node_application_detail
node_candidate -->|"manages resume"| node_resume_page
node_dashboard -->|"requests dashboard"| node_api
node_application_detail -->|"submits edits"| node_api
node_resume_page -->|"submits resume"| node_api
node_layout -->|"frames page"| node_dashboard
node_layout -->|"frames page"| node_application_detail
node_layout -->|"frames page"| node_resume_page

click node_popup "https://github.com/kareemmas3ud/hirewire/blob/main/extension/popup.js"
click node_scraper "https://github.com/kareemmas3ud/hirewire/blob/main/extension/content.js"
click node_api "https://github.com/kareemmas3ud/hirewire/blob/main/backend/app.py"
click node_resume_ingest "https://github.com/kareemmas3ud/hirewire/blob/main/backend/app.py"
click node_analysis "https://github.com/kareemmas3ud/hirewire/blob/main/backend/services/ai_service.py"
click node_fallback "https://github.com/kareemmas3ud/hirewire/blob/main/backend/services/ai_service.py"
click node_db_access "https://github.com/kareemmas3ud/hirewire/blob/main/backend/database.py"
click node_sqlite "https://github.com/kareemmas3ud/hirewire/blob/main/backend/schema.sql"
click node_dashboard "https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/dashboard.html"
click node_application_detail "https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/detail.html"
click node_resume_page "https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/resume.html"
click node_layout "https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/layout.html"

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_popup,node_scraper toneBlue
class node_api,node_resume_ingest,node_analysis,node_fallback toneAmber
class node_dashboard,node_application_detail,node_resume_page,node_layout toneMint
class node_db_access,node_sqlite toneRose
class node_candidate,node_job_board,node_gemini toneIndigo
```

## Components

### Chrome Extension

- [Extension Popup](https://github.com/kareemmas3ud/hirewire/blob/main/extension/popup.js): `extension/popup.js`
- [Job Scraper](https://github.com/kareemmas3ud/hirewire/blob/main/extension/content.js): `extension/content.js`

### Backend Services

- [Flask API](https://github.com/kareemmas3ud/hirewire/blob/main/backend/app.py): `backend/app.py`
- [Resume Ingestion](https://github.com/kareemmas3ud/hirewire/blob/main/backend/app.py): `backend/app.py`
- [Job Analysis](https://github.com/kareemmas3ud/hirewire/blob/main/backend/services/ai_service.py): `backend/services/ai_service.py`
- [Heuristic Fallback](https://github.com/kareemmas3ud/hirewire/blob/main/backend/services/ai_service.py): `backend/services/ai_service.py`

### Web Command Center

- [Application Dashboard](https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/dashboard.html): `backend/templates/dashboard.html`
- [Application Detail](https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/detail.html): `backend/templates/detail.html`
- [Resume Manager](https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/resume.html): `backend/templates/resume.html`
- [Web Layout](https://github.com/kareemmas3ud/hirewire/blob/main/backend/templates/layout.html): `backend/templates/layout.html`

### Persistence

- [Database Access](https://github.com/kareemmas3ud/hirewire/blob/main/backend/database.py): `backend/database.py`
- [SQLite Data](https://github.com/kareemmas3ud/hirewire/blob/main/backend/schema.sql): `backend/schema.sql`

### Other components

- **Candidate**
- **Job Listing**
- **Google Gemini**

## Connections

- Candidate → Extension Popup: uses
- Job Listing → Job Scraper: provides page
- Extension Popup → Job Scraper: requests scrape
- Extension Popup → Flask API: uploads resume
- Flask API → Resume Ingestion: handles upload
- Resume Ingestion → Database Access: saves resume
- Extension Popup → Flask API: submits job
- Flask API → Job Analysis: requests analysis
- Job Analysis → Google Gemini: analyzes with
- Job Analysis → Heuristic Fallback: falls back
- Flask API → Database Access: reads and saves
- Database Access → SQLite Data: queries and updates
- Flask API → Extension Popup: returns results
- Flask API → Application Dashboard: renders dashboard
- Flask API → Application Detail: renders detail
- Flask API → Resume Manager: renders resume page
- Candidate → Application Dashboard: manages applications
- Candidate → Application Detail: edits application
- Candidate → Resume Manager: manages resume
- Application Dashboard → Flask API: requests dashboard
- Application Detail → Flask API: submits edits
- Resume Manager → Flask API: submits resume
- Web Layout → Application Dashboard: frames page
- Web Layout → Application Detail: frames page
- Web Layout → Resume Manager: frames page
