Skip to content

Latest commit

Β 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ JobPilot-AI β€” Autonomous Job Search & Outreach Assistant

License: MIT Python: 3.10+ GUI: CustomTkinter Local LLM: Ollama Cloud AI: Universal

An advanced, stealthy desktop assistant that concurrently crawls major job platforms (Indeed, Naukri, and LinkedIn), evaluates job description match using a Local LLM (Qwen 2.5 via Ollama) or Cloud REST API, autofills applications, and extracts recruiter contacts for direct WhatsApp & SMTP cold outreach!


🌟 Key Features

  • 🎨 Modern CustomTkinter Desktop GUI: Sleek dark glassmorphism interface with rounded controls, real-time log streaming, and metric analytics.
  • πŸ€– Dual AI Engine (Local + Cloud):
    • Local Ollama Mode: 100% Private, zero cloud costs using qwen2.5:7b, 3b, or 1.5b.
    • Cloud REST API Mode: Zero system load for low-spec PCs using OpenAI, DeepSeek, Groq, Google Gemini, or Custom Endpoints.
  • πŸ“‡ Recruiter Contact Extractor & Direct Outreach: Automatically detects HR emails, phone numbers, and recruiter names. Provides 1-click WhatsApp Direct Chat (wa.me) and SMTP Direct Email Outreach.
  • πŸ“„ AI Resume Tailorer & PDF Generator: Automatically rewrites professional summaries and achievement bullets tailored for target job descriptions, exporting formatted PDF resumes on demand.
  • πŸ“‘ Candidate QA Vault (Smart ATS Memory): Stores experience years, notice period, salary expectations, work authorization, and relocation preferences for intelligent form auto-filling.
  • πŸ›‘οΈ Account Safety & Anti-Bot Protection: Configurable daily application caps and randomized human typing/browsing delays (15s–45s) to protect your job board accounts.
  • βš‘ Doubt Queue Approvals: Holds borderline or high-salary jobs in a manual review queue where you can review AI explanations before applying.

πŸ“Š System Architecture & Workflow Pipeline

graph TD
    subgraph Desktop_GUI ["CustomTkinter Desktop Interface"]
        UI_Dash["Control Dashboard"]
        UI_Profile["Profile and ATS QA Vault"]
        UI_Settings["AI and Safety Settings"]
    end

    subgraph Crawler_Engine ["Multi-Source Crawler and Scraper"]
        JobSpy["Fast Scraper (JobSpy / Guest API)"]
        Playwright["Playwright Browser (Indeed, Naukri, LinkedIn)"]
    end

    subgraph AI_Engine ["Dual AI Evaluation Engine"]
        LocalOllama["Offline Ollama (Qwen 2.5: 7b / 3b / 1.5b)"]
        CloudAPI["Cloud REST API (Groq, DeepSeek, OpenAI, Gemini)"]
        RAG["PDF Resume Parser and Match Scoring"]
    end

    subgraph Workflow_Decision ["Decision and Safety Pipeline"]
        Filter["Score Check (Min Match Threshold)"]
        Safety["Account Safety Rate Limiter and Human Delay"]
    end

    subgraph Execution_Layer ["Execution and Outreach Layer"]
        AutoApply["Auto-Apply and ATS Form Filler"]
        DoubtQueue["Doubt Queue (Human Approval)"]
        Contacts["Recruiter Extractor (Emails / Phones)"]
        Outreach["WhatsApp Chat and Direct SMTP Email"]
        PDFGen["AI Tailored Resume PDF Generator"]
    end

    UI_Profile --> RAG
    UI_Settings --> Crawler_Engine
    Crawler_Engine --> RAG
    RAG --> LocalOllama
    RAG --> CloudAPI
    LocalOllama --> Filter
    CloudAPI --> Filter

    Filter -->|"High Match Score (70%+)"| Safety
    Filter -->|"Borderline Doubt"| DoubtQueue
    
    Safety --> AutoApply
    Crawler_Engine --> Contacts
    Contacts --> Outreach
    RAG --> PDFGen

    DoubtQueue -->|"User Approves"| AutoApply
Loading

