# voidbydefault/linkedin-easyapply-ai architecture

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

- Interactive diagram: https://gitdiagram.com/voidbydefault/linkedin-easyapply-ai
- Repository: https://github.com/voidbydefault/linkedin-easyapply-ai

## Overview

This is a GUI-driven LinkedIn job-search and application assistant. The user configures job criteria and applicant details, then the launcher coordinates browser automation: jobs are discovered, screened against a resume-derived profile, and either applied to or saved in Scout mode for later review. Application answers can combine configured facts with Gemini-generated responses; daily limits and job history support safer operation and reporting. The README also documents PDF resume parsing, anti-detection behavior, and analytics. Wiring for unsampled configuration and dashboard internals is shown only where supported by the excerpts or README.

Main entry points: [`app/bot/bot.py`](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/bot.py) (Apply bot), [`app/ai_handler.py`](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/ai_handler.py) (AI handler), [`run.py`](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/run.py) (Launcher), [`app/bot/database.py`](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/database.py) (Job history store)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Setup and control"]
  node_launcher["Launcher<br/>[run.py]"]
  node_config_ui["Configuration GUI<br/>[config_ui.py]"]
end

subgraph group_intelligence["AI and profile"]
  node_ai["AI handler<br/>[ai_handler.py]"]
end

subgraph group_automation["Job automation"]
  node_bot["Apply bot<br/>[bot.py]"]
  node_forms["Application forms<br/>[forms.py]"]
  node_human_utils["Human-like interaction<br/>[utils.py]"]
  node_scout["Scout bot<br/>[scout_bot.py]"]
end

subgraph group_tracking["Tracking and insights"]
  node_database[("Job history store<br/>[database.py]")]
  node_dashboard["Application analytics<br/>[dashboard.py]"]
  node_scout_dashboard["Scout review<br/>[scout_dashboard.py]"]
end

node_user(("Applicant"))
node_linkedin(("LinkedIn"))
node_resume["PDF resume"]
node_gemini{{"Google Gemini"}}

node_user -->|"sets preferences"| node_config_ui
node_launcher -->|"opens GUI"| node_config_ui
node_config_ui -->|"signals setup"| node_launcher
node_launcher -->|"starts automation"| node_bot
node_launcher -->|"initializes AI"| node_ai
node_resume -->|"provides resume"| node_ai
node_ai -->|"requests analysis"| node_gemini
node_bot -->|"searches and applies"| node_linkedin
node_bot -->|"scores jobs"| node_ai
node_bot -->|"fills applications"| node_forms
node_forms -->|"answers questions"| node_ai
node_bot -->|"uses interaction helpers"| node_human_utils
node_bot -->|"records outcomes"| node_database
node_scout -->|"searches jobs"| node_linkedin
node_scout -->|"saves matches"| node_database
node_scout -->|"scores jobs"| node_ai
node_user -->|"reviews matches"| node_scout_dashboard
node_scout_dashboard -->|"reads and updates scout jobs"| node_database
node_user -->|"views metrics"| node_dashboard
node_dashboard -->|"reads job history"| node_database

click node_launcher "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/run.py"
click node_config_ui "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/config_ui.py"
click node_ai "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/ai_handler.py"
click node_bot "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/bot.py"
click node_forms "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/forms.py"
click node_human_utils "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/utils.py"
click node_scout "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/scout_bot.py"
click node_database "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/database.py"
click node_dashboard "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/dashboard.py"
click node_scout_dashboard "https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/scout_dashboard.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_launcher,node_config_ui toneBlue
class node_ai toneAmber
class node_bot,node_forms,node_human_utils,node_scout toneMint
class node_database,node_dashboard,node_scout_dashboard toneRose
class node_user,node_linkedin,node_resume,node_gemini toneIndigo
```

## Components

### Setup and control

- [Launcher](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/run.py): `run.py`
- [Configuration GUI](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/config_ui.py): `app/config_ui.py`

### AI and profile

- [AI handler](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/ai_handler.py): `app/ai_handler.py`

### Job automation

- [Apply bot](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/bot.py): `app/bot/bot.py`
- [Application forms](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/forms.py): `app/bot/forms.py`
- [Human-like interaction](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/utils.py): `app/bot/utils.py`
- [Scout bot](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/scout_bot.py): `app/bot/scout_bot.py`

### Tracking and insights

- [Job history store](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/bot/database.py): `app/bot/database.py`
- [Application analytics](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/dashboard.py): `app/dashboard.py`
- [Scout review](https://github.com/voidbydefault/linkedin-easyapply-ai/blob/main/app/scout_dashboard.py): `app/scout_dashboard.py`

### Other components

- **Applicant**
- **LinkedIn**
- **PDF resume**
- **Google Gemini**

## Connections

- Applicant → Configuration GUI: sets preferences
- Launcher → Configuration GUI: opens GUI
- Configuration GUI → Launcher: signals setup
- Launcher → Apply bot: starts automation
- Launcher → AI handler: initializes AI
- PDF resume → AI handler: provides resume
- AI handler → Google Gemini: requests analysis
- Apply bot → LinkedIn: searches and applies
- Apply bot → AI handler: scores jobs
- Apply bot → Application forms: fills applications
- Application forms → AI handler: answers questions
- Apply bot → Human-like interaction: uses interaction helpers
- Apply bot → Job history store: records outcomes
- Scout bot → LinkedIn: searches jobs
- Scout bot → Job history store: saves matches
- Scout bot → AI handler: scores jobs
- Applicant → Scout review: reviews matches
- Scout review → Job history store: reads and updates scout jobs
- Applicant → Application analytics: views metrics
- Application analytics → Job history store: reads job history
