✦ Project Documentation

ResumeAI
Free AI-Powered Resume Builder

Build a professional resume in minutes — live preview, 10 templates, AI enhancement, instant PDF export.

React 19 Vite 8 Tailwind CSS v4 Groq AI 100% Free Open Source
10
Templates
AI
Enhanced
PDF
Export
0
Sign-ups

📄 Overview

ResumeAI is a fully client-side React application that lets anyone build a polished, ATS-friendly resume without an account, without a backend, and entirely for free.

The user fills in a multi-section form, watches the A4 preview update live on every keystroke, optionally lets Groq AI rewrite each section with stronger language, and downloads a print-ready PDF in one click.

All data stays in the browser — nothing is sent to any server except optional AI calls to the Groq API.

Features

👁

Live Preview

Every keystroke reflects instantly in the A4 preview panel — no refresh needed.

AI Enhancement

Groq AI rewrites content with stronger verbs, quantified metrics, and ATS keywords.

🆚

Side-by-side Compare

Compare original vs AI-enhanced versions section by section before accepting.

📥

PDF Export

react-to-print for selectable text + html2canvas + jsPDF fallback download.

🌙

Dark Mode

Full dark/light mode toggle with localStorage persistence.

💾

Auto-save

Debounced auto-save to localStorage every 5 seconds — never lose your work.

🎨

Accent Colours

8 presets + full custom colour picker applied per template in real time.

📱

Responsive

Hamburger nav and tab-based section switcher down to 375 px mobile.

🗂 10 Resume Templates

🟦
Modern
2-column accent sidebar
📜
Classic
Serif, single column
Minimal
Ultra-clean whitespace
🟣
Creative
Bold, skill bars, gradient
Professional
ATS-optimised
👔
Executive
Authoritative, leadership
💻
Tech
Monospace, engineering
📋
Compact
Dense, experienced
🌸
Elegant
Serif + light accents
🔴
Bold
High-contrast headings

🛠 Tech Stack

Frontend

⚛ React 19 ⚡ Vite 8 🎨 Tailwind CSS v4 🗺 react-router-dom v7 ✦ lucide-react

AI Enhancement

🤖 Groq API 🧠 llama-3.3-70b-versatile ⏱ Rate limiting (4 s)

PDF Export

🖨 react-to-print 🖼 html2canvas 📄 jsPDF

State Management

📦 ResumeContext 🌙 ThemeContext 🔔 ToastContext

Performance

🦥 React.lazy (10 templates) ⏳ Suspense boundaries ⏱ 5 s debounced auto-save

🔁 Architecture & Data Flow

User Input (Forms) │ ▼ ResumeContext ──(auto-save every 5 s)──▶ localStorage │ ├──▶ ResumePreview ──▶ A4Container ──▶ Template Component │ │ │ ├──▶ react-to-print ──▶ Browser Print Dialog │ └──▶ html2canvas + jsPDF ──▶ .pdf download │ └──▶ SectionAIPanel ──▶ Groq API (llama-3.3-70b) │ └──▶ aiResumeData (context) │ └──▶ AICompareView (side-by-side modal)

AI Enhancement Flow

  1. User clicks "Enhance with AI" in any form section
  2. SectionAIPanel calls enhanceSection() in aiEnhance.js
  3. A rate limiter enforces a 4-second minimum gap between API calls
  4. Groq returns improved content (stronger verbs, metrics, ATS keywords)
  5. Results are diffed inline (strikethrough original → green AI version)
  6. The aiResumeData snapshot in context is updated
  7. Compare Versions button appears in the preview toolbar
  8. Accept section-by-section or view the full side-by-side comparison

PDF Export Flow

  1. A hidden 794×1123 px <div> renders the template at native A4 resolution with no CSS transforms
  2. Printreact-to-print injects @page { size: A4; margin: 0 } and opens the system dialog — fully text-selectable
  3. Download PDFhtml2canvas rasterises at DPR, embeds into jsPDF, triggers .save()

📁 Project Structure

resume-builder/
├── public/
│   └── docs.html                   # This documentation page (printable)
├── src/
│   ├── components/
│   │   ├── AI/
│   │   │   ├── AICompareView.jsx   # Side-by-side compare modal
│   │   │   ├── AISuggestions.jsx   # Per-section tip panel
│   │   │   └── SectionAIPanel.jsx  # Enhance + diff + accept UI
│   │   ├── Forms/                  # 6 section forms
│   │   ├── Layout/
│   │   │   ├── Navbar.jsx          # Responsive nav + hamburger
│   │   │   └── Sidebar.jsx         # Section nav + Reset/Sample
│   │   ├── Preview/
│   │   │   ├── A4Container.jsx     # Scaled 794×1123 px wrapper
│   │   │   └── ResumePreview.jsx   # Toolbar + live preview
│   │   └── Templates/              # 10 templates (lazy-loaded)
│   ├── context/
│   │   ├── ResumeContext.jsx       # All resume state + mutations
│   │   ├── ThemeContext.jsx        # Dark / light mode
│   │   └── ToastContext.jsx        # Global notifications
│   ├── data/sampleData.js          # Demo resume data
│   ├── pages/                      # Home / Builder / Templates / Preview
│   └── utils/
│       ├── aiEnhance.js            # Groq API + rate limiting
│       ├── pdfExport.js            # html2canvas + jsPDF
│       └── storage.js              # localStorage helpers
├── .github/workflows/deploy.yml    # Auto-deploy to GitHub Pages
└── index.html                      # Entry + meta / OG tags

🚀 Getting Started

Prerequisites

Node.js ≥ 18 npm or pnpm Groq API key (optional)

Installation

# 1. Clone
git clone https://github.com/Snehal-Kanzariya/resume-builder.git
cd resume-builder

# 2. Install dependencies
npm install

# 3. (Optional) Add Groq API key
echo "VITE_GROQ_API_KEY=gsk_your_key_here" > .env

# 4. Start dev server
npm run dev          # → http://localhost:5173

Available Scripts

CommandDescription
npm run devStart Vite dev server with HMR
npm run buildBuild for production to dist/
npm run previewPreview the production build locally
npm run lintRun ESLint across all source files

Keyboard Shortcuts

ShortcutAction
Ctrl + POpen browser print dialog (also saves as PDF)
Ctrl + SShow auto-save confirmation toast

🌐 Deployment

The app is automatically deployed to GitHub Pages via GitHub Actions on every push to main.

URLDescription
snehal-kanzariya.github.io/resume-builder/Live application
…/docs.htmlThis documentation (printable PDF)

Manual Deployment

npm run build
# Push dist/ to gh-pages branch (handled automatically by CI)

🤝 Contributing

  1. Fork the repository on GitHub
  2. Create a feature branch: git checkout -b feat/your-feature
  3. Commit your changes: git commit -m "feat: add your feature"
  4. Push: git push origin feat/your-feature
  5. Open a Pull Request

📝 License

MIT © 2026 Snehal Kanzariya

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files, to deal in the software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the software.