Smart Resume Builder is a full-stack, production-ready web application that enables users to build professional resumes, check ATS compatibility using AI, and export polished PDFs instantly. It features a live preview builder, Gemini-powered resume scoring, JWT authentication, and a personal dashboard — all built with a modern tech stack and designed for a premium user experience. Deployed on Vercel.
- Overview
- Live Demo
- Features
- How It Works
- Tech Stack
- Project Structure
- Getting Started
- Environment Variables
- API Reference
- Deployment Guide
- Contributing
- License
Smart Resume Builder gives job seekers a complete edge. Users sign up, build their resume with a guided form and live side-by-side preview, save it to their personal dashboard, and then run it through an AI-powered ATS Checker that uses Google Gemini 2.5 Flash to return a score, strengths, weaknesses, and specific improvement recommendations. Resumes can be exported to print-ready multi-page PDFs at any time.
- Guided multi-section form: Personal Info, Work Experience, Education, and Skills.
- Real-time live preview pane that updates as you type.
- Create new resumes or edit existing ones from your dashboard (
/builder/:id).
- Upload an image/screenshot of any resume.
- Powered by Google Gemini 2.5 Flash API — analyzes layout, keywords, and formatting.
- Returns an ATS score (0–100) with color-coded rating: Excellent / Good / Needs Work.
- Detailed breakdown of Strengths, Weaknesses, and Recommendations.
- Export your finished resume as a high-quality PDF.
- Smart pagination via
html2pdf.js— content never gets clipped across pages.
- Built with Tailwind CSS with glassmorphism card components.
- Full Dark Mode / Light Mode toggle powered by
ThemeContext. - Smooth animated transitions using Framer Motion.
- Full JWT-based stateless auth (register → login → protected routes).
- Passwords hashed with bcryptjs.
PrivateRouteguard redirects unauthenticated users to/login.- Protected pages: Dashboard, Builder, ATS Checker.
- Public pages: Home, Login, Register, Help.
- View all your saved resumes in one place.
- One-click edit or delete for any resume.
- Quick-launch button to jump into the Resume Builder.
- Comprehensive guide covering AI Resume Building and ATS Checking workflows.
- Direct WhatsApp and Email support buttons for instant assistance.
User Registers / Logs In (JWT issued)
│
▼
Resume Builder ──────────────────────────────┐
(Form + Live Preview) │
│ │
▼ ▼
Save Resume to PostgreSQL DB ATS Checker (Upload Image)
│ │
▼ ▼
Dashboard (Manage Resumes) Gemini 2.5 Flash API → Score + Feedback
│
▼
Export Resume as PDF (html2pdf.js)
| Technology | Version | Purpose |
|---|---|---|
| React | 18 | UI Framework (via Vite) |
| Tailwind CSS | v3 | Styling & Design System |
| Framer Motion | latest | Animations & Transitions |
| Lucide React | latest | Icon Library |
| html2pdf.js | latest | PDF Generation & Export |
| React Router DOM | v6 | Client-Side Routing |
| Axios | latest | HTTP Client |
| Technology | Version | Purpose |
|---|---|---|
| Node.js | v18+ | Runtime Environment |
| Express.js | 4.x | Web Server & REST API |
PostgreSQL (pg) |
8.x | Database Connection Pool |
Google GenAI SDK (@google/genai) |
1.x | AI Gemini 2.5 Flash Resume Analysis |
| Multer | 2.x | Multipart Image Upload |
| jsonwebtoken | 9.x | JWT Authentication |
| bcryptjs | 2.x | Password Hashing |
| Helmet | 7.x | HTTP Security Headers |
| Morgan | 1.x | HTTP Request Logging |
| dotenv | 16.x | Environment Variable Loader |
📦 Smart-Resume-Builder/
├── 📁 backend/ # Express.js API Server
│ ├── 📁 config/
│ │ └── 📄 db.js # Supabase Client Initialization
│ ├── 📁 controllers/
│ │ ├── 📄 authController.js # Register & Login logic
│ │ ├── 📄 resumeController.js # Resume CRUD operations
│ │ └── 📄 aiController.js # OpenAI ATS analysis
│ ├── 📁 middleware/
│ │ └── 📄 authMiddleware.js # JWT verification middleware
│ ├── 📁 models/ # DB query helpers (User, Resume)
│ ├── 📁 routes/
│ │ ├── 📄 authRoutes.js # POST /api/auth/register, /login
│ │ ├── 📄 resumeRoutes.js # GET/POST/DELETE /api/resumes
│ │ └── 📄 aiRoutes.js # POST /api/ai/analyze-ats-image
│ ├── 📄 schema.sql # Supabase database schema
│ └── 📄 server.js # Entry point (Express app setup)
│
├── 📁 frontend/ # React 18 + Vite UI
│ ├── 📁 public/ # Static assets
│ ├── 📁 src/
│ │ ├── 📁 components/
│ │ │ ├── 📄 Navbar.jsx # Top navigation bar
│ │ │ └── 📄 ResumePreview.jsx # Live resume preview pane
│ │ ├── 📁 context/
│ │ │ ├── 📄 AuthContext.jsx # Global auth state & JWT storage
│ │ │ └── 📄 ThemeContext.jsx# Dark / Light mode toggle
│ │ ├── 📁 pages/
│ │ │ ├── 📄 Home.jsx # Landing page (public)
│ │ │ ├── 📄 Login.jsx # Login form (public)
│ │ │ ├── 📄 Register.jsx # Registration form (public)
│ │ │ ├── 📄 Dashboard.jsx # Saved resumes list (protected)
│ │ │ ├── 📄 Builder.jsx # Resume form + live preview (protected)
│ │ │ ├── 📄 ATSChecker.jsx # AI ATS score page (protected)
│ │ │ └── 📄 Help.jsx # Help center (public)
│ │ ├── 📁 services/
│ │ │ └── 📄 api.js # Axios instance with base URL & JWT header
│ │ ├── 📄 App.jsx # Route definitions (PrivateRoute guard)
│ │ └── 📄 index.css # Tailwind directives & custom layers
│ ├── 📄 vercel.json # Vercel deployment & SPA rewrite config
│ └── 📄 vite.config.js # Vite bundler settings
│
└── 📄 README.md
- Node.js v18+ installed
- A Google Gemini API Key (get yours from Google AI Studio)
- A PostgreSQL database (local instance or cloud database from Neon, Supabase, etc.)
git clone https://github.com/your-username/smart-resume-builder.git
cd smart-resume-buildercd backend
npm installCreate a .env file in the backend/ folder (see Environment Variables), then:
npm start
# ✅ Server starts on http://localhost:8001
# ✅ PostgreSQL Database Connected SuccessfullyOpen a new terminal:
cd frontend
npm install
npm run dev
# ✅ App starts on http://localhost:5173Open your browser at http://localhost:5173 to use the app.
Create a .env file in the backend/ directory:
# Server Port
PORT=8001
# Authentication — use a long, random secret string
JWT_SECRET=your_super_secret_jwt_key_here
# Gemini API Key — required for AI features
GEMINI_API_KEY=your_gemini_api_key_here
# PostgreSQL Database Connection URL
DATABASE_URL=postgresql://username:password@localhost:5432/database
⚠️ Never commit your.envfile. Ensure it is listed in.gitignore.
All protected routes require the header:
x-auth-token: <your_jwt_token>
| Method | Endpoint | Auth | Body | Description |
|---|---|---|---|---|
POST |
/api/auth/register |
❌ | { name, email, password } |
Register a new user |
POST |
/api/auth/login |
❌ | { email, password } |
Login, returns JWT token |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET |
/api/resumes |
✅ | Get all resumes for the logged-in user |
POST |
/api/resumes |
✅ | Save a new resume |
GET |
/api/resumes/:id |
✅ | Get a single resume by ID |
PUT |
/api/resumes/:id |
✅ | Update an existing resume |
DELETE |
/api/resumes/:id |
✅ | Delete a resume by ID |
| Method | Endpoint | Auth | Body | Description |
|---|---|---|---|---|
POST |
/api/ai/suggestions |
✅ | { resumeData } |
Analyze resume text data and return 5-7 improvement suggestions |
POST |
/api/ai/ats-score |
✅ | { resumeData, targetKeywords: [] } |
Calculate ATS match score against keywords |
POST |
/api/ai/analyze-ats-image |
✅ | FormData: { resumeImage: File } |
Analyze a resume screenshot/image for ATS score & feedback |
POST |
/api/ai/parse |
✅ | FormData: { resumeImage: File } |
Extract structural JSON resume data from a resume image |
POST |
/api/ai/tailor |
✅ | { resumeId, jobDescription, jobTitle, companyName } |
Tailor resume for job and generate matching cover letter |
Example /api/ai/analyze-ats-image Response:
{
"score": 78,
"summary": "A strong resume with good structure, but missing key technical keywords.",
"feedback": {
"strengths": ["Clean layout", "Quantified achievements"],
"weaknesses": ["Missing technical skills section"],
"recommendations": ["Add a Skills section with relevant technologies"]
}
}- Push your project to a GitHub Repository.
- Ensure
node_modulesis in.gitignore. - Go to vercel.com → Import your repository.
- Set Root Directory to
frontend. - Add the environment variable
VITE_API_BASE_URLpointing to your deployed backend API URL (e.g.https://your-backend.onrender.com/api). - Vercel will auto-detect Vite and run
npm run build.
- Deploy the
backend/folder as a Node.js Web Service. - Set all environment variables (
PORT,JWT_SECRET,GEMINI_API_KEY,DATABASE_URL) in the dashboard. - Set the Start Command to:
node server.js
Contributions, issues, and feature requests are welcome!
- Fork the repository
- Create your branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m 'Add my feature' - Push to the branch:
git push origin feature/my-feature - Open a Pull Request
"Your resume is not just a document — it's the blueprint of your professional journey. Build it with purpose, design it with care, and let it open the doors to your future."
Build your future today. 🚀