-
Notifications
You must be signed in to change notification settings - Fork 13
Home
AbhishekMandapmalvi edited this page Mar 11, 2026
·
2 revisions
AutoApply is an AI-powered job application automation tool that searches for jobs, generates tailored resumes and cover letters, and applies automatically across multiple ATS platforms.
Current Version: v1.9.0 | Production Readiness: 10.0/10 | Test Coverage: 97% (bot/core/config/db)
| Section | Description |
|---|---|
| Getting Started | Installation, setup wizard, first run |
| Architecture Overview | System design, components, data flow |
| API Reference | All REST endpoints with request/response examples |
| Configuration Guide | Settings, LLM providers, search criteria, scheduling |
| Bot Operations | How the bot works, apply modes, ATS support |
| Development Guide | Local setup, testing, CI/CD, contributing |
| Internationalization | i18n system, adding new languages |
| Distribution & Packaging | Building installers, release workflow |
| Security | Auth, headers, rate limiting, threat model |
| Changelog | Version history from v1.0.0 to v1.9.0 |
| Roadmap | Upcoming features and enhancements |
AutoApply/
├── app.py # Flask app factory + middleware
├── app_state.py # Shared mutable state (thread-safe)
├── run.py # Entry point (logging, port detection, gevent)
├── config/settings.py # Pydantic config models
├── core/
│ ├── ai_engine.py # Multi-provider LLM API
│ ├── filter.py # Job scoring + ATS detection
│ ├── resume_renderer.py # PDF generation (ReportLab)
│ ├── scheduler.py # Time-based bot scheduling
│ └── i18n.py # Backend translation system
├── db/
│ ├── database.py # SQLite operations (WAL mode)
│ └── models.py # Pydantic data models
├── bot/
│ ├── bot.py # Main loop: search → filter → generate → apply
│ ├── browser.py # BrowserManager (Playwright persistent context)
│ ├── state.py # Bot state machine
│ ├── search/ # LinkedIn, Indeed searchers
│ └── apply/ # 6 appliers: LinkedIn, Indeed, Greenhouse, Lever, Workday, Ashby
├── routes/ # 7 Flask Blueprints (bot, applications, config, profile, analytics, login, lifecycle)
├── static/
│ ├── css/main.css # All styles
│ ├── js/ # 17 ES modules (no build step)
│ └── locales/en.json # 383 translation keys
├── templates/index.html # SPA shell with data-i18n attributes
├── electron/ # Desktop shell (main.js, python-backend.js, tray, build scripts)
├── tests/ # 738 tests across 27 files
└── .github/workflows/ # CI (lint+test+security) + Release (3-platform builds)
| ADR | Decision | Rationale |
|---|---|---|
| ADR-005 | Electron wrapping Flask | Desktop app with Python backend |
| ADR-006 | Separate Chromium for Playwright | Persistent browser contexts incompatible with Electron's Chromium |
| ADR-008 | Port auto-detection (5000-5010) | Avoid conflicts on common ports |
| ADR-009 | Multi-provider LLM via direct HTTP | No SDK dependency, supports 4 providers |
| ADR-010 | ReportLab for PDF | ATS-safe resume rendering |
| ADR-011 | Fallback templates | Works without AI configured |
| ADR-014 | Flask Blueprint architecture | 7 blueprints, shared state module |
| ADR-017 | Vanilla ES modules | No bundler, native browser support |
| ADR-018 | Python bundling strategy | Windows embeddable + python-build-standalone |
| ADR-019 | Programmatic icon generation | canvas + png2icons, no manual assets |
| ADR-020 | CI release on v* tags | GitHub Actions → GitHub Releases |
| Category | Total | Covered | Partial | Missing |
|---|---|---|---|---|
| Functional (FR-001–082) | 79 | 66 | 13 | 0 |
| Quick Wins (QW-1–5) | 5 | 5 | 0 | 0 |
| Medium Effort (ME-1–9) | 9 | 9 | 0 | 0 |
| Deferred (D-5–7) | 3 | 3 | 0 | 0 |
| Large Effort (LE-1–3) | 3 | 3 | 0 | 0 |
| Distribution (DIST-01–09) | 9 | 9 | 0 | 0 |
| Total | 108 | 95 | 13 | 0 |
The 13 partial items are Electron E2E and frontend DOM rendering — cannot be tested with pytest.
AutoApply Wiki
User Guide
Technical
Build & Deploy
Project