Skip to content
All projects
Case studyCS/07
StatusPrivate repo
TypeAI
Year2026

JobApp

A semi-automated job-application pipeline with an AI résumé tailor

Scrapes LinkedIn, Indeed, Naukri, Greenhouse and Workday, scores each job against my profile, rewrites a LaTeX résumé and cover letter per job with an LLM, and fills application forms. It's all driven from a Chrome-extension dashboard.

Private repo · walkthrough on request
  • 5 job portals
  • spaCy skill scoring
  • LLM résumé per job
  • 7-tab extension UI

§1

The problem

Applying to jobs is repetitive: find postings, judge fit, tailor a résumé, write a cover letter, and fill the same form fields again and again on every portal.

§2

My role

Sole developer: scrapers, matching engine, LLM résumé and cover-letter generation, form-filling engine, REST API and the extension dashboard.

§3

Architecture

Fig. 1 · JobApp architecture
JOB PORTALS5 sourcesSCRAPERSSeleniumSQL DBjobs · answersMATCHERspaCy 70/30EXTENSION7-tab dashboardFLASK APIJWTLLMrésumé + letterFORM FILLERconfig → cache → AI
externalservicedataclient

§4

Key decisions

  1. D/01

    Human in the loop

    Scraped jobs land in a dashboard and I pick what to apply to. Automation fills forms; it doesn't spray applications.

  2. D/02

    Weighted skill matching

    spaCy NER scoring weighted 70% technical and 30% soft skills, with exact, synonym and related-match breakdowns per job.

  3. D/03

    Answers from cheapest source first

    Form answers resolve from config, then a DB cache of past answers, then the LLM, so repeat questions cost nothing.

  4. D/04

    LaTeX as the résumé source

    A master LaTeX résumé is rewritten per job description and compiled to PDF; the system degrades gracefully if LaTeX is missing.

§5

Challenges

  • Registration walls: detects them, auto-creates portal accounts and captures OTPs from email.
  • Multi-user JWT auth with bcrypt and access/refresh token pairs, plus interview reminders over email and Telegram 60 minutes before.

§6

Stack

  • Python
  • Flask
  • SQLAlchemy
  • Selenium
  • spaCy
  • OpenRouter LLM
  • LaTeX
  • Chrome extension

Next case study

IMS

Incident management that collapses alert storms into one incident