DEV Community

Dobritoiu David-Constantin
Dobritoiu David-Constantin

Posted on

I built an AI that "roasts" your resume (so recruiters won't)

Most "AI Resume Builders" are wrappers that just say: "Good job! Maybe add more numbers."
They give you a generic score (e.g., 72/100) but don't tell you why.
As a developer, I hate "Black Box" logic. If I get a low score, I want to see the stack trace. I want to see the diff.
So I built Refine.tools—a free, local-first tool that forces the AI to "Show its Math."
Here is how I engineered the "Audit Log" feature to give job seekers an unfair advantage.

The Problem: "Vague Feedback"

When you send a resume to an ATS (Applicant Tracking System), it parses your PDF into text and looks for specific keywords (e.g., "React", "TypeScript", "System Design").
If you miss them, you get rejected.
Most tools just use a generic GPT-4 prompt: "Review this resume."
The result is usually fluff.

The Solution: Gap Analysis with Structured JSON

I didn't want advice. I wanted a Gap Analysis.
I updated my backend (Next.js App Router) to accept two inputs:

  1. The Resume (Parsed from PDF)
  2. The Job Description (The target) Then, I used OpenAI's response_format: { type: "json_object" } to force a strict schema.
// The Structure I force the AI to return
interface ResumeAudit {
  missingKeywords: string[]; // "Critical skills found in JD but MISSING in Resume"
  formattingIssues: string[]; // "Header missing", "Photo detected"
  categories: {
    name: "Impact Language";
    score: number;
    feedback: string;
  }[];
}
Enter fullscreen mode Exit fullscreen mode

By forcing this schema, the AI stops being a "Career Coach" and starts being a "Linter".
It returns arrays like:

"missingKeywords": ["AWS", "CI/CD", "Docker"]
Enter fullscreen mode Exit fullscreen mode

The "Audit Log" UI

On the frontend, I render this as a strict "Pass/Fail" audit.

  • Red Badges: Skills you claimed to have but are missing from the text.
  • Green Checks: Formatting rules you passed (no columns, standard fonts). It turns the subjective art of "Resume Writing" into an objective "Bug Squashing" session.

Privacy First (The "Anti-SaaS")

The best part? I didn't want to store anyone's data.

  • Local-First: The resume parsing happens in your browser (or ephemerally in memory).
  • No Database: I don't confirm your email because I don't have a database.
  • No Sign-up: You just drag, drop, and refine.

Try it out

I built this because I believe the job market is broken, and candidates deserve better tooling than the recruiters rejecting them.
👉 Try the Resume Auditor (Free)
The strategy is simple: Don't guess. Audit.

Top comments (0)