/WORK/APPLYAGENTPORTFOLIO ↗

CASE STUDY · 04

ApplyAgentAIjobapplicationagent

Client · Personal project

Year

2025 — present

Role

Solo build

Stack

  • Python
  • FastAPI
  • Claude API
  • Playwright
  • React

(01) Context

Job applications haven't changed in a decade — same forms, same boxes, on a different ATS each time. I started ApplyAgent partly because I was tired of filling out forms and partly because I wanted a real testbed for LLM-driven browser automation. Claude as the reasoning layer, Playwright as the hands.

The problem

Every ATS (Greenhouse, Lever, custom) renders forms differently — React Selects, native dropdowns, radios, checkboxes, iframes. A scripted scraper falls over within a week. A model with browser tools can adapt.

(02) Approach

  • 01

    Claude + Playwright loop

    Claude reads the page DOM, decides what to click or type, and iterates until the form is complete. The system handles dynamic widgets, multi-step flows, and redirects.

  • 02

    AI job scorer over 2,000+ listings

    An async multi-source scraper hits Greenhouse and Lever ATS APIs, deduplicates, and a profile-aware scorer ranks each listing against the user's skills, experience, and salary expectations.

  • 03

    FastAPI backend, React 18 SPA

    JWT-authenticated REST API with background task processing. Supabase for storage with signed-URL generation. A custom React component library and a profile-completeness tracker on the frontend.

(03) Outcome

A working agent that turns a 30-minute application into a one-click action — and a sandbox for everything I want to learn about LLM-driven automation.

  • 2,000+

    listings ranked

  • 1-click

    apply experience

  • Multi-ATS

    Greenhouse, Lever, +