Files
2026-07-06 11:05:50 -04:00

113 lines
3.7 KiB
Markdown

# 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 <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).