Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 

Repository files navigation

ATS-Friendly Resume Generator

An AI-powered full-stack web application that generates professionally formatted, ATS-optimized resumes as downloadable PDFs — from a simple form fill.

React Node.js MongoDB Gemini TailwindCSS


Table of Contents


Overview

The ATS-Friendly Resume Generator allows users to fill in a structured form with their professional details (education, experience, projects, skills, etc.) and instantly receive a polished, ATS-compatible PDF resume — generated using Google Gemini AI and compiled from LaTeX templates.

Resumes are stored in MongoDB (via GridFS) and can be viewed, downloaded, or deleted at any time from the user's personal dashboard. Administrators have a separate protected panel to view all generated resumes across users.


Features

Feature Description
AI Resume Generation Uses Google Gemini 2.0 Flash to intelligently populate LaTeX resume templates from user-provided data
Multiple Templates 3 professional LaTeX resume templates to choose from
PDF Export Resumes are compiled with pdflatex and stored as real PDF files
Cloud PDF Storage PDFs are stored in MongoDB GridFS — no local filesystem dependency in production
Resume Dashboard Users can view, preview inline, and delete their previously generated resumes
JWT Authentication Stateless auth with JSON Web Tokens; tokens expire in 24 hours
Admin Panel Separate admin login with role-based JWT middleware; admins can view all user resumes
ATS Score Checker Dedicated section for checking resume ATS compatibility (in development)
Responsive UI Sidebar navigation with tab-based SPA layout, styled with Tailwind CSS

Tech Stack

Frontend

  • React 19 — Component-based UI
  • React Router DOM v7 — Client-side routing with protected routes
  • Tailwind CSS 3 — Utility-first styling
  • React Toastify — User-facing notifications

Backend

  • Node.js + Express.js — REST API server
  • Mongoose — MongoDB ODM for schema definition and queries
  • GridFS (MongoDB) — Binary PDF file storage inside MongoDB
  • Multer + multer-gridfs-storage — Multipart file handling
  • pdf-lib — PDF utilities
  • pdflatex — LaTeX-to-PDF compilation (system dependency)
  • Joi — Request body validation
  • bcrypt / bcryptjs — Password hashing
  • jsonwebtoken — JWT creation and verification
  • dotenv — Environment variable management

AI

  • Google Gemini 2.0 Flash (@google/generative-ai) — Generates complete, contextually enriched LaTeX resume content from structured JSON input

System Architecture

┌──────────────────────────────────────────────────────┐
│                     React SPA                        │
│  Login / Signup → Home Dashboard (Tab Navigation)    │
│  ┌──────────┬──────────┬──────────┬───────────────┐  │
│  │ Create   │ Your Work│ Check ATS│ Profile/About │  │
│  └──────────┴──────────┴──────────┴───────────────┘  │
└────────────────────────┬─────────────────────────────┘
                         │ HTTP (REST)
                         ▼
┌──────────────────────────────────────────────────────┐
│               Express.js API Server                  │
│                                                      │
│  /auth    → AuthController  (signup, login)          │
│  /resume  → ResumeController (create, list, delete)  │
│  /admin   → AdminRoutes (protected by adminAuth JWT) │
└────────┬──────────────────────┬───────────────────────┘
         │                      │
         ▼                      ▼
┌─────────────────┐    ┌────────────────────┐
│  MongoDB Atlas  │    │  Google Gemini API  │
│  ─────────────  │    │  ────────────────   │
│  Users          │    │  gemini-2.0-flash   │
│  Admins         │    │  (LaTeX generation) │
│  Resumes        │    └────────────────────┘
│  resumes.files  │              │
│  (GridFS PDFs)  │    ┌───────────────────┐
└─────────────────┘    │   pdflatex (CLI)   │
                       │   LaTeX → PDF      │
                       └───────────────────┘

Project Structure

