A SaaS app that helps job seekers adapt their resume, track applications, and manage the whole search from one place.
Me on design and frontend, plus a backend engineer (MD).
Product design, prompt design, and the React frontend. Backend (Node/Express, Claude API, Supabase, Stripe) built with MD.
A score she can trust reflects how the actual system at that company reads her resume.
Every checker gives a different confident number, with generic "add more keywords" advice.
Runs the same base resume against 5–10 postings a week, on whichever ATS the employer runs.
This is why the app scores per platform instead of averaging, tracks every application she sends, and caps usage against real weekly volume instead of a guess. Less time managing the search, more time prepping for the interview.
Taleo parses a resume differently than Workday. A checker that averages every platform into one score is either wrong for six of them, or isn't really checking any of them. On top of that, most people track applications in a spreadsheet that goes stale after week two. I built ATSFixer to adapt the resume per platform, log the application automatically, and get out of the way so the actual work, preparing for the interview, gets the attention.
Patch-only repairs, a cached resume-facts layer, and an async job keep a 60–180s Claude pipeline from feeling stuck.
The model can't invent a certification or metric not in the source resume. Enforced in the prompt, checked again after.
A keyword caps at three uses per resume. Past that, modern ATS scoring reads it as stuffing, not relevance.
A wait with nothing on screen reads as broken even when it's working, so every gate and failure point had to be designed, not just the happy path.
Low-fidelity passes on the four screens that matter most, before any visual design.
Every surface, text color, and shadow in the running app maps to a --c-* token in design.js, so nothing gets picked from memory. Full dark mode ships free: every token carries a light and dark value, toggled by body.dark, no component restyle needed.
Poppins for all UI, Anonymous Pro for monospace values (tokens, IDs, hashes).
Material Symbols Rounded, one <Icon name /> component everywhere.
Real screens from the running app, in the order someone moves through it.
Rebuilt as a background job that returns a job ID instantly; client polls status every 2.5s.
Deduction was gated on a silent insert. Server now deducts unconditionally the moment a generation logs.
A trigger cast its payload to text instead of jsonb, rolling back silently. Rewrote it to build real jsonb.
Live since April 2026, 77 commits by August, real job seekers adapting resumes and tracking applications at app.atsfixer.com.
Design a cache so a miss costs a little and a hit-gone-wrong costs a lot, never the reverse.
The fix that looks right in code isn't the fix until prod logs agree with it.
Running two design systems on purpose beat freezing the product to redesign it properly.
A single believable number is an easier sell than seven honest ones. I'd ship the honest ones again.