πŸ”„ End-to-End Execution Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  1. SEARCH & CRAWL     β”‚  ──► β”‚  2. AI EVALUATION      β”‚  ──► β”‚  3. SAFETY & FILTER    β”‚
β”‚  Crawls Indeed, Naukri β”‚      β”‚  Parses PDF resume &   β”‚      β”‚  Enforces daily cap    β”‚
β”‚  & LinkedIn via        β”‚      β”‚  scores match via      β”‚      β”‚  & human typing delay  β”‚
β”‚  Playwright/JobSpy     β”‚      β”‚  Ollama / Cloud LLM    β”‚      β”‚  (15s - 45s)           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚                                                               β”‚
            β–Ό                                                               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  5. RECRUITER OUTREACH β”‚      ◄────────────────────────────── β”‚  4. ACTION & APPLY     β”‚
β”‚  Extracts HR emails &  β”‚      Generates Tailored Resume PDF   β”‚  Auto-fills ATS forms  β”‚
β”‚  phones for 1-click    β”‚      & routing for direct outreach   β”‚  or queues in Doubt    β”‚
β”‚  WhatsApp & SMTP Email β”‚                                      β”‚  Approvals tab         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ’» System Requirements

System Spec Recommended AI Setup System Load
Low Specs (4GB RAM, Dual-Core CPU, No GPU) Cloud API Mode (Groq / DeepSeek / Gemini) OR qwen2.5:1.5b 0% PC Lag
Mid Specs (8GB–16GB RAM, i5/i7 CPU) Local Ollama Mode (qwen2.5:3b or qwen2.5:7b) 100% Private
High Specs (16GB+ RAM, NVIDIA GPU) Local Ollama Mode (qwen2.5:7b or qwen2.5:14b) Maximum Performance

βš™οΈ Installation Guide (Cross-Platform)

πŸͺŸ Windows (10/11)

# 1. Clone Repository
git clone https://github.com/BhairavJShah/JobPilot-AI.git
cd JobPilot-AI

# 2. Create Virtual Environment
python -m venv venv
.\venv\Scripts\activate

# 3. Install Dependencies
pip install -r requirements.txt
playwright install chromium

🐧 Linux (Ubuntu, Debian, Fedora, Arch, Manjaro)

Ubuntu / Debian / Mint:

# 1. System Dependencies
sudo apt update && sudo apt install -y python3 python3-pip python3-venv git

# 2. Clone & Setup
git clone https://github.com/BhairavJShah/JobPilot-AI.git
cd JobPilot-AI
python3 -m venv venv
source venv/bin/activate

# 3. Install Python Dependencies & Playwright System Libraries
pip install -r requirements.txt
playwright install --with-deps chromium

Fedora / RHEL / CentOS:

sudo dnf install -y python3 python3-pip git
git clone https://github.com/BhairavJShah/JobPilot-AI.git
cd JobPilot-AI
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
playwright install --with-deps chromium

Arch Linux / Manjaro:

sudo pacman -S python python-pip git
git clone https://github.com/BhairavJShah/JobPilot-AI.git
cd JobPilot-AI
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
playwright install --with-deps chromium

🍎 macOS (Apple Silicon M1/M2/M3/M4 & Intel)

# 1. Clone Repository
git clone https://github.com/BhairavJShah/JobPilot-AI.git
cd JobPilot-AI

# 2. Create Virtual Environment
python3 -m venv venv
source venv/bin/activate

# 3. Install Dependencies
pip install -r requirements.txt
playwright install chromium

🧠 AI Setup Guide (Local vs Cloud)

Option A: Local AI Setup (Ollama β€” 100% Private)

πŸͺŸ Windows:

  1. Download installer from ollama.com/download/windows.
  2. Run OllamaSetup.exe.
  3. Open Command Prompt or PowerShell and pull a model:
# For Low/Mid Spec PCs (Fast ~1.1GB):
ollama pull qwen2.5:1.5b

# For Mid Spec PCs (Recommended balance ~2.0GB):
ollama pull qwen2.5:3b

# For High Spec PCs (High accuracy ~4.7GB):
ollama pull qwen2.5:7b

🐧 Linux (All Distros):

Run the official single-line install script:

curl -fsSL https://ollama.com/install.sh | sh

# Pull your model:
ollama pull qwen2.5:3b

🍎 macOS:

Install via Homebrew or direct DMG download:

# Via Homebrew:
brew install ollama

# Start service & pull model:
ollama serve &
ollama pull qwen2.5:3b

In the App Settings GUI, select Local Ollama and pick your installed model!


