# 1mranhajiyev/job-auto-flow architecture

> Architecture diagram of the GitHub repository 1mranhajiyev/job-auto-flow, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/1mranhajiyev/job-auto-flow
- Repository: https://github.com/1mranhajiyev/job-auto-flow

## Overview

This is a CV-based job-search and application tool with a web interface and a batch pipeline. The principal workflow accepts or reparses a PDF CV, scans configured job sources, uses AI to select and score listings, prepares tailored CVs and application messages, then supports email or manual applications. The web API also manages profile settings, task progress, job selection and application state. The excerpts show the API invoking several pipeline functions; internal details of unsampled pipeline stages and persistence are not fully verifiable.

Main entry points: [`app.py`](https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py) (Web API), [`main.py`](https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py) (Job scoring), [`templates/index.html`](https://github.com/1mranhajiyev/job-auto-flow/blob/main/templates/index.html) (Web interface page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_api["Web API<br/>[app.py]"]
  node_ui["Web interface page<br/>[index.html]"]
end

subgraph group_pipeline["Job pipeline"]
  node_cv["CV parsing<br/>[main.py]"]
  node_sources["Job-source scanning<br/>[main.py]"]
  node_listing["Listing selection<br/>[app.py]"]
  node_scoring["Job scoring<br/>[main.py]"]
end

subgraph group_tailoring["Application preparation"]
  node_tailor["CV tailoring<br/>[main.py]"]
  node_pdf["Tailored PDF<br/>[main.py]"]
  node_email_lookup["HR email lookup<br/>[main.py]"]
end

subgraph group_state["Application management"]
  node_job_state[("Job and task state<br/>[app.py]")]
  node_settings[("Profile and settings<br/>[app.py]")]
  node_tracking[("Application workbook<br/>[main.py]")]
end

node_user(("Candidate"))
node_job_sites["Job sites"]
node_llm["OpenAI service"]
node_mail["SMTP email"]

node_user -->|"uses"| node_api
node_api -->|"serves"| node_ui
node_api -->|"parses CV"| node_cv
node_api -->|"saves profile"| node_settings
node_api -->|"reads and updates"| node_job_state
node_api -->|"scans pages"| node_sources
node_api -->|"opens pages"| node_job_sites
node_api -->|"selects listings"| node_listing
node_listing -->|"asks for matches"| node_llm
node_api -->|"scores jobs"| node_scoring
node_scoring -->|"requests evaluation"| node_llm
node_api -->|"tailors CV"| node_tailor
node_tailor -->|"requests tailoring"| node_llm
node_api -->|"renders CV"| node_pdf
node_api -->|"looks up email"| node_email_lookup
node_api -->|"sends application"| node_mail
node_api -->|"updates workbook"| node_tracking

click node_api "https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py"
click node_ui "https://github.com/1mranhajiyev/job-auto-flow/blob/main/templates/index.html"
click node_cv "https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py"
click node_sources "https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py"
click node_listing "https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py"
click node_scoring "https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py"
click node_tailor "https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py"
click node_pdf "https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py"
click node_email_lookup "https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py"
click node_job_state "https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py"
click node_settings "https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py"
click node_tracking "https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.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_api,node_ui toneBlue
class node_cv,node_sources,node_listing,node_scoring toneAmber
class node_tailor,node_pdf,node_email_lookup toneMint
class node_job_state,node_settings,node_tracking toneRose
class node_user,node_job_sites,node_llm,node_mail toneIndigo
```

## Components

### Web interface

- [Web API](https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py): `app.py`
- [Web interface page](https://github.com/1mranhajiyev/job-auto-flow/blob/main/templates/index.html): `templates/index.html`

### Job pipeline

- [CV parsing](https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py): `main.py`
- [Job-source scanning](https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py): `main.py`
- [Listing selection](https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py): `app.py`
- [Job scoring](https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py): `main.py`

### Application preparation

- [CV tailoring](https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py): `main.py`
- [Tailored PDF](https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py): `main.py`
- [HR email lookup](https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py): `main.py`

### Application management

- [Job and task state](https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py): `app.py`
- [Profile and settings](https://github.com/1mranhajiyev/job-auto-flow/blob/main/app.py): `app.py`
- [Application workbook](https://github.com/1mranhajiyev/job-auto-flow/blob/main/main.py): `main.py`

### Other components

- **Candidate**
- **Job sites**
- **OpenAI service**
- **SMTP email**

## Connections

- Candidate → Web API: uses
- Web API → Web interface page: serves (evidence: `app.py`)
- Web API → CV parsing: parses CV (evidence: `app.py`)
- Web API → Profile and settings: saves profile (evidence: `app.py`)
- Web API → Job and task state: reads and updates (evidence: `app.py`)
- Web API → Job-source scanning: scans pages (evidence: `app.py`)
- Web API → Job sites: opens pages (evidence: `app.py`)
- Web API → Listing selection: selects listings (evidence: `app.py`)
- Listing selection → OpenAI service: asks for matches (evidence: `app.py`)
- Web API → Job scoring: scores jobs (evidence: `app.py`)
- Job scoring → OpenAI service: requests evaluation (evidence: `main.py`)
- Web API → CV tailoring: tailors CV (evidence: `app.py`)
- CV tailoring → OpenAI service: requests tailoring (evidence: `main.py`)
- Web API → Tailored PDF: renders CV (evidence: `app.py`)
- Web API → HR email lookup: looks up email (evidence: `app.py`)
- Web API → SMTP email: sends application (evidence: `app.py`)
- Web API → Application workbook: updates workbook (evidence: `app.py`)
