Nahom Endale
BravoResume logo

AI / SaaS

BravoResume

AI-powered, pixel-perfect resume builder

Visit bravoresume.com

Puppeteer

Pixel-perfect PDF on DigitalOcean

Claude

Parses PDF & DOCX imports

Drag & drop

dnd-kit live editor

Stripe

Premium template checkout

The Challenge

Resume builders constantly fight a rendering problem: what users design on screen rarely matches the PDF that comes out. The goal was an editor that felt effortless (AI-assisted, drag-and-drop) that still produced a flawless, ATS-friendly PDF every single time.

The Solution

BravoResume pairs a drag-and-drop editor (dnd-kit, Zustand + Immer) with Claude-powered import: upload a PDF or DOCX and Claude parses it into structured resume JSON. The defining decision was rendering, instead of relying on the browser, resumes are sent to a dedicated Puppeteer service on a DigitalOcean droplet that renders a signed preview route to a pixel-perfect PDF. Premium templates are monetized with Stripe on top of Supabase auth.

Features

Live split-pane editor

A form on the left and a paginated, WYSIWYG resume preview on the right that updates as you type.

Drag-and-drop sections

Reorder sections and entries with dnd-kit, with the preview reflowing instantly.

AI resume import

Upload an existing PDF or DOCX; text is extracted locally, then Claude parses it into structured resume JSON.

Pixel-perfect PDF export

A Puppeteer service renders a signed preview route to an exact A4 PDF, identical every time.

Premium templates

Stripe Checkout unlocks premium templates, with purchases verified server-side before export.

Accounts & dashboard

Supabase auth with anonymous-to-account transfer and a dashboard of saved resumes and jobs.

System Architecture

App

Next.js Editor

Import

Claude Parse

Store

Supabase

Payments

Stripe

Render

Puppeteer (DO)

Technology Stack

Frontend & Editor

Next.js 16React 19Zustand + Immerdnd-kitResizable PanelsBase UI

AI & Parsing

Claude (Haiku 4.5)pdf-parsemammoth (DOCX)

PDF Rendering

PuppeteerDigitalOcean dropletExpress service

Platform & Payments

Supabase (Auth + RLS)StripePostHogNetlify

Key Learnings

  • Browser print-to-PDF couldn't guarantee fidelity, so I split rendering into a standalone Puppeteer service on a DigitalOcean droplet, the resume renders identically every time, pixel for pixel.
  • Forcing Claude to return structured JSON turned messy PDF and DOCX uploads into clean, editable resume data.
  • Importing existing resumes removed the blank-page problem and got users to a finished draft far faster.
  • Signing the preview URL and verifying the Stripe purchase server-side kept premium exports from being spoofed.
Professional headshot

Available for work

Let's build something.

Always interested in new opportunities, technical challenges, or collaborations. Reach out through any of the channels.También hablo Español!

Typically respond within 24 hours