liveMarch 2026

AI Resume Builder

The first version was a solo build. I vibe-coded an MVP end to end to prove the idea would actually pull traffic. Once it did, it was handed to a development partner and rebuilt as a proper product, with real infrastructure in place of the shortcuts that got the proof of concept out the door.

It still does the same job: turn a job post, a LinkedIn profile, or an existing resume into a tailored, ATS-ready CV, free and without an account.

01

At a glance

Hypothesis
Content pages were losing traffic to AI-generated answers that skip the click-through entirely. The bet was a lead magnet: a tool people actually have to visit and use, not an article an AI answer can summarize away.
Role
AI Martech Manager. Wrote the product brief, built the MVP myself, then owned the architecture and prompt design for the rebuild with an external development partner.
Timeframe
MVP built solo, October to December 2025. Rebuilt and relaunched March 2026.
Users
Job seekers at every stage: a first resume, a career change, or a first English-language CV after moving countries.
Built on
Next.js, the OpenAI API for tailoring and enhancement, and Apify for LinkedIn import.
Surface
Embedded in an iframe, no account or login required.
02

The problem

A resume builder had to earn its own traffic before it could prove anything else.

  1. The business case was SEO, not just a tool

    Semrush says monthly searches for “resume builder” and related keywords run roughly 368,000. The product had to be good enough to rank and convert.

  2. Not everyone starts from the same place

    A recent graduate has no experience to tailor. A career changer needs existing experience reframed, not rewritten. Someone who just moved countries needs help with conventions they don't know exist yet.

03

From MVP to platform

The first version was built to answer one question: would anyone use this?

I built it myself in about two months, a working product, not a prototype: OpenAI-based tailoring, a guided step-by-step form with autosave, LinkedIn import, and client-side PDF and DOCX export. It shipped, it got traffic, and it proved the case in the brief. It also shipped with the shortcuts a solo build takes to move fast.

  1. Rate limiting

    The MVP counted requests in memory, per server process, with a comment in the code that says as much: “for production, consider Redis.” The rebuild moved limits to Upstash Redis, enforced per action, so they hold up across serverless instances instead of resetting on every cold start.

  2. Export

    The MVP generated the PDF with jsPDF and the DOCX with the docx package, both running in the visitor's own browser. The rebuild renders server-side with a headless Chromium instance, so the download doesn't depend on whatever fonts a visitor's browser happens to have, and matches the live preview exactly.

  3. Prompts

    The MVP's entire resume prompt was one hardcoded file. The rebuild split it into five versioned strategies stored in Postgres, editable through an authenticated admin API, without a redeploy.

04

Architecture

Scroll to see the full diagram

PATH 1 · JOB POST Tailor to a job description OpenAI rewrites against the posting PATH 2 · LINKEDIN Import a LinkedIn URL Apify scrape + OpenAI structuring PATH 3 · UPLOAD Upload PDF / DOC / DOCX Format parser + OpenAI structuring lib/schemas/resume.ts One bidirectional schema, front end to back end 4 roles kept · 20 skills · 1000-char fields · uploads capped at 3 MB ENHANCEMENT ENGINE · 5 STRATEGIES, IN SEQUENCE Personal info Experience Skills Grammar Tone Each strategy's prompt is a versioned row in Postgres, editable through an admin API Progress is persisted per strategy, so the UI can show which one is running PUPPETEER + HEADLESS CHROMIUM Renders the live preview 1:1 into the PDF download
05

Design decisions

  1. Never invent a number

    The tailoring and enhancement prompts are explicit: rewrite and reorder, never invent or change a user-provided number. A resume is the one document where a plausible-sounding fabrication is worse than an awkward truth.

  2. One schema, three doors

    A job post, a LinkedIn URL, and an uploaded file are three very different inputs, but all three resolve to the same canonical resume schema before anything downstream touches them.

  3. Nothing is kept

    There's no database for resume content. A session-scoped payload expires after 24 hours, so nothing about what a job seeker wrote sticks around after they're done.

06

Where it stands

5enhancement strategies run per resume: personal info, experience, skills, grammar, tone
3ways in: a job post, a LinkedIn profile, or an uploaded resume
1000+monthly organic sessions
85%completion rate, form start to download
4.5/5satisfaction rate
07

What I did

I wrote the brief, built the first version myself, then owned the product for the rebuild.

  1. Wrote the product brief

    Defined the business case, the user personas, and the feature set, including where AI should structure input versus where it should stay hands off a user's own numbers.

  2. Built and shipped the MVP solo

    Coded the whole first version myself: the guided form, the OpenAI integration, LinkedIn import, and the export flow. It was the fastest way to find out whether the traffic case actually held.

  3. Specified the rebuild

    Once the MVP proved the concept, I defined what “production-grade” meant for this product specifically: real rate limiting, real PDF rendering, prompts as editable data, then worked with an external development partner to build it.