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!
- π¨ 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, or1.5b. - Cloud REST API Mode: Zero system load for low-spec PCs using OpenAI, DeepSeek, Groq, Google Gemini, or Custom Endpoints.
- Local Ollama Mode: 100% Private, zero cloud costs using
- π 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.
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
ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ
β 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 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 |
# 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# 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 chromiumsudo 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 chromiumsudo 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# 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- Download installer from ollama.com/download/windows.
- Run
OllamaSetup.exe. - 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:7bRun the official single-line install script:
curl -fsSL https://ollama.com/install.sh | sh
# Pull your model:
ollama pull qwen2.5:3bInstall via Homebrew or direct DMG download:
# Via Homebrew:
brew install ollama
# Start service & pull model:
ollama serve &
ollama pull qwen2.5:3bIn the App Settings GUI, select Local Ollama and pick your installed model!
If your computer has low specs (e.g. 4GB RAM), use Cloud API mode for instant AI evaluation with 0% system load:
- Open the App β Navigate to AI & Search Settings.
- Select Cloud AI / REST API.
- 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
- Groq (Super fast, free tier available) β Base URL:
- Enter your API Key or Username/Password, click β‘ Test Connection, and save!
After installing dependencies and setting up your AI engine (Ollama or Cloud API), follow these steps to set up and run JobPilot-AI:
-
Windows (1-Click Launcher): Simply double-click
run_app.batinside the cloned directory.π‘ Note:
run_app.batuses%~dp0to automatically detect your current folder path on any drive or directory, so you don't need to edit anycdpaths!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
- 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.pdfor/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.
- 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.
- Connecting Local AI (Ollama):
- Ensure Ollama service is running locally (
ollama serveor 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, or1.5b).
- Ensure Ollama service is running locally (
- 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.
- 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:
25jobs/day), and set Human Emulation Delays (e.g.,15to45seconds). - Click Save All Settings.
- 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.
- β 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 & Applyorβ Reject & Skip. - π Recruiter Contacts Outreach: Extracted recruiter details appear in the Recruiter Contacts tab. Click
π¬ Open WhatsApp Chatto message recruiters on WhatsApp orβοΈ Send Direct Emailto send a tailored cover letter & resume attachment via SMTP. - π AI Tailored Resume Generator: Click
π Tailor Resume PDFon any job suggestion or contact card to generate a custom-tailored PDF resume saved directly totailored_resumes/.
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)
- 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.
Distributed under the MIT License. See LICENSE for more details.