AI CV Generator

  • Portfolio feature — 2026
  • Recruiting — LLM product
  • Designer and developer

Key themes

  • Claude API
  • System design
  • Structured output
  • ATS optimization
  • Next.js
CV generator interface — AI CV Generator

Turns a job posting into a tailored, ATS-optimized CV, pulling real projects from a documented bank of 47 career cases.

The problem

A generic CV does not clear an ATS filter, and a properly tailored one costs time and judgment that almost nobody has available for every posting they apply to. I had spent months solving this by hand: paste the posting into an assistant, audit the fit, pick projects from my own history, and write the CV using the exact language each role asked for.

That process worked, but it only existed inside my head and a private conversation. I decided to turn it into a system: let anyone visiting my portfolio paste a posting and get, in seconds, the same quality of tailoring I would produce manually.

What I built

The core of the system is a bank of 47 documented projects from my career, each carrying normalized metadata: sector, ATS keywords, whether it was an embedded role on an internal team, whether it has verified metrics, and a CV-usage weight. When a posting comes in, a six-step filter walks through that metadata: it starts from a fixed base of projects with verified metrics, adds AI-relevant ones if the posting calls for it, filters by sector, prioritizes embedded roles, ranks by keyword match, and drops anything with low usage weight. The result is 8 to 12 projects, never all 47.

The most important decision was keeping the fit report completely separate from the final CV. The generation engine never sees scores, verdicts, or audit language; it only receives the already-filtered projects and the posting. Mixing those two layers would have produced a CV that reads like an internal report, not an application.

Metrics were the other hard line. The system can only use figures that literally exist in the project bank; it cannot round, estimate, or infer a percentage that sounds plausible. If a project has no verified metric, the CV describes it by the decision made, not by a made-up result.

The system was not built to write well. It was built to not lie while writing well.

Stack

Next.js serves both the interface and the endpoints that orchestrate each generation. Claude API drafts the CV from the pre-filtered projects and the posting, following a system prompt that fixes tone, structure, and the narrative reframing rules. Project filtering runs server-side over the project bank's structured metadata before anything reaches the model. Vercel KV caches repeated generations to avoid unnecessary cost, and pdfkit renders the resulting text into a downloadable PDF with fully selectable content. I designed and built the entire system in Cursor.

Project achievements

Where the system stands so far.

  • 47Documented projects
  • 6Filtering steps per posting
  • 8-12Projects selected per generated CV

Outcome

What used to be a process only I could run, pasting postings one by one into a conversation, is now a system any portfolio visitor can use directly. The judgment behind it is still mine; what changed is that it no longer needs me present to apply it.

© 2026 Chema Amate