113 lines
3.7 KiB
Markdown
113 lines
3.7 KiB
Markdown
# Apex — TUI-First AI Job Search Platform
|
|
|
|
[](LICENSE)
|
|
[](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 <this-repo>
|
|
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).
|