Status: Archived. This project was built to automate a personal job search; archived after the author accepted an offer. Code is preserved as a reference implementation.
An end-to-end personal job-search pipeline: scrape, dedupe, score, and surface fresh listings through a password-gated dashboard.
Runs twice a day on a local Mac via launchd, pulling fresh job postings from three sources:
- Gmail IMAP — parses LinkedIn / Indeed job-alert emails
- JSearch API (RapidAPI) — active search across aggregated boards
- Hacker News "Who's Hiring" — scraped via a companion script
Each job is scored 0–100 against configurable preferences (title, location, salary, company), stored in SQLite, deduplicated across sources, and delivered via:
- A morning + evening digest email
- Immediate alerts for high-score ("platinum") jobs
- A web dashboard updated on every run
┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ Gmail IMAP │───▶│ │ │ │
├─────────────────┤ │ gold_rush │───▶│ SQLite (local) │
│ JSearch API │───▶│ .py │ │ │
├─────────────────┤ │ (scoring + │ └────────┬─────────┘
│ HN Who's Hiring │───▶│ dedup) │ │
└─────────────────┘ │ │ ▼
└──────┬───────┘ ┌──────────────────┐
│ │ jobs.json │
▼ │ meta.json │
┌──────────────┐ │ (exported) │
│ Email │ └────────┬─────────┘
│ digest │ │
└──────────────┘ ▼
┌──────────────────────┐
│ Vite + React │
│ dashboard (Vercel) │
└──────────────────────┘
.
├── gold_rush.py Main pipeline: sources → score → store → export → email
├── tpm_job_hunter.py HN "Who's Hiring" scraper (runs earlier in the day)
├── run_daily_job_hunter.sh Wrapper invoked by launchd
├── com.yourname.*.plist launchd job definitions (twice-daily schedule)
├── config.env.template Copy to config.env; fill in credentials + preferences
├── dashboard/ Vite + React + TypeScript dashboard
└── docs (GOLD-RUSH-*.html/md) Setup guides, patch notes, PRD
cp config.env.template config.envand fill in:- Gmail address + App Password
- RapidAPI key for JSearch
- Target titles, locations, salary floor, preferred companies
pip install -r requirements.txt(or install deps listed at top ofgold_rush.py)- First run:
python gold_rush.py - Schedule via launchd: update the
.plistfiles with your paths andlaunchctl loadthem - Dashboard:
cd dashboard && npm install && npm run dev
Full walkthrough in GOLD-RUSH-SETUP-GUIDE.html.
The companion dashboard is a static Vite + React app that reads jobs.json / meta.json from public/. It's password-gated via a Vite-baked env var (VITE_DASHBOARD_PASSWORD) — note this is client-side obfuscation, not real auth; fine for single-user personal use, not for anything sensitive.
The pipeline writes fresh JSON to the dashboard repo on each run and git pushes; Vercel handles the deploy.
MIT