initial public release
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user