Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/abhishekmandapmalvi_autoapply.json

1 line
127 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-1385%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-1385%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-738%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-738%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-563%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-563%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-205%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-205%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-205%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)\n[![Tests](https://img.shields.io/badge/tests-205%20passing-brightgreen.svg)](#testing)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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"}}}}