Job Agent
End-to-end internship discovery platform aggregating 8+ ATS feeds, deterministic 0–100 multi-resume scoring, 12-class Gmail OAuth sync, and guarded Playwright runners.
- Timeline
- Feb 2026 — Present
- Stack
- Next.js · React · TypeScript · Tailwind CSS · Node.js · Express.js · REST APIs · PostgreSQL · Prisma · Playwright
- Links
- Source on GitHub
The problem
Hunting for software engineering internships across dozens of ATS boards and tracking hundreds of recruiter emails manually wastes hours — while naive LLM auto-appliers hallucinate skills and corrupt pipeline state.
- Different roles (Backend, Full-Stack, AI/ML, Systems) require matching against different resume variants with transparent, reproducible scores.
- Recruiter emails arrive out of order (e.g., an auto-ack arriving after an OA invite), which breaks naive status updaters.
- Browser automation against live ATS forms must default to safe dry-runs with human review.
How it works
- 01
8+ ATS collectors & deduplication
Aggregated job feeds from Greenhouse, Lever, Ashby, Workday, and curated boards into a unified Prisma/PostgreSQL schema. - 02
0–100 deterministic multi-resume scorer
Scored every role against multiple uploaded resumes using a deterministic weighted rubric (+35 skills, +20 role match, +15 domain, +10 stack, +10 location, +10 level, minus penalties) before optional LLM explanation. - 03
12-class Gmail OAuth state machine
Synced recruiter threads via Gmail OAuth and classified emails into 12 categories with strict forward-only stage progression (SAVED → APPLIED → SCREENING → OA → INTERVIEW → OFFER). - 04
Guarded Playwright runner with SSE logs
Built a dry-run-by-default Playwright automation engine that fills ATS forms, captures screenshots, and streams step-by-step SSE logs to a 7-tab Next.js 16 dashboard.
Architecture
From 8+ ATS feeds and Gmail OAuth threads to deterministic resume scoring and guarded Playwright runs.
- 01Ingest ATS boards & Gmail
Public ATS endpoints and Gmail OAuth threads sync into the Express 5 backend.
- 02Deterministic 0–100 multi-resume rubric
Each posting is scored against every resume variant to pick the highest-fit CV.
- 0312-class email state machine
Confirmation, OA, interview, and offer emails advance application stages monotonically.
- 04Unified PostgreSQL state
Jobs, resume scores, email threads, and run logs persist via Prisma.
- 057-tab Next.js 16 control center
Review ranked jobs, inspect score breakdowns, and trigger automation runs.
- 06Guarded Playwright execution
Browser runners prefill ATS forms in dry-run mode and stream live SSE telemetry.
System capabilities
- deterministic weighted multi-resume scoring rubric
- 100-pt
- Gmail recruiter email classification categories
- 12
- ATS job sources aggregated automatically
- 8+
- interactive workspace tabs in Next.js 16
- 7
Technical deep dive
Complete system specification, schemas, and implementation notes.
Stop losing track of internship applications across 15 browser tabs. Job Agent is a self-hosted job-discovery, deterministic resume-scoring, Gmail ATS classifier, and guarded Playwright auto-apply system built for software engineering roles.
The Problem
Applying for software engineering internships means checking dozens of company career boards (Greenhouse, Lever, Ashby, Workable), parsing noisy job-alert emails, tailoring multiple resume variants (Backend vs. Full-Stack), tracking recruiter replies in Gmail, and filling repetitive Wellfound forms. Manual tracking leads to missed OA deadlines and stale follow-ups.
The Outcome
A unified, local-first command center (Express 5 + PostgreSQL + Next.js 16) that ingests verified ATS job feeds, scores every role deterministically (0–100) against your multiple resumes, classifies incoming Gmail recruiter/ATS threads into 12 states, and generates a daily 20:00 IST briefing.
How It Works (The Mechanism)
- Multi-ATS Ingestion & Liveness Probing: Polls official public APIs across Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Remotive, Remote OK, and Arbeitnow, plus local Gmail job-alert parsers. Automatically closes stale listings on
404/410or consecutive missing syncs. - Deterministic Multi-Resume Scoring (
0–100): Evaluates every listing against all uploaded resume variants (e.g., Full-Stack vs. AI/Backend) using word-boundary skill matching, alias resolution (Java != JavaScript,intern != international), seniority penalties, graduation-year alignment, and recency decay. - 12-Class Gmail OAuth State Machine: Incrementally syncs read-only Gmail threads and classifies emails into 12 categories (OA/Assessment, Interview, Offer, Rejection, Recruiter Outreach, etc.) with ATS-sender awareness—advancing pipeline stages strictly forward-only.
- Guarded Playwright Runner: Automates Wellfound applications through your authenticated Chrome session with a strict
DRY_RUNdefault, daily IST rate caps, live SSE log streaming, and failure trace/screenshot capture.
Architecture & System Design
Key Engineering Decisions
- Deterministic Word-Boundary Scoring Over Opaque LLM Ranking: LLM-based job scoring is slow, expensive, and hallucinates matches. Job Agent uses a fast, deterministic 0–100 scoring engine with regex word boundaries, synonym maps, and explicit point breakdowns (
Resume Match: 45,Alumni Presence: 20,Contacts: 10,Freshness: 10,Stage: 10,Email Activity: 5). - Forward-Only Idempotent Pipeline Transitions: Automated email syncs and CSV imports can never accidentally move an application backward or overwrite a terminal state (
Offered,Rejected,Archived). Every state mutation is recorded in an immutable audit log. - Safety-First Browser Automation: The Playwright Wellfound runner defaults to
DRY_RUNmode and requires an explicitconfirmLive: truepayload plus typingAPPLYin the UI before submitting real applications, capturing full HTML/screenshot diagnostics on any DOM selector failure.
The Value Stack
- Backend: Node.js, Express 5, TypeScript, Prisma ORM, PostgreSQL, Google Gmail OAuth2 API, Google Gemini API.
- Frontend: Next.js 16, React 19, Tailwind CSS 4, Server-Sent Events (SSE).
- Automation & Tooling: Playwright, Docker Compose, Vitest.
The Proof
- Built a 7-tab full-stack operations dashboard integrating 8+ public ATS APIs and real-time Gmail OAuth synchronization.
- Engineered a 12-class ATS email classifier and multi-resume scoring engine with zero-hallucination deterministic explanations.