/projects/grounded-ai-resume-builder/
Grounded AI Resume Builder
LLMs make things up, which is a problem when the thing is your resume.
- Python
- LLMs (Gemini)
- retrieval
- grounded generation
- evaluation
- Gradio
- pytest
- GitHub Actions
Overview
An applied AI system that tailors resumes and drafts cover letters against a specific job description, built around the constraint that every claim it produces should be traceable back to real evidence rather than generated freely.
Problem
Generic LLM resume tools tend to produce fluent text that quietly invents skills, experience, or achievements the applicant does not have. For a document whose entire purpose is to be trusted, that is disqualifying. The problem is not "generate resume text," it is "generate resume text that is grounded and can be checked."
Approach
The system extracts structured requirements from a target job description, retrieves supporting evidence from the resume and optional GitHub data, and generates recommendations from that retrieved evidence rather than from the model's unconstrained output. It separates factual evidence (things that are true and verifiable) from writing-style examples (phrasing to imitate but not to source facts from), and evaluates requirement coverage explicitly so gaps are visible instead of silently glossed over.
Technical Implementation
Built in Python with a Gradio interface and Gemini as the underlying LLM. Generated output is checked for unsupported claims before being surfaced, and the system provides source tracing so a claim can be traced back to the evidence it came from. The project includes API logging, error handling, a pytest test suite, and a GitHub Actions CI workflow that runs the tests.
Evaluation & Results
There is no single accuracy percentage to report here — the meaningful result is the grounding machinery itself: requirement-coverage evaluation surfaces gaps between a job description and a resume, and the unsupported-claims check catches generated statements that don't trace back to real evidence, which is the actual failure mode this project was built to prevent.
What I Learned
Grounding is mostly an evaluation problem, not a prompting problem. The hard part was not getting the model to write reasonable resume text — it was building checks that could catch the cases where it did not, and separating "this is a fact about you" from "this is a style to imitate" so the two failure modes are caught differently.