JobTracker is a native macOS app plus a local Python backend that tracks your job pipeline by syncing Gmail/iCloud emails, classifying messages, and linking them to applications.
This repo is intentionally documented without screenshots right now. The previous images were outdated and have been removed.
- Gmail and iCloud account connection
- Incremental or full sync from connected accounts
- Hybrid email classifier:
- rules
- embedding similarity
- SetFit (when enough training data exists)
- Classification categories:
appliedpending_applicationinterviewrejectionofferassessmentfollow_upneeds_reviewother
- Review queue and user corrections feeding training data
- Application linking and relinking from email signals
- "Mark as Not Job Posting" flow (reclassifies linked emails to
otherand removes the application) - Email filters in UI and backend:
Unreviewed OnlyUnlinked Job Emails Only
- Applications tab layout options:
Feature CardsCompact RowsStatus Board
- Theme presets with per-theme background images
- WebSocket sync status updates (
/ws/sync-status)
jobtracker/
├── backend/ # FastAPI backend, classifier, DB, tests
├── apps/
│ ├── macos/ # SwiftUI macOS app
│ └── mobile/ # Reserved for future mobile app
├── docs/ # Active project documentation
├── scripts/ # Setup, run, bundle, repair scripts
└── .github/workflows/ # Backend + macOS CI
git clone <your-repo-url>
cd jobtracker
# One-time backend install
./scripts/install.sh
# Start backend on 127.0.0.1:8000
./scripts/start_backend.shOpen the macOS app project:
open apps/macos/JobTracker/JobTracker/JobTracker.xcodeprojdocs/SETUP.md- local setup and day-to-day development flowdocs/ARCHITECTURE.md- system architecture and component boundariesdocs/API_SPEC.md- backend API and WebSocket contractdocs/ML_STRATEGY.md- classifier behavior and training lifecycle
backend-ci.yml: runs backend tests on backend-related changesmacos-ci.yml: builds the macOS app on macOS runners for app-related changes
Both pipelines are read-only quality gates and do not rewrite source files.
If backend logs show database disk image is malformed:
./scripts/repair_local_db.shIf port 8000 is already in use:
lsof -nP -iTCP:8000 -sTCP:LISTENUse ./scripts/start_backend.sh so it can detect healthy existing backend instances and avoid duplicate launches.
./scripts/bundle.sh --configuration DebugThis stages:
dist/backend/jobtracker-backenddist/app/JobTracker.app
MIT