Option B: Cloud AI Setup (Zero System Load for Low-Spec PCs)

If your computer has low specs (e.g. 4GB RAM), use Cloud API mode for instant AI evaluation with 0% system load:

  1. Open the App βž” Navigate to AI & Search Settings.
  2. Select Cloud AI / REST API.
  3. Choose your provider preset:
    • Groq (Super fast, free tier available) βž” Base URL: https://api.groq.com/openai/v1, Model: llama-3.3-70b-versatile
    • DeepSeek βž” Base URL: https://api.deepseek.com/v1, Model: deepseek-chat
    • OpenAI βž” Base URL: https://api.openai.com/v1, Model: gpt-4o-mini
    • Google AI βž” Base URL: https://generativelanguage.googleapis.com/v1beta, Model: gemini-2.5-flash
  4. Enter your API Key or Username/Password, click ⚑ Test Connection, and save!

πŸš€ Post-Installation Setup & First-Time Walkthrough

After installing dependencies and setting up your AI engine (Ollama or Cloud API), follow these steps to set up and run JobPilot-AI:

1. Launch the Application

  • Windows (1-Click Launcher): Simply double-click run_app.bat inside the cloned directory.

    πŸ’‘ Note: run_app.bat uses %~dp0 to automatically detect your current folder path on any drive or directory, so you don't need to edit any cd paths!

    Or launch manually via Command Prompt / PowerShell:

    python gui_app.py
  • Linux / macOS: Open terminal inside the project directory and run:

    python3 gui_app.py

2. First-Time Setup in GUI (5 Simple Steps)

πŸ“Œ Step 1: Candidate Profile & ATS QA Vault (β—‰ My Profile)

  • Enter your Full Name, Email, Phone, LinkedIn URL, GitHub URL, and Portfolio URL.
  • Provide the full local path to your Resume PDF (e.g. C:\Users\YourName\Documents\resume.pdf or /home/user/resume.pdf).
  • Add your Technical Skills (e.g., Python, React, SQL).
  • Fill Candidate QA Vault: Enter default answers for common ATS questions (Years of Experience, Notice Period, Current & Expected CTC, Work Authorization, Relocation) so the auto-filler answers recurring questions without stopping.
  • Click Save Profile.

πŸ”’ Step 2: Platform Credentials & SMTP Outbox (πŸ”’ Credentials)

  • Job Board Credentials: Optionally enter your logins for Indeed, Naukri, and LinkedIn. (If left blank, the bot will use your active Edge browser session or prompt you to log in once).
  • SMTP Mail Server: Enter your SMTP host (e.g. smtp.gmail.com), port (587), email address, and App Password to enable direct 1-click recruiter email outreach.
  • Click Save Credentials.

🧠 Step 3: Configure AI Engine & Connect Local AI (βš™ AI & Search)

  • Connecting Local AI (Ollama):
    • Ensure Ollama service is running locally (ollama serve or Ollama system tray icon).
    • The app connects to the default local path: http://127.0.0.1:11434/api/generate.
    • In the App Settings GUI under AI Engine Provider, select Local Ollama (Offline).
    • Click Refresh Models β€” the app will automatically query your local Ollama path and populate the dropdown with all models installed on your system (e.g., qwen2.5:7b, 3b, or 1.5b).
  • Connecting Cloud AI (REST API):
    • Select Cloud AI / REST API.
    • Choose a preset (Groq, DeepSeek, OpenAI, Gemini), enter your API Key, and click ⚑ Test Connection.

🎯 Step 4: Job Search Queries & Safety Limits (βš™ AI & Search)

  • Target Job Queries: Add roles you want to target (e.g., Software Engineer, AI Developer, Full Stack Engineer).
  • Skip Keywords: Add keywords you want to avoid (e.g., C++, COBOL, Sales).
  • Geographic Scope: Select Entire Country or choose specific Cities & States using the location hierarchy selector.
  • Account Safety Limits: Enable Account Safety Mode, set a Daily Application Cap (default: 25 jobs/day), and set Human Emulation Delays (e.g., 15 to 45 seconds).
  • Click Save All Settings.

πŸ€– Step 5: Start the Bot & Monitor (⊞ Dashboard)

  • Navigate to the Control Dashboard.
  • Click β–Ά Start Bot.
  • Watch real-time logs in the Operation Logs panel and track metrics on the live analytics dashboard.