ATS-Friendly-Resume-Generator/
├── backend/
│   ├── server.js                  # Express app entry point
│   ├── config/
│   │   └── geminiConfig.js        # Google Gemini AI client setup
│   ├── Controllers/
│   │   ├── AuthController.js      # signup & login logic
│   │   └── ResumeController.js    # AI generation & PDF pipeline
│   ├── Middlewares/
│   │   ├── auth.js                # JWT admin role guard
│   │   └── Validation.js          # Joi request validators
│   ├── Models/
│   │   ├── db.js                  # MongoDB + GridFS connection
│   │   ├── Users.js               # User schema
│   │   ├── Admins.js              # Admin schema
│   │   └── resume.js              # Resume document schema
│   ├── Routes/
│   │   ├── AuthRouter.js          # /auth routes
│   │   ├── ResumeRouter.js        # /resume routes
│   │   ├── AdminRoutes.js         # /admin routes (protected)
│   │   └── AdminAuth.js           # /api/admin login route
│   └── template/
│       ├── template1.txt          # LaTeX resume template 1
│       ├── template2.txt          # LaTeX resume template 2
│       └── template3.txt          # LaTeX resume template 3
│
└── my-app/                        # React frontend
    └── src/
        ├── App.js                 # Routes + auth gate
        ├── RefreshHandler.js      # Persist auth state on refresh
        ├── utils.js               # Toast helpers
        ├── components/
        │   └── ResumeForm.js      # Multi-section resume input form
        └── pages/
            ├── Home.js            # Main layout with sidebar nav
            ├── HomeContent.js     # Landing tab content
            ├── Create.js          # Template picker + form submission
            ├── YourWork.js        # Saved resume list + view/delete
            ├── CheckATS.js        # ATS score analysis (WIP)
            ├── Profile.js         # User profile page
            ├── Login.js           # User login
            ├── SignUp.js          # User registration
            ├── AdminLogin.js      # Admin login
            ├── AdminDashboard.js  # Admin: all resumes overview
            ├── About.js           # About page
            ├── Contact.js         # Contact page
            └── Tutorials.js       # Tutorials page

How It Works

Resume Generation Pipeline

User fills form → POST /resume/create
        │
        ▼
1. Read LaTeX template file (template1/2/3.txt)
        │
        ▼
2. Send prompt to Gemini 2.0 Flash
   "Modify this LaTeX template with the user data.
    Enrich bullet points. Remove empty sections.
    Return only valid LaTeX code."
        │
        ▼
3. Validate & clean the returned LaTeX string
        │
        ▼
4. Write .tex to /output directory
        │
        ▼
5. Compile with: pdflatex -output-directory ...
        │
        ▼
6. Stream resulting PDF into MongoDB GridFS (bucket: "resumes")
        │
        ▼
7. Save Resume document with fileId reference
        │
        ▼
8. Return { pdfPath: /resume/download/<fileId> } to client
        │
        ▼
Client renders inline PDF preview via <iframe>

Authentication Flow

  • Signup: Password hashed with bcrypt (10 rounds), stored in MongoDB
  • Login: Password compared, JWT signed with JWT_SECRET, expires in 24h
  • Protected routes: RefreshHandler reads JWT from localStorage on page load and sets isAuthenticated state; unauthenticated users are redirected to /login
  • Admin auth: Separate JWT with role: "admin" field; adminAuth middleware validates role before granting access to admin endpoints

API Reference

Auth — /auth

Method Endpoint Body Description
POST /auth/signup { name, email, password } Register a new user
POST /auth/login { email, password } Login, returns JWT + userId

Resume — /resume

Method Endpoint Auth Description
POST /resume/create User Generate AI resume, returns PDF path
GET /resume/all?userId= User Fetch all resumes for a user
GET /resume/download/:id Stream PDF from GridFS
DELETE /resume/delete/:id User Delete resume + GridFS file

Admin — /admin & /api/admin

Method Endpoint Auth Description
POST /api/admin/login Admin login, returns admin JWT
GET /admin/resumes Admin JWT List all resumes across all users

Getting Started

Prerequisites

  • Node.js >= 18
  • MongoDB Atlas URI (or local MongoDB)
  • Google Gemini API Key — get one here
  • pdflatex installed on the server (texlive-full or equivalent)

Backend Setup

cd backend
npm install

Create a .env file in backend/:

PORT=5000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret_key
GEMINI_API_KEY=your_google_gemini_api_key
npm run dev     # development (nodemon)
# or
npm start       # production

Frontend Setup

cd my-app
npm install
npm start       # runs on http://localhost:3000

The frontend is pre-configured to call http://localhost:5000. Update API base URLs in src/ if deploying elsewhere.


Screenshots

(Add screenshots here after deployment or local run)

Screen Preview
Login Page (screenshot)
Resume Creation Form (screenshot)
Template Selection (screenshot)
PDF Preview (inline) (screenshot)
Your Work — Saved Resumes (screenshot)
Admin Dashboard (screenshot)

Future Improvements

  • Complete ATS Score Checker — parse uploaded resumes and score against a job description using AI
  • Add more LaTeX resume templates
  • Live LaTeX preview before PDF generation
  • Email notifications on resume generation
  • Deploy backend (Render/Railway) + frontend (Vercel/Netlify)
  • Replace hardcoded localhost URLs with env-based config in the frontend
  • Add rate limiting and input sanitization middleware

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages