# Apex — TUI-First AI Job Search Platform [![License: PolyForm Noncommercial](https://img.shields.io/badge/license-PolyForm%20Noncommercial%201.0.0-blue.svg)](LICENSE) [![Commercial license available](https://img.shields.io/badge/commercial%20license-available-green.svg)](LICENSE-COMMERCIAL.md) A Go-based terminal UI application for intelligent job search, evaluation, and application tracking using Claude AI. ## License This project is **free for non-commercial use** under the [PolyForm Noncommercial License 1.0.0](LICENSE). Commercial use (inside a business, or to provide a paid product/service) requires a separate commercial license — see [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md). Full details in [LEGAL.md](LEGAL.md). Third-party font licenses are in [ATTRIBUTION.md](ATTRIBUTION.md). ## Overview Apex is a native terminal UI for job search, built with Bubble Tea and Lipgloss. It integrates Claude AI for job offer evaluation (A-G scoring), supports DOCX intake with voice extraction, and provides three-tier job portal scraping (JSON APIs, static HTML, authenticated browser). ## Features - **TUI Interface**: Tab-based Bubble Tea UI (Intake, Scan, Pipeline, Reports, Settings) - **Intake System**: 8-phase interview flow, DOCX CV upload, voice sample extraction - **Portal Scanning**: Tier 1 (JSON APIs: Greenhouse, Ashby, Lever), Tier 2 (static: Indeed, Built In, RemoteOK), Tier 3 (browser: LinkedIn, Glassdoor, Workday) - **Evaluation Pipeline**: Claude A-G scoring with real-time streaming - **CV Generation**: PDF and DOCX output, tailored per job description - **Tracker**: Application status machine (Evaluated → Applied → Offer → Rejected) - **Follow-ups**: Cadence tracking and pattern analysis ## Architecture ``` internal/ ├── tui/ Bubble Tea interface + tab models ├── intake/ 8-phase interview state machine ├── docx/ Parser + voice extraction + DOCX generation ├── scan/ Tier-1/2/3 scrapers + adapters ├── eval/ Claude CLI subprocess wrapper ├── cv/ PDF + DOCX generation ├── tracker/ Applications CRUD + status machine └── store/ SQLite schema + queries migrations/ SQL schema definitions modes/ Claude prompt files ``` ## Building ### Prerequisites - Go 1.22+ - SQLite (included via modernc.org/sqlite, pure Go, no CGO required) - Claude CLI (`claude` command in PATH) ### Quick Start ```bash git clone cd apex-public make build ./apex ``` ### Testing ```bash make test # Run all tests make lint # Run go vet + fmt make clean # Remove binaries ``` ## Configuration Place a `config.yml` in the project root: ```yaml profile: name: Your Name email: you@example.com location: US timezone: America/New_York salary_target: min: 150000 max: 250000 claude: model: claude-opus-4-1-20250805 temperature: 0.7 ``` API keys and other secrets are read from environment variables at runtime — never committed to config files. ## Database SQLite database auto-initializes at `~/.apex/apex.db` on first run. Schema includes: - **profile**: User info and targets - **jobs**: Job postings (URL, company, title, raw HTML) - **applications**: Tracker (status, score, PDF link) - **reports**: A-G evaluation reports (markdown + HTML) - **scan_history**: Dedup for portal scans - **voice_samples**: DOCX intake + transcription - **follow_ups**: Cadence tracking All queries use parameterized statements (no SQL injection risk). ## Security - No secrets in source code; all API keys read from environment at runtime - Claude subprocess uses argument arrays only (never `bash -c`) - SQLite queries parameterized - No `.env` files committed ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md).