DEV Community

Victor Hugo Batistela
Victor Hugo Batistela

Posted on

No Signup, No Paywall, No BS: Building a Resume Tool That Should've Always Existed

Overview

Resumader is a free, no-signup resume builder that does one thing really well: lets you create and download a professional resume in minutes. No paywalls, no account creation, no lengthy wizards—just a clean interface with real-time preview and instant downloads.

Try it: resumader.com


The Problem

While helping my brother with his first job search, we hit a frustrating wall. After spending an hour creating his resume on a popular builder, we clicked "Download"... only to be hit with a paywall. An hour of work held hostage behind a payment screen.

Frustrated, I tried other resume builders, but quickly learned they all had:

  • Signup walls - Want to download? Create an account first
  • Hidden paywalls - Build your entire resume, then pay to unlock it
  • Terrible templates - Just look below ⬇️

Bad resume templates

This felt wrong. Creating a resume shouldn't be predatory.


The Solution

I decided to build the resume tool I wished existed:

  • ✅ No signup required - Just open and start building
  • ✅ Completely free - No premium tiers, no hidden costs
  • ✅ Instant downloads - PDF ready the moment you are
  • ✅ Real-time preview - See your changes as you type
  • ✅ Clean, modern template - Professional without being boring
  • Auto-save - Your data is stored locally in your browser (no account needed)

How It Works: Real-Time PDF Generation

The most interesting technical challenge was delivering a truly real-time editing experience.

Client-Side PDF Generation

Using @react-pdf/renderer, the entire PDF is generated in your browser. As you type, your changes are converted into a PDF blob directly on your machine. Zero server calls. This means:

  • Sub-second updates - No network latency
  • Zero server costs - PDF generation doesn't touch the backend
  • Instant downloads - The PDF blob is already in memory

Smart Debouncing

To avoid burning CPU cycles on every keystroke, PDF regeneration is debounced to 200ms. The PDF only regenerates after you pause typing, keeping the experience smooth while still feeling instantaneous.

Double-Buffering: The Secret Sauce

Here's the problem: when react-pdf renders a new PDF, it disappears from the screen during generation. This causes flickering and blank screens—exactly what we're trying to avoid.

The solution? A three-layer rendering strategy where something is always visible:

┌─────────────────────────────────┐
│  Layer 3 (Buffer)               │  ← New PDF renders here (hidden)
│  Hidden during generation       │
├─────────────────────────────────┤
│  Layer 2 (Stable)               │  ← Old PDF stays visible here
│  Always visible to user         │
├─────────────────────────────────┤
│  Layer 1 (Skeleton)             │  ← Prevents layout shift
│  Placeholder matching PDF size  │
└─────────────────────────────────┘
Enter fullscreen mode Exit fullscreen mode

How it works:

On initial load:

  • Layer 1 (skeleton) displays immediately—think of it as a loading placeholder that matches the PDF's exact dimensions
  • While Layer 3 renders the first PDF invisibly, users see a styled skeleton instead of a blank screen
  • Once ready, Layer 3 becomes visible, and Layer 2 updates in the background

When you make changes:

  1. Layer 2 continues showing the old PDF (no interruption)
  2. Layer 3 hides itself and starts rendering the new PDF in the background
  3. Once Layer 3 finishes rendering, it becomes visible again
  4. Layer 2 updates behind the scenes, ready for the next change
  5. Layers 2 and 3 swap roles—now Layer 2 shows the new PDF while Layer 3 waits for the next update

The result: You never see a blank screen, loading spinner, or flicker. The PDF appears to update instantly because there's always a fully-rendered version on screen while the next one prepares behind the scenes.

This double-buffering technique is similar to how video games render frames—you always see the previous frame while the next one is being prepared.

Why Not Use an iFrame?

  • Reload flicker - Every iframe src change causes a visible reload flash
  • No render control - Can't track when pages finish rendering or implement double-buffering
  • Jarring UX - iframe reloads are clunky, even if technically fast

With react-pdf, I get fine-grained control: callbacks for each page render, the ability to hide incomplete renders, and seamless transitions.


Tech Stack

Core Framework

  • Next.js 16 (App Router)
  • React 19
  • TypeScript

UI & Components

  • Mantine UI - Component Library
  • CSS Modules

PDF Magic

  • @react-pdf/renderer - Client-side PDF generation
  • pdfjs-dist - PDF parsing and rendering
  • react-pdf - React wrapper for PDF viewing

Analytics & Monitoring

  • Google Analytics 4 (react-ga4) - Event tracking and user behavior
  • Vercel Analytics - Performance monitoring

Storage

  • Local Storage - Browser-based persistence (no backend needed)

User Feedback

  • Tally.so - Embedded feedback forms

Development

  • Cursor IDE
  • ESLint

Analytics & Product Validation

Following the Lean Startup philosophy, I knew I needed data to validate whether this product actually solves a real problem. I implemented comprehensive analytics from day one, which will guide the roadmap. Instead of guessing what features to build next, I'll let user behavior tell me. If I see:

  • High drop-off at a specific section → Simplify that form
  • Lots of users but few downloads → Template or UX issue
  • Low engagement overall → Product-market fit problem

The goal is to iterate based on evidence, not assumptions. If Resumader isn't solving a real problem, the data will tell me quickly—saving months of wasted effort.


What's Next?

This is just the MVP. Based on user feedback and analytics, I'm considering:

  • 📄 Multiple professional templates
  • 🤖 AI-powered content suggestions
  • 📤 Export to other formats (Word, plain text)

But I'll only build what users actually want. That's why your feedback matters.


Try It & Let Me Know What You Think

Live Site: resumader.com

I'd love to hear your thoughts:

  • Does this solve a problem you've had?
  • What features would make it more useful?
  • Any bugs or UX issues?

Drop a comment below or reach out on LinkedIn. And if you know someone job searching, share this with them—it might save them from a paywall trap! 🎯

Top comments (0)