3. Using Advanced Features During Bot Execution

  • βš‘ Doubt Queue Approvals: When the AI finds borderline jobs or non-standard titles, they appear in the Approvals tab. Select any job to inspect AI match explanations and click βœ“ Approve & Apply or βœ• Reject & Skip.
  • πŸ“‡ Recruiter Contacts Outreach: Extracted recruiter details appear in the Recruiter Contacts tab. Click πŸ’¬ Open WhatsApp Chat to message recruiters on WhatsApp or βœ‰οΈ Send Direct Email to send a tailored cover letter & resume attachment via SMTP.
  • πŸ“„ AI Tailored Resume Generator: Click πŸ“„ Tailor Resume PDF on any job suggestion or contact card to generate a custom-tailored PDF resume saved directly to tailored_resumes/.

πŸ“‚ Project Structure

JobPilot-AI/
β”œβ”€β”€ automation/             # Playwright automation, LLM evaluators, fast scrapers
β”‚   β”œβ”€β”€ bot_runner.py       # Multi-platform browser crawler & safety engine
β”‚   β”œβ”€β”€ form_autofiller.py  # Smart ATS QA Vault form autofiller
β”‚   β”œβ”€β”€ job_scraper.py      # Rapid multi-site job search scraper
β”‚   β”œβ”€β”€ llm_evaluator.py    # Dual Local/Cloud LLM evaluation logic
β”‚   └── status_tracker.py   # Application status scanner
β”œβ”€β”€ core/                   # System core modules
β”‚   β”œβ”€β”€ config_manager.py   # JSON configuration & location hierarchy manager
β”‚   β”œβ”€β”€ contact_extractor.py# Regex & AI recruiter contact extractor
β”‚   β”œβ”€β”€ db_manager.py       # CSV database logger & metrics engine
β”‚   β”œβ”€β”€ email_smtp.py       # Direct SMTP outreach engine
β”‚   β”œβ”€β”€ resume_exporter.py # AI-tailored PDF resume generator
β”‚   β”œβ”€β”€ resume_parser.py   # PyPDF2 resume parser
β”‚   └── state.py            # Global shared runtime state & thread-safe flags
β”œβ”€β”€ ui/                     # CustomTkinter Dark GUI Views
β”‚   β”œβ”€β”€ app_window.py       # Main window & sidebar navigation
β”‚   β”œβ”€β”€ components.py       # Design system, pill-chips, rounded CTk widgets
β”‚   β”œβ”€β”€ dashboard_view.py   # Analytics dashboard & RAG AI assistant chat
β”‚   β”œβ”€β”€ history_view.py     # Application history table
β”‚   β”œβ”€β”€ suggestions_view.py # Career suggestions & cover letter generator
β”‚   β”œβ”€β”€ approvals_view.py   # Human-in-the-loop doubt queue approvals
β”‚   β”œβ”€β”€ contacts_view.py    # Recruiter contacts, WhatsApp & SMTP outreach
β”‚   β”œβ”€β”€ settings_view.py    # AI provider, search thresholds & safety settings
β”‚   β”œβ”€β”€ profile_view.py     # Candidate profile & ATS QA vault setup
β”‚   └── accounts_view.py    # Platform logins & SMTP credentials setup
β”œβ”€β”€ gui_app.py              # Application entry point
β”œβ”€β”€ run_app.bat             # Windows one-click batch launcher
β”œβ”€β”€ config.json             # Local user configuration file (Git-ignored)
β”œβ”€β”€ config.json.example     # Example configuration template for setup
β”œβ”€β”€ applied_jobs.csv        # Application database (Git-ignored)
└── recruiter_contacts.csv  # Recruiter database (Git-ignored)

πŸ”’ Security & Privacy

  • Local Credentials: All passwords and API keys are stored locally in config.json, which is automatically ignored by .gitignore.
  • Local LLM Mode: Zero data leaves your computer when running with local Ollama.
  • Local Edge Profile: Chrome/Edge browser automation uses a local persistent profile context on your machine.

πŸ“„ License

Distributed under the MIT License. See LICENSE for more details.

About

An intelligent, open-source AI job application assistant powered by Playwright & LLMs (Local & Cloud AI). Concurrently searches Indeed, Naukri, and LinkedIn for Easy Apply roles, evaluates candidate fit against resumes, and automates applications with manual review queues.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages