AI Application Assistant hero image
Back to work

AI Application Assistant

Shipped

The 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

  1. 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.

  2. 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.

  3. 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.

  4. 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 'Ask my portfolio' AI assistant widget, embedded on the homepage of this site

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.