Add web UI and multi-platform job application automation#1156
Open
emirsaffar-collab wants to merge 17 commits intofeder-cr:mainfrom
Open
Add web UI and multi-platform job application automation#1156emirsaffar-collab wants to merge 17 commits intofeder-cr:mainfrom
emirsaffar-collab wants to merge 17 commits intofeder-cr:mainfrom
Conversation
Fix Python 3.13 compatibility: upgrade Levenshtein
…ss, and Railway deployment Agent-Logs-Url: https://github.com/emirsaffar-collab/Jobs_Applier_AI_Agent_AIHawk/sessions/fb01ed93-4579-4ff1-9531-a9dc19bca942 Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
…ghtweight startup Agent-Logs-Url: https://github.com/emirsaffar-collab/Jobs_Applier_AI_Agent_AIHawk/sessions/fb01ed93-4579-4ff1-9531-a9dc19bca942 Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
Agent-Logs-Url: https://github.com/emirsaffar-collab/Jobs_Applier_AI_Agent_AIHawk/sessions/fb01ed93-4579-4ff1-9531-a9dc19bca942 Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
…tripping Agent-Logs-Url: https://github.com/emirsaffar-collab/Jobs_Applier_AI_Agent_AIHawk/sessions/fb01ed93-4579-4ff1-9531-a9dc19bca942 Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
…-and-async-doc-gen Add web UI with async document generation and Railway deployment
Agent-Logs-Url: https://github.com/emirsaffar-collab/Jobs_Applier_AI_Agent_AIHawk/sessions/b909bbed-135b-4bb6-bc76-150ca0817957 Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
…ition-from-dockerfile fix: add git to Dockerfile for pip git+ dependency
Fix deprecated apt-key in Dockerfile
Add GET/PUT /api/preferences for managing work_preferences.yaml Add GET/PUT /api/resume for managing plain_text_resume.yaml Add WorkPreferences Pydantic models with YAML round-trip support Add validation matching ConfigValidator rules from main.py Ensure data_folder exists when generating documents Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
Rewrite the web UI to use a 3-tab interface: - Generate tab: existing LLM config, action selection, progress tracking - Resume tab: YAML editor with load/save to server via /api/resume - Settings tab: work preferences form with all fields from work_preferences.yaml, including checkboxes, radio buttons, tag-style list inputs, and load/save via /api/preferences The resume textarea moves from the Generate tab to the Resume tab. The Generate tab shows a preview snippet and a hint to edit in the Resume tab. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
- Add GET/PUT /api/preferences endpoints for work_preferences.yaml - Add GET/PUT /api/resume endpoints for plain_text_resume.yaml - Add Pydantic models for work preferences with validation - Rewrite web UI with 3-tab interface: Generate, Resume, Settings - Settings tab has all work_preferences fields (experience levels, job types, date filters, positions, locations, distance, blacklists) - Resume tab has YAML editor with load/save to server - Tag-style inputs for list fields (positions, locations, blacklists) Agent-Logs-Url: https://github.com/emirsaffar-collab/Jobs_Applier_AI_Agent_AIHawk/sessions/8bc96b32-5cbc-4ced-b5ee-0dc6af3a4a1e Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
- Allow missing keys in preferences validation (don't fail on absent fields) - Restore original plain_text_resume.yaml and work_preferences.yaml - Change example load message to clarify it's not saved to server - Add info CSS class for status messages Agent-Logs-Url: https://github.com/emirsaffar-collab/Jobs_Applier_AI_Agent_AIHawk/sessions/8bc96b32-5cbc-4ced-b5ee-0dc6af3a4a1e Co-authored-by: emirsaffar-collab <79217569+emirsaffar-collab@users.noreply.github.com>
…ctionality Merge all CLI config functionality into the web UI
Merges capabilities from 5+ open-source job application repos into one web UI, adding automated job search and Easy Apply across LinkedIn, Indeed, Glassdoor, ZipRecruiter, Dice, and universal career pages. Key additions: - src/automation/: new Playwright-based automation module - browser.py: Chromium lifecycle + per-platform cookie persistence - bot_manager.py: singleton start/stop/pause bot controller - job_ranker.py: LLM-based job fit scoring (1-10, reuses llm_manager) - application_tracker.py: SQLite history (discovered/scored/applied/skipped/failed) - platforms/: LinkedIn, Indeed, Glassdoor, ZipRecruiter, Dice, Universal handlers - src/web/app.py: new /api/bot/* and /api/applications/* endpoints + /ws/bot - src/web/ui.py: two new tabs — "Auto Apply" (bot control + live log) and "Applications" (full history table with filters + CSV export) - data_folder_example/credentials.yaml: per-platform credential template - .gitignore: exclude credentials.yaml, applications.db, cookies/ - requirements.txt: add playwright + aiosqlite Setup: pip install -r requirements.txt && playwright install chromium Reference repos studied: Pickle-Pixel/ApplyPilot, GodsScion/Auto_job_applier_linkedIn, wodsuz/EasyApplyJobsBot, NathanDuma/LinkedIn-Easy-Apply-Bot https://claude.ai/code/session_01Hj2PkVwtfbP7TX9W7foeQs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR introduces a complete web-based interface and multi-platform job application automation system to AIHawk Resume Builder. The changes add a FastAPI web server with an embedded single-page application (SPA), Playwright-based browser automation for multiple job platforms, and a background bot manager for autonomous job applications.
Key Changes
Web Interface (
src/web/)ui.py: Embedded single-page HTML/CSS/JavaScript UI with 1681 lines of markup and styling
app.py: FastAPI web server (987 lines) providing:
Job Application Automation (
src/automation/)bot_manager.py: Global bot lifecycle manager
application_tracker.py: SQLite-backed application history
job_ranker.py: LLM-based job fit scoring
browser.py: Playwright browser lifecycle manager
Platform Handlers (
src/automation/platforms/)base.py: Abstract base class defining platform interface
JobListingandApplyResultdataclasseslinkedin.py: LinkedIn Easy Apply automation (524 lines)
indeed.py: Indeed Quick Apply automation
glassdoor.py: Glassdoor Easy Apply automation
ziprecruiter.py: ZipRecruiter 1-click Apply automation
dice.py: Dice.com job application automation
universal.py: AI-driven universal form filling
init.py: Platform registry mapping names to handler classes
Configuration & Deployment
python main.py webfor launching the web serverDependencies
https://claude.ai/code/session_01Hj2PkVwtfbP7TX9W7foeQs