
AI Application Assistant
ShippedThe AI on this page is the case study
A self-directed tool built to industrialize my own job search: a base résumé stored as structured facts, a wizard that analyzes a job posting and tailors an application against it, and a public assistant - the one on this site's homepage - that answers a recruiter's questions live, grounded in the same facts, not improvisation.
Role
Solo designer & engineer
Status
Live in production, in active use
Stack
Next.js, Supabase, Anthropic API
Overview
Partway through a career pivot into HCI, I was rewriting the same résumé bullet points by hand for every application, and second-guessing whether the version I'd tailored for one posting still matched what I'd actually done. I built this tool to solve that specific problem for myself first: keep one factual base résumé, then generate every application's tailored version from it - not from memory, and not from an AI improvising.
It shipped as two connected pieces: a private admin tool where I manage the base résumé and run new applications through an analysis-and-tailoring wizard, and a public assistant - embedded right on this portfolio's homepage - that answers questions about my work using that same underlying data.
How an application gets tailored
One factual base résumé
Every role, project, and metric lives as structured data, not prose - a single source of truth the rest of the tool reads from instead of re-describing from scratch each time.
Analyze the posting
A new application starts by breaking down a job posting's actual requirements, separate from my résumé, so the two can be compared instead of blended together.
Match against the facts
The posting's requirements are matched against what's actually in the base résumé - surfacing real gaps instead of quietly papering over them.
Tailor the language
Only the framing and emphasis change per application. The underlying facts - what I did, for whom, with what result - stay fixed.
Grounding the AI in facts, not vibes
The riskiest part of a tool like this is an AI that sounds confident and is wrong - quietly inventing a metric or a responsibility I never had. So every generated answer, whether it's a tailored bullet point in the admin tool or a reply from the public assistant on this page, is grounded in the same structured résumé-facts table. The model's job is to phrase and prioritize; it doesn't get to author new facts.
A 'struggle insights' view tracks where the assistant's answers didn't actually fit the data well, so gaps in the underlying facts - not just gaps in the prompt - are the thing that gets fixed.

The public half of the tool, live on this page above the Work section - the assistant answers from the same résumé-facts data as the private admin tool.
What actually shipped
- A persistent admin shell (side navigation + contextual topbar) so every screen - dashboard, new application, base résumé, training, struggle insights - shares one structural frame instead of each page inventing its own header.
- A multi-step application wizard that walks a single job posting through analysis, matching, and tailoring, with each step's actions wired to that step's own state rather than a shared, easily-stale one.
- A public-facing assistant embedded on this homepage, answering real questions from real visitors against the same factual base - not a separate, looser demo version.
What this was actually about
This wasn't built to be shown - it was built to be used, for my own job search, before it ever became a portfolio piece. That's also why it's the one project here I can't overstate: you can scroll up and ask it something yourself.