nahom endale
Case StudiesAboutResume
Nahom Endale

© 2026 Nahom Endale, New York

Case StudiesAboutResumeGitHubLinkedIn
Nahom Endale/Case studies/BravoResume
BravoResume logo

BravoResume

Resume template shop & online builder

Stripe · Embedded checkout, instant delivery

46 · Templates for Google Docs, Word & Pages

Claude · Parses PDF & DOCX imports

Puppeteer · Pixel-perfect PDF on DigitalOcean

01The Challenge

+
BravoResume started as a resume builder and grew into a template shop. That meant running a real storefront — catalog, product pages, checkout, instant delivery — while still delivering on the original promise: an editor that feels effortless and produces a flawless, ATS-friendly PDF every single time.

02The Solution

+
BravoResume is a Next.js storefront selling ATS-friendly resume and cover letter templates for Google Docs, Word, and Pages, with one-time purchases through Stripe's embedded checkout (cards, Apple Pay, Link, Klarna) and instant digital delivery. Behind the shop sits the online builder: a drag-and-drop editor (dnd-kit, Zustand + Immer) with Claude-powered PDF/DOCX import, rendering resumes through a dedicated Puppeteer service on a DigitalOcean droplet for pixel-perfect PDFs, on top of Supabase auth.

03Features

+

A storefront of ATS-friendly resume and cover letter templates for Google Docs, Word & Pages, filterable by format, layout, and profession.

One-time purchases in an embedded checkout drawer — cards, Apple Pay, Link, and Klarna — with instant digital delivery.

The online builder: a form on the left, a paginated WYSIWYG preview on the right, with drag-and-drop section reordering via dnd-kit.

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

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

Each template is a JSON spec. A Google Apps Script builds the Google Doc (US Letter and A4), then scripts render the product images and bundle the Word, Pages and PDF files.

A PostHog funnel from product view to purchase, with the purchase recorded server-side from the Stripe webhook, plus a Pinterest product catalog and pins that publish from RSS feeds.

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

04System Architecture

+

App

Next.js Shop + Editor

Import

Claude Parse

Store

Supabase

Payments

Stripe

Render

Puppeteer (DO)

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

App

Next.js Shop + Editor

Import

Claude Parse

Store

Supabase

Payments

Stripe

Render

Puppeteer (DO)

05Technology Stack

+

Next.js 16 · React 19 · Zustand + Immer · dnd-kit · Resizable Panels · Base UI

Claude (Haiku 4.5) · pdf-parse · mammoth (DOCX)

Puppeteer · DigitalOcean droplet · Express service

Supabase (Auth + RLS) · Stripe · PostHog · Netlify

Google Apps Script · Google Docs API · sharp · Pinterest catalog + RSS

06Key Learnings

+
  1. 01Embedding Stripe checkout in a drawer keeps buyers on the product page — no redirect — and one-time purchases with instant delivery are a natural fit for digital templates.
  2. 02Browser 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.
  3. 03Forcing Claude to return structured JSON turned messy PDF and DOCX uploads into clean, editable resume data.
  4. 04Importing existing resumes removed the blank-page problem and got users to a finished draft far faster.
  5. 05Signing the preview URL and verifying the Stripe purchase server-side kept premium exports from being spoofed.
  6. 06Defining every template as data meant a new design, its A4 version and all its product images come out of one build instead of hours of manual layout.
  7. 07Recording purchases from the Stripe webhook, not the browser, kept sales counted even when ad blockers stripped the analytics scripts.
Visit bravoresume.com ↗
Visit bravoresume.com ↗
The BravoResume shop
The BravoResume shop
Browsing the template collection
Browsing the template collection
A template product page
A template product page
What's in the download
What's in the download
Embedded Stripe checkout
Embedded Stripe checkout
Start fresh or import a PDF/DOCX with AI
Start fresh or import a PDF/DOCX with AI
Live split-pane editor
Live split-pane editor
Template picker in the online builder
Template picker in the online builder
Saved resumes and job tracker
Saved resumes and job tracker
The BravoResume shopBrowsing the template collectionA template product pageWhat's in the downloadEmbedded Stripe checkoutStart fresh or import a PDF/DOCX with AILive split-pane editorTemplate picker in the online builderSaved resumes and job tracker
The BravoResume shop
previous← Live TV StreamingnextNatural Language Search →