Case study
AutoApplier
An AI job-search platform that finds real openings, scores fit and writes truthful, tailored resumes.

The problem
Job boards are full of stale and reposted listings, and tailoring a resume for every application takes hours. Generic AI tools make it faster, but they invent experience the candidate does not have.
How it works
From input to result
Collect
Reads company career sites (Greenhouse, Lever, Ashby) and six job boards, then applies the user's location, seniority and age filters.
Verify
Cross-checks board postings against the employer's own careers page and labels each job verified, likely real, stale or suspicious.
Pre-filter
A free rule-based score picks the most promising jobs, at most 25 per search, for AI scoring.
Score
An LLM reads the job description and scores fit against the candidate's full profile.
Tailor
On approval, writes a one-page LaTeX resume and a cover letter, checked line by line against the candidate's own words.
Apply and track
Apply on the company site, follow up by email, and let inbox replies update the tracker.
Key decisions
Why it is built this way
Long work runs as small, resumable steps
Vercel stops any request after 300 seconds. Searches run as database-backed jobs in steps of at most four minutes, with leases so two workers never run the same job and a stopped step never loses progress. The browser, a cron call or a server loop can advance them.
Rate limits pause work instead of failing it
Each user brings their own keys for Groq, Gemini, OpenAI or Claude. Keys rotate, and a 429 puts a key into a cooldown taken from the provider's Retry-After header and stored in the database. When every key is limited, the job is rescheduled for the moment one frees up, and only falls back to rules after the user's chosen maximum wait.
A truthfulness check on every generated line
A rephrased line must share most of its content words with one of the candidate's own lines, and every number must appear in the source. Anything unsupported is removed before the PDF is built.
AI calls only where they help
A free pre-filter, a cap of 25 AI-scored jobs per search, no AI for postings without a description, and the cheapest capable model of each provider by default.
Built for unreliable job sources
LinkedIn blocks data-centre addresses, so it is skipped for 15 minutes after a 429. Every source has a time budget, and slow ones are cut off instead of stalling the whole search.
Results
- Live on Vercel with a Neon Postgres database, and I use it every day for my own job search.
- Supports 4 LLM providers, 3 applicant-tracking systems and 6 job boards.
- Resumes fill exactly one page from real content, and every line traces back to the candidate.
What I would build next
- A browser extension that reads LinkedIn job descriptions while browsing.
- Interview preparation generated from each job description.
Built with