1 line
127 KiB
JSON
1 line
127 KiB
JSON
{"repo": "abhishekmandapmalvi/autoapply", "files": {"docs/wiki/Configuration-Guide.md": {"053071ba1bba5733b522d78c3d645002d817e55a": {"t": 1785746442.5928416, "n": 8909, "h": "92f4815c3d981f5d", "c": "# Configuration Guide\n\n## Config File Location\n\nAll configuration is stored in a single JSON file:\n\n```\n~/.autoapply/config.json\n```\n\nOn Windows this resolves to `C:\\Users\\<username>\\.autoapply\\config.json`.\n\nThe data directory can be overridden with the `AUTOAPPLY_DATA_DIR` environment variable.\n\n> **Tip**: You can edit `config.json` directly, but it is recommended to use the Settings UI or API to avoid validation errors. The app validates configuration using Pydantic v2 models on load.\n\n---\n\n## LLM Provider Setup\n\nAutoApply supports four LLM providers for AI-powered resume and cover letter generation.\n\n### Supported Providers\n\n| Provider | Default Model | API Key Prefix |\n|----------|--------------|----------------|\n| Anthropic | `claude-sonnet-4-20250514` | `sk-ant-` |\n| OpenAI | `gpt-4o` | `sk-` |\n| Google | `gemini-2.0-flash` | `AI...` |\n| DeepSeek | `deepseek-chat` | `sk-` |\n\n### Configuration\n\nSet the provider in the `llm` section of `config.json`:\n\n```json\n{\n \"llm\": {\n \"provider\": \"anthropic\",\n \"api_key\": \"sk-ant-...\",\n \"model\": \"claude-sonnet-4-20250514\"\n }\n}\n```\n\nOr configure via the Settings page in the UI (Settings > AI Provider).\n\nYou can change the model to any model supported by the provider. For example:\n\n```json\n{\n \"llm\": {\n \"provider\": \"openai\",\n \"api_key\": \"sk-...\",\n \"model\": \"gpt-4o-mini\"\n }\n}\n```\n\n### Validate Your Key\n\nUse the API to validate before saving:\n\n```bash\ncurl -X POST http://127.0.0.1:5000/api/validate-api-key \\\n -H \"Authorization: Bearer <token>\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"provider\": \"anthropic\", \"api_key\": \"sk-ant-...\"}'\n```\n\n### No AI Provider\n\nIf no provider is configured, AutoApply falls back to template-based document generation. Resumes and cover letters use your profile data directly without AI tailoring.\n\n---\n\n## API Key Storage\n\nAutoApply stores API keys securely using the OS keyring when available:\n\n| Platform | Backend |\n|----------|---------|\n| Windows | Windows Credential Locker |\n| macOS | macOS Keychain |\n| Linux | SecretService (GNOME Keyring / KWallet) |\n\nIf the keyring is unavailable (e.g., headless Linux without a desktop environment), keys fall back to plaintext storage in `config.json`.\n\n**Auto-migration**: On startup, if a plaintext API key is found in `config.json` and the keyring is available, the key is automatically migrated to the keyring and removed from the config file.\n\n---\n\n## User Profile\n\nThe `profile` section stores your personal information used for applications:\n\n```json\n{\n \"profile\": {\n \"full_name\": \"Jane Doe\",\n \"email\": \"jane@example.com\",\n \"phone\": \"+1-555-0100\",\n \"location\": \"San Francisco, CA\",\n \"linkedin_url\": \"https://linkedin.com/in/janedoe\",\n \"years_experience\": 5,\n \"education\": \"BS Computer Science, Stanford University\",\n \"skills\": [\"Python\", \"JavaScript\", \"TypeScript\", \"AWS\", \"Docker\"],\n \"screening_answers\": {\n \"Are you authorized to work in the US?\": \"Yes\",\n \"Do you require visa sponsorship?\": \"No\",\n \"What is your expected salary?\": \"$150,000\",\n \"Are you willing to relocate?\": \"Yes\",\n \"years_of_experience_python\": \"5\",\n \"years_of_experience_javascript\": \"4\"\n }\n }\n}\n```\n\n### Field Reference\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `full_name` | string | Yes | Your full name as it should appear on applications |\n| `email` | string | Yes | Email address for applications |\n| `phone` | string | No | Phone number |\n| `location` | string | Yes | City, State/Country |\n| `linkedin_url` | string | No | Your LinkedIn profile URL |\n| `years_experience` | int | Yes | Total years of professional experience |\n| `education` | string | No | Education summary |\n| `skills` | string[] | No | List of skills |\n| `screening_answers` | object | No | Pre-filled answers for common screening questions |\n\n### Screening Answers\n\nThe `screening_answers` dictionary is used by Workday and Ashby appliers to auto-fill screening questions during the application process. Keys are the question text (or a normalized form), and values are your answers.\n\nYou can add screening answers via the Settings UI (Profile > Screening Answers) or directly in `config.json`.\n\n---\n\n## Search Criteria\n\nThe `search_criteria` section defines what jobs the bot looks for:\n\n```json\n{\n \"search_criteria\": {\n \"job_titles\": [\"Software Engineer\", \"Backend Developer\", \"Full Stack Developer\"],\n \"locations\": [\"San Francisco, CA\", \"New York, NY\", \"Remote\"],\n \"remote_only\": false,\n \"experience_level\": \"mid\",\n \"excluded_companies\": [\"Company A\", \"Company B\"]\n }\n}\n```\n\n### Field Reference\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `job_titles` | string[] | `[]` | Job titles to search for |\n| `locations` | string[] | `[]` | Geographic locations to search in |\n| `remote_only` | bool | `false` | Only return remote positions |\n| `experience_level` | string | `\"mid\"` | Filter: `entry`, `mid`, `senior`, `executive` |\n| `excluded_companies` | string[] | `[]` | Companies to skip |\n\n---\n\n## Bot Settings\n\nThe `bot_settings` section controls bot behavior:\n\n```json\n{\n \"bot_settings\": {\n \"apply_mode\": \"review\",\n \"max_applications_per_day\": 50,\n \"search_engines\": [\"linkedin\", \"indeed\"]\n }\n}\n```\n\n### Apply Modes\n\n| Mode | Behavior |\n|------|----------|\n| `full_auto` | Searches, scores, generates documents, and applies automatically. No human intervention needed. |\n| `review` | Searches and scores jobs, then pauses for your approval. You approve, reject, skip, or manually apply for each job. |\n| `watch` | Searches and scores only. No applications are submitted. Useful for monitoring the job market. |\n\n### Field Reference\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `apply_mode` | string | `\"review\"` | One of: `full_auto`, `review`, `watch` |\n| `max_applications_per_day` | int | `50` | Daily application cap |\n| `search_engines` | string[] | `[\"linkedin\", \"indeed\"]` | Platforms to search |\n\n---\n\n## Schedule Configuration\n\nThe `schedule` section enables time-based automatic bot operation:\n\n```json\n{\n \"schedule\": {\n \"enabled\": true,\n \"start_time\": \"09:00\",\n \"end_time\": \"17:00\",\n \"days_of_week\": [0, 1, 2, 3, 4],\n \"timezone\": \"America/Los_Angeles\"\n }\n}\n```\n\n### Field Reference\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `enabled` | bool | `false` | Enable scheduled operation |\n| `start_time` | string | `\"09:00\"` | Time to auto-start (HH:MM, 24-hour) |\n| `end_time` | string | `\"17:00\"` | Time to auto-stop (HH:MM, 24-hour) |\n| `days_of_week` | int[] | `[0,1,2,3,4]` | Days to run (0=Monday, 6=Sunday) |\n| `timezone` | string | `\"UTC\"` | IANA timezone identifier |\n\nWhen scheduling is enabled, the bot automatically starts at `start_time` and stops at `end_time` on the configured days. Outside the schedule window, the bot remains idle.\n\n---\n\n## Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `AUTOAPPLY_DEV` | unset | Set to `1` to enable development mode. Bypasses API authentication, enables debug logging. |\n| `AUTOAPPLY_DEBUG` | unset | Set to `1` to enable Flask debug mode and verbose logging. |\n| `AUTOAPPLY_LOG_FORMAT` | `text` | Log output format: `text` (human-readable) or `json` (structured). |\n| `AUTOAPPLY_DATA_DIR` | `~/.autoapply` | Override the data directory path. Affects config, database, browser profile, and experience files locations. |\n\n### Example Usage\n\n```bash\n# Run in development mode with JSON logging\nexport AUTOAPPLY_DEV=1\nexport AUTOAPPLY_LOG_FORMAT=json\npython run.py\n\n# Use a custom data directory\nexport AUTOAPPLY_DATA_DIR=/opt/autoapply/data\npython run.py\n```\n\n---\n\n## Full Config Example\n\n```json\n{\n \"profile\": {\n \"full_name\": \"Jane Doe\",\n \"email\": \"jane@example.com\",\n \"phone\": \"+1-555-0100\",\n \"location\": \"San Francisco, CA\",\n \"linkedin_url\": \"https://linkedin.com/in/janedoe\",\n \"years_experience\": 5,\n \"education\": \"BS Computer Science, Stanford University\",\n \"skills\": [\"Python\", \"JavaScript\", \"AWS\"],\n \"screening_answers\": {\n \"Are you authorized to work in the US?\": \"Yes\",\n \"Do you require visa sponsorship?\": \"No\"\n }\n },\n \"search_criteria\": {\n \"job_titles\": [\"Software Engineer\", \"Backend Developer\"],\n \"locations\": [\"San Francisco, CA\", \"Remote\"],\n \"remote_only\": false,\n \"experience_level\": \"mid\",\n \"excluded_companies\": []\n },\n \"bot_settings\": {\n \"apply_mode\": \"review\",\n \"max_applications_per_day\": 50,\n \"search_engines\": [\"linkedin\", \"indeed\"]\n },\n \"llm\": {\n \"provider\": \"anthropic\",\n \"model\": \"claude-sonnet-4-20250514\"\n },\n \"schedule\": {\n \"enabled\": false,\n \"start_time\": \"09:00\",\n \"end_time\": \"17:00\",\n \"days_of_week\": [0, 1, 2, 3, 4],\n \"timezone\": \"America/Los_Angeles\"\n }\n}\n```\n"}, "5dbaa0d590f88138aea3baace19ea4bf7b93be9d": {"t": 1785764285.602655, "n": 8909, "h": "92f4815c3d981f5d", "c": "# Configuration Guide\n\n## Config File Location\n\nAll configuration is stored in a single JSON file:\n\n```\n~/.autoapply/config.json\n```\n\nOn Windows this resolves to `C:\\Users\\<username>\\.autoapply\\config.json`.\n\nThe data directory can be overridden with the `AUTOAPPLY_DATA_DIR` environment variable.\n\n> **Tip**: You can edit `config.json` directly, but it is recommended to use the Settings UI or API to avoid validation errors. The app validates configuration using Pydantic v2 models on load.\n\n---\n\n## LLM Provider Setup\n\nAutoApply supports four LLM providers for AI-powered resume and cover letter generation.\n\n### Supported Providers\n\n| Provider | Default Model | API Key Prefix |\n|----------|--------------|----------------|\n| Anthropic | `claude-sonnet-4-20250514` | `sk-ant-` |\n| OpenAI | `gpt-4o` | `sk-` |\n| Google | `gemini-2.0-flash` | `AI...` |\n| DeepSeek | `deepseek-chat` | `sk-` |\n\n### Configuration\n\nSet the provider in the `llm` section of `config.json`:\n\n```json\n{\n \"llm\": {\n \"provider\": \"anthropic\",\n \"api_key\": \"sk-ant-...\",\n \"model\": \"claude-sonnet-4-20250514\"\n }\n}\n```\n\nOr configure via the Settings page in the UI (Settings > AI Provider).\n\nYou can change the model to any model supported by the provider. For example:\n\n```json\n{\n \"llm\": {\n \"provider\": \"openai\",\n \"api_key\": \"sk-...\",\n \"model\": \"gpt-4o-mini\"\n }\n}\n```\n\n### Validate Your Key\n\nUse the API to validate before saving:\n\n```bash\ncurl -X POST http://127.0.0.1:5000/api/validate-api-key \\\n -H \"Authorization: Bearer <token>\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"provider\": \"anthropic\", \"api_key\": \"sk-ant-...\"}'\n```\n\n### No AI Provider\n\nIf no provider is configured, AutoApply falls back to template-based document generation. Resumes and cover letters use your profile data directly without AI tailoring.\n\n---\n\n## API Key Storage\n\nAutoApply stores API keys securely using the OS keyring when available:\n\n| Platform | Backend |\n|----------|---------|\n| Windows | Windows Credential Locker |\n| macOS | macOS Keychain |\n| Linux | SecretService (GNOME Keyring / KWallet) |\n\nIf the keyring is unavailable (e.g., headless Linux without a desktop environment), keys fall back to plaintext storage in `config.json`.\n\n**Auto-migration**: On startup, if a plaintext API key is found in `config.json` and the keyring is available, the key is automatically migrated to the keyring and removed from the config file.\n\n---\n\n## User Profile\n\nThe `profile` section stores your personal information used for applications:\n\n```json\n{\n \"profile\": {\n \"full_name\": \"Jane Doe\",\n \"email\": \"jane@example.com\",\n \"phone\": \"+1-555-0100\",\n \"location\": \"San Francisco, CA\",\n \"linkedin_url\": \"https://linkedin.com/in/janedoe\",\n \"years_experience\": 5,\n \"education\": \"BS Computer Science, Stanford University\",\n \"skills\": [\"Python\", \"JavaScript\", \"TypeScript\", \"AWS\", \"Docker\"],\n \"screening_answers\": {\n \"Are you authorized to work in the US?\": \"Yes\",\n \"Do you require visa sponsorship?\": \"No\",\n \"What is your expected salary?\": \"$150,000\",\n \"Are you willing to relocate?\": \"Yes\",\n \"years_of_experience_python\": \"5\",\n \"years_of_experience_javascript\": \"4\"\n }\n }\n}\n```\n\n### Field Reference\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `full_name` | string | Yes | Your full name as it should appear on applications |\n| `email` | string | Yes | Email address for applications |\n| `phone` | string | No | Phone number |\n| `location` | string | Yes | City, State/Country |\n| `linkedin_url` | string | No | Your LinkedIn profile URL |\n| `years_experience` | int | Yes | Total years of professional experience |\n| `education` | string | No | Education summary |\n| `skills` | string[] | No | List of skills |\n| `screening_answers` | object | No | Pre-filled answers for common screening questions |\n\n### Screening Answers\n\nThe `screening_answers` dictionary is used by Workday and Ashby appliers to auto-fill screening questions during the application process. Keys are the question text (or a normalized form), and values are your answers.\n\nYou can add screening answers via the Settings UI (Profile > Screening Answers) or directly in `config.json`.\n\n---\n\n## Search Criteria\n\nThe `search_criteria` section defines what jobs the bot looks for:\n\n```json\n{\n \"search_criteria\": {\n \"job_titles\": [\"Software Engineer\", \"Backend Developer\", \"Full Stack Developer\"],\n \"locations\": [\"San Francisco, CA\", \"New York, NY\", \"Remote\"],\n \"remote_only\": false,\n \"experience_level\": \"mid\",\n \"excluded_companies\": [\"Company A\", \"Company B\"]\n }\n}\n```\n\n### Field Reference\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `job_titles` | string[] | `[]` | Job titles to search for |\n| `locations` | string[] | `[]` | Geographic locations to search in |\n| `remote_only` | bool | `false` | Only return remote positions |\n| `experience_level` | string | `\"mid\"` | Filter: `entry`, `mid`, `senior`, `executive` |\n| `excluded_companies` | string[] | `[]` | Companies to skip |\n\n---\n\n## Bot Settings\n\nThe `bot_settings` section controls bot behavior:\n\n```json\n{\n \"bot_settings\": {\n \"apply_mode\": \"review\",\n \"max_applications_per_day\": 50,\n \"search_engines\": [\"linkedin\", \"indeed\"]\n }\n}\n```\n\n### Apply Modes\n\n| Mode | Behavior |\n|------|----------|\n| `full_auto` | Searches, scores, generates documents, and applies automatically. No human intervention needed. |\n| `review` | Searches and scores jobs, then pauses for your approval. You approve, reject, skip, or manually apply for each job. |\n| `watch` | Searches and scores only. No applications are submitted. Useful for monitoring the job market. |\n\n### Field Reference\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `apply_mode` | string | `\"review\"` | One of: `full_auto`, `review`, `watch` |\n| `max_applications_per_day` | int | `50` | Daily application cap |\n| `search_engines` | string[] | `[\"linkedin\", \"indeed\"]` | Platforms to search |\n\n---\n\n## Schedule Configuration\n\nThe `schedule` section enables time-based automatic bot operation:\n\n```json\n{\n \"schedule\": {\n \"enabled\": true,\n \"start_time\": \"09:00\",\n \"end_time\": \"17:00\",\n \"days_of_week\": [0, 1, 2, 3, 4],\n \"timezone\": \"America/Los_Angeles\"\n }\n}\n```\n\n### Field Reference\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `enabled` | bool | `false` | Enable scheduled operation |\n| `start_time` | string | `\"09:00\"` | Time to auto-start (HH:MM, 24-hour) |\n| `end_time` | string | `\"17:00\"` | Time to auto-stop (HH:MM, 24-hour) |\n| `days_of_week` | int[] | `[0,1,2,3,4]` | Days to run (0=Monday, 6=Sunday) |\n| `timezone` | string | `\"UTC\"` | IANA timezone identifier |\n\nWhen scheduling is enabled, the bot automatically starts at `start_time` and stops at `end_time` on the configured days. Outside the schedule window, the bot remains idle.\n\n---\n\n## Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `AUTOAPPLY_DEV` | unset | Set to `1` to enable development mode. Bypasses API authentication, enables debug logging. |\n| `AUTOAPPLY_DEBUG` | unset | Set to `1` to enable Flask debug mode and verbose logging. |\n| `AUTOAPPLY_LOG_FORMAT` | `text` | Log output format: `text` (human-readable) or `json` (structured). |\n| `AUTOAPPLY_DATA_DIR` | `~/.autoapply` | Override the data directory path. Affects config, database, browser profile, and experience files locations. |\n\n### Example Usage\n\n```bash\n# Run in development mode with JSON logging\nexport AUTOAPPLY_DEV=1\nexport AUTOAPPLY_LOG_FORMAT=json\npython run.py\n\n# Use a custom data directory\nexport AUTOAPPLY_DATA_DIR=/opt/autoapply/data\npython run.py\n```\n\n---\n\n## Full Config Example\n\n```json\n{\n \"profile\": {\n \"full_name\": \"Jane Doe\",\n \"email\": \"jane@example.com\",\n \"phone\": \"+1-555-0100\",\n \"location\": \"San Francisco, CA\",\n \"linkedin_url\": \"https://linkedin.com/in/janedoe\",\n \"years_experience\": 5,\n \"education\": \"BS Computer Science, Stanford University\",\n \"skills\": [\"Python\", \"JavaScript\", \"AWS\"],\n \"screening_answers\": {\n \"Are you authorized to work in the US?\": \"Yes\",\n \"Do you require visa sponsorship?\": \"No\"\n }\n },\n \"search_criteria\": {\n \"job_titles\": [\"Software Engineer\", \"Backend Developer\"],\n \"locations\": [\"San Francisco, CA\", \"Remote\"],\n \"remote_only\": false,\n \"experience_level\": \"mid\",\n \"excluded_companies\": []\n },\n \"bot_settings\": {\n \"apply_mode\": \"review\",\n \"max_applications_per_day\": 50,\n \"search_engines\": [\"linkedin\", \"indeed\"]\n },\n \"llm\": {\n \"provider\": \"anthropic\",\n \"model\": \"claude-sonnet-4-20250514\"\n },\n \"schedule\": {\n \"enabled\": false,\n \"start_time\": \"09:00\",\n \"end_time\": \"17:00\",\n \"days_of_week\": [0, 1, 2, 3, 4],\n \"timezone\": \"America/Los_Angeles\"\n }\n}\n```\n"}}, "README.md": {"053071ba1bba5733b522d78c3d645002d817e55a": {"t": 1785747260.7014413, "n": 11987, "h": "1bb4f72321764ae2", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using your choice of AI provider (Anthropic, OpenAI, Google, or DeepSeek)\n- **Knowledge Base** — Upload career documents (PDF, DOCX, TXT, MD) once, reuse categorized entries across applications. TF-IDF scoring ranks entries by job relevance\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, Lever, Workday, and Ashby\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, resume library, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Accessible** — WCAG 2.1 AA compliant: keyboard navigation, screen reader support, focus management, reduced motion\n- **Internationalization** — Full i18n with JSON locale files, `data-i18n` HTML attributes, and backend `t()` function. Add new languages by copying `static/locales/en.json`\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+, Node.js 18+, and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup_env.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Launch the desktop app\ncd electron\nnpm install\nnpm start\n```\n\nA native app window opens with the dashboard. A setup wizard walks you through configuration on first launch.\n\n## Building Installers\n\nTo create standalone installers (no Python/Node.js required on the target machine):\n\n```bash\ncd electron\nnpm install\nnpm run dist:win # Windows NSIS installer (.exe)\nnpm run dist:mac # macOS disk image (.dmg)\nnpm run dist:linux # Linux portable (.AppImage)\n```\n\nThe build process automatically syncs the version from `pyproject.toml`, generates app icons, downloads an embedded Python runtime, and bundles all dependencies. Output goes to `electron/build/`.\n\nFor CI-based releases, push a `v*` tag (e.g., `v1.9.0`) to trigger the GitHub Actions workflow that builds all three platforms and creates a GitHub Release.\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n Workday, Ashby\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — AI creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Application Answers** | Pre-fill screening questions (work auth, visa, experience, salary, EEO) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Multi-provider LLM API for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ ├── scheduler.py # Time-based bot scheduling\n│ ├── knowledge_base.py # KB CRUD, LLM extraction, resume ingestion\n│ ├── document_parser.py # PDF/DOCX/TXT/MD text extraction\n│ ├── resume_parser.py # Markdown resume → KB entries\n│ ├── resume_scorer.py # TF-IDF cosine similarity scoring\n│ ├── jd_analyzer.py # JD keyword extraction, section detection\n│ ├── experience_calculator.py # Domain-specific years from roles\n│ ├── resume_assembler.py # Score, select, render, compile resumes from KB\n│ ├── latex_compiler.py # LaTeX → PDF compilation (TinyTeX/pdflatex)\n│ ├── ats_scorer.py # ATS compatibility scoring (6 platforms)\n│ ├── ats_profiles.py # ATS platform-specific scoring profiles\n│ └── kb_migrator.py # Auto-migrate legacy .txt/.md files to KB\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby)\n├── templates/index.html # Single-page dashboard (HTML shell)\n├── static/\n│ ├── css/main.css # Extracted stylesheet\n│ ├── js/ # 17 ES modules (app.js entry point)\n│ └── locales/en.json # i18n string catalog (430+ keys, 25 sections)\n├── routes/ # 8 Flask Blueprints (bot, applications, config, profile, login, analytics, lifecycle, knowledge_base)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ ├── python-backend.js # Python process management\n│ ├── icons/ # Generated app icons (PNG, ICO, ICNS)\n│ └── scripts/ # Build scripts (version sync, icon gen, Python bundling)\n├── tests/ # 1385 tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Application Flow](docs/architecture/application-flow.md) | Flowcharts for the full bot pipeline |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Knowledge Base](docs/guides/knowledge-base.md) | Upload documents, build KB, assemble resumes with zero API calls |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history + Knowledge Base (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── uploads/ # Uploaded career documents (PDF, DOCX, TXT, MD)\n│ ├── resumes/ # Generated resumes (PDF)\n│ ├── cover_letters/ # Generated cover letters\n│ └── job_descriptions/ # Saved job postings (HTML)\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n1385 tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, applier modules, i18n, accessibility, security hardening, resilience, analytics, resume versioning, knowledge base, TF-IDF scoring, LaTeX compilation, ATS scoring, resume assembly, performance, intelligence, and migration.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Multi-provider LLM API (Anthropic, OpenAI, Google, DeepSeek) |\n| PDF generation | ReportLab (fallback), LaTeX via Jinja2 templates (KB assembly) |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (17 ES modules, no build step) |\n| i18n | JSON locale files (`static/locales/`) with `t()` translation function |\n| Accessibility | WCAG 2.1 AA (ARIA, keyboard nav, focus management, reduced motion) |\n| Tests | pytest (1385 tests, 97% coverage on core modules) |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "7a5974a2f9f981f0c5a709c5cd70c7e09d792d8b": {"t": 1785764283.8578885, "n": 11987, "h": "1bb4f72321764ae2", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using your choice of AI provider (Anthropic, OpenAI, Google, or DeepSeek)\n- **Knowledge Base** — Upload career documents (PDF, DOCX, TXT, MD) once, reuse categorized entries across applications. TF-IDF scoring ranks entries by job relevance\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, Lever, Workday, and Ashby\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, resume library, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Accessible** — WCAG 2.1 AA compliant: keyboard navigation, screen reader support, focus management, reduced motion\n- **Internationalization** — Full i18n with JSON locale files, `data-i18n` HTML attributes, and backend `t()` function. Add new languages by copying `static/locales/en.json`\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+, Node.js 18+, and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup_env.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Launch the desktop app\ncd electron\nnpm install\nnpm start\n```\n\nA native app window opens with the dashboard. A setup wizard walks you through configuration on first launch.\n\n## Building Installers\n\nTo create standalone installers (no Python/Node.js required on the target machine):\n\n```bash\ncd electron\nnpm install\nnpm run dist:win # Windows NSIS installer (.exe)\nnpm run dist:mac # macOS disk image (.dmg)\nnpm run dist:linux # Linux portable (.AppImage)\n```\n\nThe build process automatically syncs the version from `pyproject.toml`, generates app icons, downloads an embedded Python runtime, and bundles all dependencies. Output goes to `electron/build/`.\n\nFor CI-based releases, push a `v*` tag (e.g., `v1.9.0`) to trigger the GitHub Actions workflow that builds all three platforms and creates a GitHub Release.\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n Workday, Ashby\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — AI creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Application Answers** | Pre-fill screening questions (work auth, visa, experience, salary, EEO) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Multi-provider LLM API for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ ├── scheduler.py # Time-based bot scheduling\n│ ├── knowledge_base.py # KB CRUD, LLM extraction, resume ingestion\n│ ├── document_parser.py # PDF/DOCX/TXT/MD text extraction\n│ ├── resume_parser.py # Markdown resume → KB entries\n│ ├── resume_scorer.py # TF-IDF cosine similarity scoring\n│ ├── jd_analyzer.py # JD keyword extraction, section detection\n│ ├── experience_calculator.py # Domain-specific years from roles\n│ ├── resume_assembler.py # Score, select, render, compile resumes from KB\n│ ├── latex_compiler.py # LaTeX → PDF compilation (TinyTeX/pdflatex)\n│ ├── ats_scorer.py # ATS compatibility scoring (6 platforms)\n│ ├── ats_profiles.py # ATS platform-specific scoring profiles\n│ └── kb_migrator.py # Auto-migrate legacy .txt/.md files to KB\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby)\n├── templates/index.html # Single-page dashboard (HTML shell)\n├── static/\n│ ├── css/main.css # Extracted stylesheet\n│ ├── js/ # 17 ES modules (app.js entry point)\n│ └── locales/en.json # i18n string catalog (430+ keys, 25 sections)\n├── routes/ # 8 Flask Blueprints (bot, applications, config, profile, login, analytics, lifecycle, knowledge_base)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ ├── python-backend.js # Python process management\n│ ├── icons/ # Generated app icons (PNG, ICO, ICNS)\n│ └── scripts/ # Build scripts (version sync, icon gen, Python bundling)\n├── tests/ # 1385 tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Application Flow](docs/architecture/application-flow.md) | Flowcharts for the full bot pipeline |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Knowledge Base](docs/guides/knowledge-base.md) | Upload documents, build KB, assemble resumes with zero API calls |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history + Knowledge Base (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── uploads/ # Uploaded career documents (PDF, DOCX, TXT, MD)\n│ ├── resumes/ # Generated resumes (PDF)\n│ ├── cover_letters/ # Generated cover letters\n│ └── job_descriptions/ # Saved job postings (HTML)\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n1385 tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, applier modules, i18n, accessibility, security hardening, resilience, analytics, resume versioning, knowledge base, TF-IDF scoring, LaTeX compilation, ATS scoring, resume assembly, performance, intelligence, and migration.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Multi-provider LLM API (Anthropic, OpenAI, Google, DeepSeek) |\n| PDF generation | ReportLab (fallback), LaTeX via Jinja2 templates (KB assembly) |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (17 ES modules, no build step) |\n| i18n | JSON locale files (`static/locales/`) with `t()` translation function |\n| Accessibility | WCAG 2.1 AA (ARIA, keyboard nav, focus management, reduced motion) |\n| Tests | pytest (1385 tests, 97% coverage on core modules) |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "e620530276bcf970e6b64059fab97d9dc937582e": {"t": 1785764285.233731, "n": 10611, "h": "c4a42cfd4362f4b8", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using your choice of AI provider (Anthropic, OpenAI, Google, or DeepSeek)\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, Lever, Workday, and Ashby\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Accessible** — WCAG 2.1 AA compliant: keyboard navigation, screen reader support, focus management, reduced motion\n- **Internationalization** — Full i18n with JSON locale files, `data-i18n` HTML attributes, and backend `t()` function. Add new languages by copying `static/locales/en.json`\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+, Node.js 18+, and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup_env.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Launch the desktop app\ncd electron\nnpm install\nnpm start\n```\n\nA native app window opens with the dashboard. A setup wizard walks you through configuration on first launch.\n\n## Building Installers\n\nTo create standalone installers (no Python/Node.js required on the target machine):\n\n```bash\ncd electron\nnpm install\nnpm run dist:win # Windows NSIS installer (.exe)\nnpm run dist:mac # macOS disk image (.dmg)\nnpm run dist:linux # Linux portable (.AppImage)\n```\n\nThe build process automatically syncs the version from `pyproject.toml`, generates app icons, downloads an embedded Python runtime, and bundles all dependencies. Output goes to `electron/build/`.\n\nFor CI-based releases, push a `v*` tag (e.g., `v1.9.0`) to trigger the GitHub Actions workflow that builds all three platforms and creates a GitHub Release.\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n Workday, Ashby\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — AI creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Application Answers** | Pre-fill screening questions (work auth, visa, experience, salary, EEO) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Multi-provider LLM API for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ └── scheduler.py # Time-based bot scheduling\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby)\n├── templates/index.html # Single-page dashboard (HTML shell)\n├── static/\n│ ├── css/main.css # Extracted stylesheet\n│ ├── js/ # 17 ES modules (app.js entry point)\n│ └── locales/en.json # i18n string catalog (383 keys, 23 sections)\n├── routes/ # 7 Flask Blueprints (bot, applications, config, profile, login, analytics, lifecycle)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ ├── python-backend.js # Python process management\n│ ├── icons/ # Generated app icons (PNG, ICO, ICNS)\n│ └── scripts/ # Build scripts (version sync, icon gen, Python bundling)\n├── tests/ # 738 tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Application Flow](docs/architecture/application-flow.md) | Flowcharts for the full bot pipeline |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── resumes/ # Generated resumes (PDF)\n│ ├── cover_letters/ # Generated cover letters\n│ └── job_descriptions/ # Saved job postings (HTML)\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n738 tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, applier modules, i18n, accessibility, security hardening, and resilience.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Multi-provider LLM API (Anthropic, OpenAI, Google, DeepSeek) |\n| PDF generation | ReportLab |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (17 ES modules, no build step) |\n| i18n | JSON locale files (`static/locales/`) with `t()` translation function |\n| Accessibility | WCAG 2.1 AA (ARIA, keyboard nav, focus management, reduced motion) |\n| Tests | pytest (738 tests, 97% coverage on core modules) |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "b774f9a3df0259b919f0fef236914a6f79f3edb8": {"t": 1785764286.6569958, "n": 10607, "h": "73332de90d79b916", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using your choice of AI provider (Anthropic, OpenAI, Google, or DeepSeek)\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, Lever, Workday, and Ashby\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Accessible** — WCAG 2.1 AA compliant: keyboard navigation, screen reader support, focus management, reduced motion\n- **Internationalization** — Full i18n with JSON locale files, `data-i18n` HTML attributes, and backend `t()` function. Add new languages by copying `static/locales/en.json`\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+, Node.js 18+, and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Launch the desktop app\ncd electron\nnpm install\nnpm start\n```\n\nA native app window opens with the dashboard. A setup wizard walks you through configuration on first launch.\n\n## Building Installers\n\nTo create standalone installers (no Python/Node.js required on the target machine):\n\n```bash\ncd electron\nnpm install\nnpm run dist:win # Windows NSIS installer (.exe)\nnpm run dist:mac # macOS disk image (.dmg)\nnpm run dist:linux # Linux portable (.AppImage)\n```\n\nThe build process automatically syncs the version from `pyproject.toml`, generates app icons, downloads an embedded Python runtime, and bundles all dependencies. Output goes to `electron/build/`.\n\nFor CI-based releases, push a `v*` tag (e.g., `v1.9.0`) to trigger the GitHub Actions workflow that builds all three platforms and creates a GitHub Release.\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n Workday, Ashby\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — AI creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Application Answers** | Pre-fill screening questions (work auth, visa, experience, salary, EEO) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Multi-provider LLM API for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ └── scheduler.py # Time-based bot scheduling\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby)\n├── templates/index.html # Single-page dashboard (HTML shell)\n├── static/\n│ ├── css/main.css # Extracted stylesheet\n│ ├── js/ # 17 ES modules (app.js entry point)\n│ └── locales/en.json # i18n string catalog (383 keys, 23 sections)\n├── routes/ # 7 Flask Blueprints (bot, applications, config, profile, login, analytics, lifecycle)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ ├── python-backend.js # Python process management\n│ ├── icons/ # Generated app icons (PNG, ICO, ICNS)\n│ └── scripts/ # Build scripts (version sync, icon gen, Python bundling)\n├── tests/ # 738 tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Application Flow](docs/architecture/application-flow.md) | Flowcharts for the full bot pipeline |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── resumes/ # Generated resumes (PDF)\n│ ├── cover_letters/ # Generated cover letters\n│ └── job_descriptions/ # Saved job postings (HTML)\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n738 tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, applier modules, i18n, accessibility, security hardening, and resilience.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Multi-provider LLM API (Anthropic, OpenAI, Google, DeepSeek) |\n| PDF generation | ReportLab |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (17 ES modules, no build step) |\n| i18n | JSON locale files (`static/locales/`) with `t()` translation function |\n| Accessibility | WCAG 2.1 AA (ARIA, keyboard nav, focus management, reduced motion) |\n| Tests | pytest (738 tests, 97% coverage on core modules) |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "84e5aeed65c702d63f93389dbf8352799d27a30a": {"t": 1785764288.0574934, "n": 9732, "h": "d183a1d879750991", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using your choice of AI provider (Anthropic, OpenAI, Google, or DeepSeek)\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, Lever, Workday, and Ashby\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Accessible** — WCAG 2.1 AA compliant: keyboard navigation, screen reader support, focus management, reduced motion\n- **Internationalization** — All strings externalized to JSON locale files; add new languages by copying `en.json`\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+, Node.js 18+, and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Launch the desktop app\ncd electron\nnpm install\nnpm start\n```\n\nA native app window opens with the dashboard. A setup wizard walks you through configuration on first launch.\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n Workday, Ashby\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — AI creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Application Answers** | Pre-fill screening questions (work auth, visa, experience, salary, EEO) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Multi-provider LLM API for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ └── scheduler.py # Time-based bot scheduling\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby)\n├── templates/index.html # Single-page dashboard (HTML shell)\n├── static/\n│ ├── css/main.css # Extracted stylesheet\n│ ├── js/ # 17 ES modules (app.js entry point)\n│ └── locales/en.json # i18n string catalog (383 keys, 23 sections)\n├── routes/ # 7 Flask Blueprints (bot, applications, config, profile, login, analytics, lifecycle)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ └── python-backend.js # Python process management\n├── tests/ # 563+ tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Application Flow](docs/architecture/application-flow.md) | Flowcharts for the full bot pipeline |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── resumes/ # Generated resumes (PDF)\n│ ├── cover_letters/ # Generated cover letters\n│ └── job_descriptions/ # Saved job postings (HTML)\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n563+ tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, applier modules, i18n, accessibility, security hardening, and resilience.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Multi-provider LLM API (Anthropic, OpenAI, Google, DeepSeek) |\n| PDF generation | ReportLab |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (17 ES modules, no build step) |\n| i18n | JSON locale files (`static/locales/`) with `t()` translation function |\n| Accessibility | WCAG 2.1 AA (ARIA, keyboard nav, focus management, reduced motion) |\n| Tests | pytest (563+ tests, 97% coverage on core modules) |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "0accb433457d64143911efe1b13d2b28137b1872": {"t": 1785764289.3788967, "n": 9723, "h": "d51776a91e2cb009", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using your choice of AI provider (Anthropic, OpenAI, Google, or DeepSeek)\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, Lever, Workday, and Ashby\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Accessible** — WCAG 2.1 AA compliant: keyboard navigation, screen reader support, focus management, reduced motion\n- **Internationalization** — All strings externalized to JSON locale files; add new languages by copying `en.json`\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+, Node.js 18+, and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Launch the desktop app\ncd electron\nnpm install\nnpm start\n```\n\nA native app window opens with the dashboard. A setup wizard walks you through configuration on first launch.\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n Workday, Ashby\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — AI creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Application Answers** | Pre-fill screening questions (work auth, visa, experience, salary, EEO) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Multi-provider LLM API for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ └── scheduler.py # Time-based bot scheduling\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby)\n├── templates/index.html # Single-page dashboard (HTML shell)\n├── static/\n│ ├── css/main.css # Extracted stylesheet\n│ ├── js/ # 17 ES modules (app.js entry point)\n│ └── locales/en.json # i18n string catalog (460+ strings)\n├── routes/ # 7 Flask Blueprints (bot, applications, config, profile, login, analytics, lifecycle)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ └── python-backend.js # Python process management\n├── tests/ # 563+ tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Application Flow](docs/architecture/application-flow.md) | Flowcharts for the full bot pipeline |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── resumes/ # Generated resumes (PDF)\n│ ├── cover_letters/ # Generated cover letters\n│ └── job_descriptions/ # Saved job postings (HTML)\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n563+ tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, applier modules, i18n, accessibility, security hardening, and resilience.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Multi-provider LLM API (Anthropic, OpenAI, Google, DeepSeek) |\n| PDF generation | ReportLab |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (17 ES modules, no build step) |\n| i18n | JSON locale files (`static/locales/`) with `t()` translation function |\n| Accessibility | WCAG 2.1 AA (ARIA, keyboard nav, focus management, reduced motion) |\n| Tests | pytest (563+ tests, 97% coverage on core modules) |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "8ddb07888f2eff043d9f7b7908332208306351e6": {"t": 1785764290.5561922, "n": 8906, "h": "4cc2b081795b6587", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using your choice of AI provider (Anthropic, OpenAI, Google, or DeepSeek)\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, Lever, Workday, and Ashby\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+, Node.js 18+, and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Launch the desktop app\ncd electron\nnpm install\nnpm start\n```\n\nA native app window opens with the dashboard. A setup wizard walks you through configuration on first launch.\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n Workday, Ashby\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — AI creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Application Answers** | Pre-fill screening questions (work auth, visa, experience, salary, EEO) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Multi-provider LLM API for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ └── scheduler.py # Time-based bot scheduling\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby)\n├── templates/index.html # Single-page dashboard (vanilla JS)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ └── python-backend.js # Python process management\n├── tests/ # 205 tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Application Flow](docs/architecture/application-flow.md) | Flowcharts for the full bot pipeline |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── resumes/ # Generated resumes (PDF)\n│ ├── cover_letters/ # Generated cover letters\n│ └── job_descriptions/ # Saved job postings (HTML)\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n205 tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, and applier modules.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Multi-provider LLM API (Anthropic, OpenAI, Google, DeepSeek) |\n| PDF generation | ReportLab |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (single `index.html`) |\n| Tests | pytest |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "1a7e2960e9f583c9ee2625566a66127292feac75": {"t": 1785764292.0307145, "n": 8808, "h": "93035cd0ca37f995", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using [Claude Code](https://docs.anthropic.com/en/docs/claude-code)\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, Lever, Workday, and Ashby\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+ and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Run\npython run.py\n```\n\nThe dashboard opens at `http://localhost:5000`. A setup wizard walks you through configuration on first launch.\n\n### Desktop App (Electron)\n\nFor a native desktop experience with system tray support:\n\n```bash\ncd electron\nnpm install\nnpx electron .\n```\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n Workday, Ashby\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — Claude Code creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Application Answers** | Pre-fill screening questions (work auth, visa, experience, salary, EEO) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Claude Code integration for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ └── scheduler.py # Time-based bot scheduling\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby)\n├── templates/index.html # Single-page dashboard (vanilla JS)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ └── python-backend.js # Python process management\n├── tests/ # 205 tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── resumes/ # Generated resumes (PDF)\n│ └── cover_letters/ # Generated cover letters\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n205 tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, and applier modules.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Claude Code CLI (subprocess) |\n| PDF generation | ReportLab |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (single `index.html`) |\n| Tests | pytest |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "5b0390a387d70c1cac88698db663f15501e684df": {"t": 1785764293.2861824, "n": 8579, "h": "add6da34301267a2", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using [Claude Code](https://docs.anthropic.com/en/docs/claude-code)\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, and Lever\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+ and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Run\npython run.py\n```\n\nThe dashboard opens at `http://localhost:5000`. A setup wizard walks you through configuration on first launch.\n\n### Desktop App (Electron)\n\nFor a native desktop experience with system tray support:\n\n```bash\ncd electron\nnpm install\nnpx electron .\n```\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — Claude Code creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Claude Code integration for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ └── scheduler.py # Time-based bot scheduling\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever)\n├── templates/index.html # Single-page dashboard (vanilla JS)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ └── python-backend.js # Python process management\n├── tests/ # 205 tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── resumes/ # Generated resumes (PDF)\n│ └── cover_letters/ # Generated cover letters\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n205 tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, and applier modules.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Claude Code CLI (subprocess) |\n| PDF generation | ReportLab |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (single `index.html`) |\n| Tests | pytest |\n\n## Disclaimer\n\n> **This software is provided for educational and personal-use purposes only.**\n>\n> - AutoApply automates interactions with third-party platforms (LinkedIn, Indeed, Greenhouse, Lever). **Using automated tools may violate the Terms of Service of these platforms.** You are solely responsible for ensuring your use complies with all applicable terms, policies, and laws.\n> - The authors and contributors are **not responsible** for any consequences arising from the use of this software, including but not limited to: account suspension or termination, legal action from platform providers, rejected or misattributed job applications, or any other damages.\n> - This software is provided **\"as is\"** without warranty of any kind. Use it **at your own risk**.\n> - The authors do not endorse or encourage violation of any platform's Terms of Service.\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "cc9124e52189458bdbb457c5f0185ac78ea7e892": {"t": 1785764294.618451, "n": 7717, "h": "c7a9e8b37c5756d3", "c": "# AutoApply\n\n**Automated job application platform that searches, scores, and applies to jobs on your behalf.**\n\nAutoApply searches LinkedIn and Indeed, scores each job against your preferences, generates tailored resumes and cover letters using AI, and submits applications — all running locally on your machine. Your data never leaves your computer.\n\n[](https://www.python.org/downloads/)\n[](#testing)\n[](LICENSE)\n\n---\n\n## Features\n\n- **Multi-platform search** — LinkedIn and Indeed, with configurable job titles, locations, and keywords\n- **Smart scoring** — Each job scored 0–100 based on title match, salary, location, experience level, and keyword relevance\n- **AI-powered documents** — Generates tailored resumes (PDF) and cover letters per job using [Claude Code](https://docs.anthropic.com/en/docs/claude-code)\n- **Automated applications** — Fills forms, uploads documents, and submits on LinkedIn Easy Apply, Indeed Quick Apply, Greenhouse, and Lever\n- **Review mode** — Optionally review each application before it's submitted\n- **Dashboard** — Real-time live feed, application history, analytics, CSV export\n- **Desktop app** — Electron shell with system tray support (minimize to tray, runs in background)\n- **Login session persistence** — Log in once, sessions are saved across restarts\n- **Scheduling** — Set days and hours for the bot to run automatically\n- **Fully local** — No cloud, no accounts, no telemetry. Everything at `~/.autoapply/`\n\n## Quick Start\n\n**Prerequisites**: Python 3.11+ and Google Chrome installed.\n\n```bash\n# 1. Clone and set up\ngit clone https://github.com/AbhishekMandapmalvi/AutoApply.git\ncd AutoApply\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup.py\n\n# 2. Install Playwright browser (for job searching/applying)\nplaywright install chromium\n\n# 3. Run\npython run.py\n```\n\nThe dashboard opens at `http://localhost:5000`. A setup wizard walks you through configuration on first launch.\n\n### Desktop App (Electron)\n\nFor a native desktop experience with system tray support:\n\n```bash\ncd electron\nnpm install\nnpx electron .\n```\n\n## How It Works\n\n```\n┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n│ Search │────▶│ Score & │────▶│ Generate │────▶│ Apply │\n│ LinkedIn │ │ Filter │ │ Resume + CL │ │ Auto-fill │\n│ Indeed │ │ (0-100) │ │ (Claude AI) │ │ & Submit │\n└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘\n │ │ │ │\n ▼ ▼ ▼ ▼\n Configurable Min score gate Tailored per job LinkedIn Easy Apply\n titles, locations, + keyword filters with your experience Indeed Quick Apply\n salary, keywords files as context Greenhouse, Lever\n```\n\n1. **Search** — Playwright-based scrapers find jobs on enabled platforms\n2. **Score** — Each job rated against your preferences (title, location, salary, keywords)\n3. **Filter** — Jobs below your minimum score or on the blacklist are skipped\n4. **Generate** — Claude Code creates a tailored resume and cover letter using your experience files\n5. **Apply** — Bot fills out application forms, uploads documents, and submits\n6. **Track** — Every application saved to SQLite with status, score, and generated documents\n\n## Configuration\n\nAll settings are managed through the dashboard UI. Key options:\n\n| Setting | Description |\n|---------|-------------|\n| **Job Titles** | Roles to search for (e.g., \"Software Engineer\", \"Program Manager\") |\n| **Locations** | Where to search (e.g., \"Remote\", \"New York, NY\") |\n| **Min Match Score** | Only apply to jobs scoring above this threshold (default: 75) |\n| **Apply Mode** | `full_auto` (hands-free), `review` (approve each), or `watch` (observe only) |\n| **Max Applications/Day** | Daily cap to avoid rate limiting (default: 50) |\n| **Schedule** | Days and hours for automatic operation |\n| **Company Blacklist** | Companies to always skip |\n\n## Project Structure\n\n```\nAutoApply/\n├── app.py # Flask + SocketIO backend (API, WebSocket events)\n├── run.py # Entry point (port detection, server launch)\n├── config/settings.py # Pydantic config models\n├── db/database.py # SQLite database layer\n├── core/\n│ ├── ai_engine.py # Claude Code integration for document generation\n│ ├── filter.py # Job scoring and ATS detection\n│ ├── resume_renderer.py # PDF resume generation (ReportLab)\n│ └── scheduler.py # Time-based bot scheduling\n├── bot/\n│ ├── bot.py # Main bot loop (search → filter → generate → apply)\n│ ├── browser.py # Playwright browser manager\n│ ├── search/ # LinkedIn and Indeed scrapers\n│ └── apply/ # Platform-specific appliers (LinkedIn, Indeed, Greenhouse, Lever)\n├── templates/index.html # Single-page dashboard (vanilla JS)\n├── electron/ # Electron desktop shell\n│ ├── main.js # App window, tray, lifecycle\n│ └── python-backend.js # Python process management\n├── tests/ # 205 tests (pytest)\n└── docs/ # User and developer documentation\n```\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, platform login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | Full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | Describe your background for better AI-generated resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nEverything stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history (SQLite)\n├── profile/\n│ ├── experiences/ # Your background (.txt files fed to AI)\n│ ├── resumes/ # Generated resumes (PDF)\n│ └── cover_letters/ # Generated cover letters\n├── browser_profile/ # Chrome login sessions (persisted)\n└── backend.log # Server logs\n```\n\n## Testing\n\n```bash\npython -m pytest tests/ -v\n```\n\n205 tests covering settings, database, API endpoints, bot logic, AI engine, scoring/filtering, resume rendering, scheduling, login flow, and applier modules.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Python, Flask, Flask-SocketIO, gevent |\n| Database | SQLite (stdlib `sqlite3`) |\n| Browser automation | Playwright (persistent context, system Chrome) |\n| AI | Claude Code CLI (subprocess) |\n| PDF generation | ReportLab |\n| Config | Pydantic v2 |\n| Desktop | Electron |\n| Frontend | Vanilla JS SPA (single `index.html`) |\n| Tests | pytest |\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feature/my-feature`)\n3. Make changes and add tests\n4. Run `python -m pytest tests/ -v` to verify\n5. Submit a pull request\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n"}, "42b4cf18b7131e97492d3b9a30629daa6d128661": {"t": 1785764296.5322587, "n": 2516, "h": "e2d21d99a7bf70a5", "c": "# AutoApply\n\nAutomated job application bot that runs on your computer. It searches LinkedIn and Indeed, generates tailored resumes and cover letters using AI, and submits applications for you.\n\nEverything runs locally — your data never leaves your machine.\n\n## Quick Start\n\n**You need**: Python 3.11+ and optionally [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) for AI-generated resumes.\n\n```bash\n# 1. Set up Python\npython -m venv venv\nvenv\\Scripts\\activate # Windows\nsource venv/bin/activate # macOS/Linux\npython setup.py\n\n# 2. Install Playwright's browser (needed for job searching/applying)\nplaywright install chromium\n\n# 3. Run\npython run.py\n```\n\nYour browser opens to the dashboard at `http://localhost:5000`. A setup wizard walks you through configuration on first launch.\n\n**Want the desktop app instead?** See [Setup & Installation](docs/guides/setup.md).\n\n## What It Does\n\n1. **Searches** LinkedIn and Indeed for jobs matching your criteria\n2. **Scores** each job (0-100) based on title, salary, location, and keywords\n3. **Generates** a tailored resume and cover letter for each match (using Claude Code)\n4. **Applies** automatically — fills out forms, uploads documents, submits\n5. **Tracks** every application in a dashboard you can filter, search, and export\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Setup & Installation](docs/guides/setup.md) | Install, first launch, and login |\n| [How the Bot Works](docs/guides/how-the-bot-works.md) | The full pipeline — searching, scoring, applying |\n| [Writing Experience Files](docs/guides/experience-files.md) | How to describe your background for better resumes |\n| [How AI Generation Works](docs/guides/ai-generation.md) | What happens when AutoApply creates your documents |\n| [Configuration](docs/guides/configuration.md) | All settings explained |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common problems and fixes |\n| [API Reference](docs/api/endpoints.md) | REST API for developers |\n| [Changelog](CHANGELOG.md) | Version history |\n\n## Your Data\n\nAll data stays on your machine at `~/.autoapply/`:\n\n```\n~/.autoapply/\n├── config.json # Your settings\n├── autoapply.db # Application history\n├── profile/\n│ ├── experiences/ # Your background (.txt files)\n│ ├── resumes/ # Generated resumes (PDF)\n│ └── cover_letters/ # Generated cover letters\n└── browser_profile/ # Saved login sessions\n```\n\n## License\n\nProprietary. All rights reserved.\n"}}}} |