Case study · 2026
DocWing CV Builder
Solo build · first product of a small PDF/document-tools company
Free ATS-friendly CV builder — live preview, drag-and-drop sections, an instant ATS score, and optional accounts to save your CVs.

Overview
Most free CV builders either lock the good templates behind a paywall or quietly ship your resume data to a server. DocWing started as the opposite: a fully client-side editor with a live preview, drag-and-drop section reordering, and a real-time ATS score that tells you exactly what to fix, no sign-up required.
The architecture was built to outlive its first form. The CV document is a single Zod schema with a `schemaVersion` and a `migrate()` path for forward compatibility, and storage sits behind a `CvRepository` interface — which is exactly what let me add Supabase-backed authentication and a "My CVs" dashboard later without touching the core editor UI. PDF export sits behind its own abstraction (`exportPdf()`), currently rendered server-side via Puppeteer, with an in-app preview/download modal replacing the native browser print dialog.
Highlights
- Live-preview CV editor with drag-and-drop section reordering (@dnd-kit) and 9 CV/cover-letter templates
- From-scratch ATS scoring engine: real-time, synchronous JD keyword matching as you type
- "Fit to 1 page": auto-shrinks a CV to a single A4 page instead of forcing manual trimming
- Supabase-backed authentication and a "My CVs" dashboard for saving and revisiting CVs across sessions
- Server-side PDF export via Puppeteer, with an in-app preview/download modal replacing the native browser print dialog
- Schema-versioned CV document (Zod) with a migrate() path, and storage/export/template layers behind clean interfaces (CvRepository, exportPdf()) so a second product in the same document-tools line can reuse the foundation
Stack
- Next.js
- TypeScript
- Zustand
- Zod
- Supabase