Skip to content

Latest commit

 

History

128 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI-Powered Resume Analyzer

An intelligent full-stack web application that helps job seekers upload their resume, extract key information, and receive AI-driven feedback to improve their chances of landing interviews.

Upload a PDF resume, get instant analysis powered by Google Gemini, and track your progress through a modern React dashboard — with optional subscription plans via PayPal and Paddle.


Features

Resume Analysis

  • PDF upload & parsing — Upload resume files; text is extracted server-side using pdf.js-extract
  • AI-powered feedback — Google Generative AI (Gemini) analyzes content, structure, keywords, and clarity
  • Visual insights — Interactive charts and score breakdowns (Recharts)
  • Analysis history — Past uploads and reports stored per user in MongoDB

User Experience

  • Authentication — Secure sign-up / login with JWT and bcrypt password hashing
  • Responsive UI — Built with React, Tailwind CSS, and Radix UI (shadcn-style components)
  • Dark mode — Theme switching via next-themes
  • Toast notifications — Real-time feedback with Sonner

Monetization

  • Pricing page — Subscription tiers for free vs. premium analysis
  • Payment integrations — PayPal Server SDK and Paddle checkout support

Admin

  • Admin dashboard — Manage users, view uploads, and monitor platform activity

Other Pages

  • Login — User authentication
  • Pricing — Plan comparison and checkout
  • Testimonials — Social proof from satisfied users

Tech Stack

Layer Technologies
Frontend React 18, Vite, React Router, TypeScript, Tailwind CSS, Radix UI, React Hook Form, Zod, TanStack Query, Recharts, Axios
Backend Node.js, Express, MongoDB, Mongoose
AI Google Generative AI (@google/generative-ai)
Auth JSON Web Tokens (JWT), bcryptjs
File handling Multer, pdf.js-extract
Payments PayPal Server SDK, Paddle
Email Nodemailer
Security Helmet, CORS, express-rate-limit
Dev tools Nodemon, Concurrently, Cross-env

Project Structure

AI-Powered-resume-analyzer/
├── backend/
│   ├── src/
│   │   ├── controllers/    # Route handlers (auth, resume, payments, admin)
│   │   ├── middleware/     # JWT auth, error handling, rate limiting
│   │   ├── models/         # Mongoose schemas (User, Resume, Analysis, Subscription)
│   │   ├── routes/         # Express API routes
│   │   ├── services/       # AI analysis, PDF parsing, email, payments
│   │   ├── utils/          # Helpers and shared utilities
│   │   └── uploads/        # Temporary resume file storage
│   ├── controllers/
│   ├── models/
│   ├── routes/
│   └── validators/         # Request validation
├── frontend/
│   ├── app/                # App routes (login, pricing, testimonials)
│   ├── src/
│   │   ├── components/
│   │   │   ├── admin/      # Admin panel components
│   │   │   └── ui/         # Reusable UI primitives (shadcn)
│   │   ├── hooks/          # Custom React hooks
│   │   ├── lib/            # API client, utilities
│   │   └── pages/          # Route-level page components
│   └── public/             # Static assets
├── src/
│   └── uploads/            # Shared upload directory
└── uploads/                # Root-level file storage

Getting Started

Prerequisites

  • Node.js v18 or later
  • MongoDB (local instance or MongoDB Atlas)
  • Google AI API key — Get one here
  • (Optional) PayPal Developer credentials
  • (Optional) Paddle API keys
  • (Optional) SMTP credentials for email notifications

1. Clone the repository

git clone https://github.com/<your-username>/AI-Powered-resume-analyzer.git
cd AI-Powered-resume-analyzer

2. Install dependencies

# Root (runs both frontend & backend concurrently)
npm install

# Or install separately
cd backend && npm install
cd ../frontend && npm install

3. Configure environment variables

Create a .env file in the project root (or in backend/):

# Server
PORT=5000
NODE_ENV=development

# Database
MONGODB_URI=mongodb://localhost:27017/resume-analyzer

# Authentication
JWT_SECRET=your_super_secret_jwt_key
JWT_EXPIRES_IN=7d

# Google AI
GOOGLE_AI_API_KEY=your_google_gemini_api_key

# Email (optional)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_email@gmail.com
SMTP_PASS=your_app_password

# PayPal (optional)
PAYPAL_CLIENT_ID=your_paypal_client_id
PAYPAL_CLIENT_SECRET=your_paypal_client_secret
PAYPAL_MODE=sandbox

# Paddle (optional)
PADDLE_API_KEY=your_paddle_api_key
PADDLE_VENDOR_ID=your_paddle_vendor_id

# Frontend URL (for CORS)
CLIENT_URL=http://localhost:5173

Create a .env file in frontend/:

VITE_API_URL=http://localhost:5000/api
VITE_PAYPAL_CLIENT_ID=your_paypal_client_id
VITE_PADDLE_CLIENT_TOKEN=your_paddle_client_token

4. Run the application

# Development — runs backend + frontend together
npm run dev

# Or run separately
npm run server   # Backend on http://localhost:5000
npm run client   # Frontend on http://localhost:5173

5. Open in browser

Navigate to http://localhost:5173


API Overview

Method Endpoint Description
POST /api/auth/register Create a new user account
POST /api/auth/login Authenticate and receive JWT
GET /api/auth/me Get current user profile
POST /api/resume/upload Upload a PDF resume for analysis
GET /api/resume/:id Get a specific analysis result
GET /api/resume/history List all analyses for the logged-in user
POST /api/payments/paypal/create-order Create a PayPal subscription order
POST /api/payments/paypal/capture-order Capture a completed PayPal payment
GET /api/admin/users (Admin) List all users
GET /api/admin/analyses (Admin) View all resume analyses

Route names are inferred from the project structure. Adjust to match your actual route definitions once source files are restored.


How It Works

flowchart LR
    A[User uploads PDF] --> B[Express API + Multer]
    B --> C[pdf.js-extract]
    C --> D[Extracted text]
    D --> E[Google Gemini AI]
    E --> F[Analysis report]
    F --> G[Save to MongoDB]
    G --> H[React dashboard with charts]
Loading
  1. User uploads a PDF resume through the frontend
  2. Backend stores the file temporarily and extracts text with pdf.js-extract
  3. Extracted text is sent to Google Gemini with a structured prompt
  4. AI returns scores, suggestions, keyword gaps, and formatting feedback
  5. Results are saved to MongoDB and displayed in the dashboard with Recharts visualizations

Scripts

Command Description
npm run dev Start backend and frontend concurrently
npm run server Start Express backend with Nodemon
npm run client Start Vite dev server
npm run build Build frontend for production
npm start Start production backend server

Security

  • Passwords hashed with bcryptjs before storage
  • JWT tokens for stateless authentication
  • Helmet for HTTP security headers
  • express-rate-limit to prevent abuse
  • CORS restricted to the configured frontend origin
  • Uploaded files validated and stored outside the public web root

Deployment

Backend

Deploy the Express API to Railway, Render, or any Node.js host. Set all environment variables in the hosting dashboard.

Frontend

Build and deploy the Vite app to Vercel or Netlify:

cd frontend
npm run build
# Deploy the dist/ folder

Database

Use MongoDB Atlas for a managed cloud database. Update MONGODB_URI accordingly.


Contributing

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

License

This project is open source and available under the MIT License.


Author

Built with ❤️ by Supun Hasanka

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages