A job-search autopilot: a Chrome side-panel extension backed by a FastAPI + Supabase stack that discovers job postings across ~17 job boards, matches them against your resume with embeddings, drafts personalized outreach with an LLM, and sends applications through your own Gmail — with a human review queue in the loop.
extension/ Chrome side-panel UI (React + Vite + Tailwind)
backend/ FastAPI service (Python) — scrapers, LLM pipeline, Gmail send
supabase/ Postgres schema + migrations (jobs, leads, campaigns, settings)
n8n/ Standalone Upwork RSS monitor workflow (scheduled, email alerts)
- Scrapers for RemoteOK, Remotive, WeWorkRemotely, Wellfound, YC Work at a Startup, Hacker News (Who's Hiring), Himalayas, Jobicy, OnlineJobs.ph, Product Hunt, Upwork, and more — with a shared base class and rate limiter.
- LLM pipeline (OpenAI) — job/resume matching, scoring angles, personalized cover letters and email drafts, structured output via pydantic schemas.
- Email discovery + verification — finds and validates contact addresses before sending.
- Gmail OAuth sending — mail goes out from the user's own account; nothing is sent without passing the review queue unless autopilot is explicitly enabled.
- Autopilot & monitors — scheduled searches that surface new matches continuously.
- Side-panel app with tabs for exploring jobs, managing leads, campaigns, autopilot, and settings.
- Resume upload, per-job email draft editing, outreach timeline, and XLSX export.
Backend
cd backend
cp .env.example .env # fill in Supabase + OpenAI credentials
pip install -r requirements.txt
uvicorn app.main:app --reloadExtension
cd extension
npm install
npm run build # load extension/dist as an unpacked extension in ChromeDatabase — apply the migrations in supabase/migrations/ to a Supabase project.
SendIt is built for personal job applications — applying to publicly posted openings with individually reviewed, personalized messages. Respect each job board's terms of service and applicable email regulations (CAN-SPAM, GDPR) if you adapt it for anything beyond that.
Personal project by @kimlj. Some rough edges remain — issues and PRs welcome.