- Live Demo
- The Problem & Solution
- App Showcase
- Core Features
- Tech Stack
- System Architecture
- Database Schema
- Getting Started
- Environment Variables
- Folder Structure
- Project Structure
- Contributing
- License
- Let's Connect
π View Live Demo Here
Try the full app β upload a resume, get an AI-powered ATS score, generate cover letters, and explore career growth insights. No installation required.
| URL | |
|---|---|
| π Frontend | aliza-resume-analyzer.vercel.app |
| βοΈ Backend API | ai-resume-backend-sable.vercel.app |
78% of resumes are rejected by ATS systems before a human ever reads them.
Job seekers spend hours crafting resumes β only to be silently filtered out. They never know why they're rejected, which keywords are missing, or how to tailor their resume for each role. The feedback loop is completely broken.
AI Resume Analyzer fixes this. It's a full-stack SaaS platform that acts as your personal AI recruiter. Upload your resume once and instantly get a multi-dimensional ATS score, the exact keywords you're missing, AI-generated cover letters, mock interview questions with answer strategies, and a complete career growth roadmap. All powered by Google Gemini AI. No guesswork. No more rejections.
| Feature | Description |
|---|---|
| π Multi-Dimensional ATS Scoring | Scored across Grammar, Impact & Action Verbs, Formatting, and Keyword Density β each with animated progress cards |
| π§ Dynamic Domain Classification | Auto-detects Corporate vs. Academic CVs β academic CVs aren't penalized for length or publications |
| π― Semantic Job Matching | Paste a JD or URL β semantic matching catches synonyms (Azure = Microsoft Azure, Collaborated = Collaboration) |
| βοΈ AI Content Generation | Cover letters, LinkedIn summaries, professional bios β with proper sign-off, no markdown artifacts, clean PDF export |
| ποΈ Mock Interview Prep | 12 personalized questions from your resume + JD-targeted interview predictor with ideal answer strategies |
| π Career Growth Hub | AI career roadmaps (Current β Next Role) + complexity-aware project suggestions |
| π Resume Visualizations | Skills word cloud, top technologies chart, highlighted resume preview with toggleable categories |
| π PDF Reports | Branded A4 exports with sanitized text, smart page breaks, and multi-page support |
| π‘οΈ Google OAuth + JWT | Frictionless sign-in with Google or email/password with stateless JWT architecture |
| π³ Stripe Monetization | Credit-based system with Stripe Elements, Hosted Checkout, PaymentIntents, and Webhooks |
| π PLG Onboarding | Interactive landing page dropzone β fake scan β blurred teaser β signup conversion funnel |
| β In-App Feedback | Floating 5-star feedback widget on every dashboard page |
| Technology | Version | Purpose |
|---|---|---|
| React | 19 | UI framework |
| TypeScript | 5.9 | Type safety |
| Vite | 8 | Build tool & dev server |
| TailwindCSS | 4 | Utility-first styling |
| Framer Motion | 12 | Animations & transitions |
| Recharts | 3 | Data visualization (charts) |
| Zustand | 5 | Lightweight state management |
| React Router | 7 | Client-side routing |
| @stripe/stripe-js | Latest | Stripe payment UI |
| @react-oauth/google | Latest | Google sign-in button |
| Technology | Version | Purpose |
|---|---|---|
| Node.js | 22 | JavaScript runtime |
| Express | 4 | HTTP server framework |
| Prisma | 6 | ORM for MongoDB |
| MongoDB Atlas | β | Cloud database |
| Gemini 2.5 Flash | Latest | AI analysis & generation |
| Natural.js | 8 | NLP: TF-IDF, Porter Stemmer |
| Stripe | Latest | Payments & subscriptions |
| google-auth-library | Latest | OAuth token verification |
| Cheerio | Latest | Web scraping (job URLs) |
| jsPDF + autoTable | Latest | Server-quality PDF generation |
flowchart TB
subgraph Client["Frontend - React + Vite"]
UI["Pages & Components"]
Store["Zustand Auth Store"]
Axios["Axios Client"]
end
subgraph Server["Backend - Express.js"]
Routes["API Routes"]
MW["Middlewares"]
Ctrl["Controllers"]
Svc["Service Layer"]
end
subgraph AI["AI Layer"]
Gemini["Gemini 2.5 Flash"]
NLP["NLP Engine"]
OCR["Gemini Vision OCR"]
end
subgraph DB["Data Layer"]
Prisma["Prisma ORM"]
Mongo[("MongoDB Atlas")]
end
subgraph Ext["External Services"]
StripeAPI["Stripe API"]
GoogleAPI["Google OAuth"]
end
UI --> Axios
Axios -->|"REST + JWT"| Routes
Routes --> MW
MW -->|"Auth + Credits"| Ctrl
Ctrl --> Svc
Svc --> Gemini
Svc --> NLP
Svc --> OCR
Svc --> Prisma
Prisma --> Mongo
Routes -.-> StripeAPI
Store -.-> GoogleAPI
User clicks "Analyze Resume"
β React component β Axios (JWT header attached)
β Express Route β authenticate() middleware
β requireCredits() middleware (checks aiCredits > 0)
β Controller β Service β Gemini AI + NLP Engine
β Response built β deductCredit() called
β X-AI-Credits-Remaining header set
β Frontend receives data + updates UI + shows toast
erDiagram
USER ||--o{ RESUME : uploads
RESUME ||--o| ANALYSIS : has
USER {
string id PK
string name
string email UK
string password
string role
boolean isPro
int aiCredits
string stripeCustomerId
datetime createdAt
}
RESUME {
string id PK
string userId FK
string fileUrl
string fileName
int atsScore
datetime createdAt
}
ANALYSIS {
string id PK
string resumeId FK
int skillsScore
int experienceScore
int educationScore
int projectsScore
int jobMatchScore
string_array keywords
string_array missingKeywords
string_array suggestions
}
FEEDBACK {
string id PK
string userId FK
int rating
string comment
datetime createdAt
}
- Node.js v18 or higher
- MongoDB Atlas account (free tier works)
- Gemini API Key from Google AI Studio
- Stripe Account (optional β for payments)
git clone https://github.com/aliza-dev/ai-resume-analyzer.git
cd ai-resume-analyzercd backend
npm installcd ../frontend
npm installcd ../backend
npx prisma generateTerminal 1 β Backend (port 5000):
cd backend
npm run devTerminal 2 β Frontend (port 3000):
cd frontend
npm run devπ Open http://localhost:3000 and start analyzing resumes!
# Server
NODE_ENV=development
PORT=5000
# Database
DATABASE_URL=mongodb+srv://your-user:[email protected]/ai_resume_analyzer
# Authentication
JWT_SECRET=your-super-secret-jwt-key-change-this
JWT_EXPIRES_IN=7d
GOOGLE_CLIENT_ID=your-google-oauth-client-id.apps.googleusercontent.com
# File Uploads
UPLOAD_DIR=./uploads
MAX_FILE_SIZE=5242880
# CORS
CORS_ORIGIN=http://localhost:3000
# AI
GEMINI_API_KEY=your-gemini-api-key
# Stripe Payments
STRIPE_SECRET_KEY=sk_test_your-stripe-secret-key
STRIPE_WEBHOOK_SECRET=whsec_your-webhook-secret
STRIPE_PRICE_ID=
FRONTEND_URL=http://localhost:3000
# Admin
[email protected]VITE_APP_NAME=AI Resume Analyzer
VITE_API_URL=http://localhost:5000/api
VITE_STRIPE_PUBLISHABLE_KEY=pk_test_your-stripe-publishable-key
VITE_GOOGLE_CLIENT_ID=your-google-oauth-client-id.apps.googleusercontent.comai-resume-analyzer/
βββ frontend/ # React 19 + TypeScript + Vite + TailwindCSS
β βββ src/
β β βββ api/ # Axios client & API wrappers
β β βββ components/ # Reusable UI (charts, layout, gates)
β β βββ pages/ # 15+ pages (dashboard, auth, landing)
β β βββ hooks/ # Zustand auth store, theme
β β βββ utils/ # PDF generation, sanitization
β β βββ routes/ # Protected routes & router config
β βββ index.html
β
βββ backend/ # Node.js + Express + Prisma + Gemini AI
β βββ prisma/ # MongoDB schema (User, Resume, Analysis)
β βββ src/
β β βββ controllers/ # Auth & Analysis endpoints
β β βββ services/ # AI engine (2500+ LOC), LLM prompts, NLP
β β βββ middlewares/ # JWT auth, credit gating, error handler
β β βββ routes/ # 20+ REST API routes
β β βββ validators/ # Zod request schemas
β β βββ server.ts # Express entry point
β βββ uploads/ # Resume file storage
β
βββ assets/ # README screenshots
βββ README.md
Click to expand full tree
ai-resume-analyzer/
β
βββ backend/
β βββ prisma/
β β βββ schema.prisma # User, Resume, Analysis, Feedback
β βββ src/
β β βββ config/
β β β βββ database.ts # Prisma client singleton
β β β βββ env.ts # Environment variables
β β β βββ multer.ts # File upload config
β β βββ controllers/
β β β βββ auth.controller.ts # Login, Register, Google OAuth
β β β βββ analysis.controller.ts # 30+ AI analysis endpoints
β β βββ helpers/
β β β βββ jwt.ts # Token generation & verification
β β β βββ password.ts # Bcrypt hashing
β β β βββ response.ts # Standardized API responses
β β βββ middlewares/
β β β βββ auth.ts # JWT authentication guard
β β β βββ credits.ts # AI credit check & deduction
β β β βββ errorHandler.ts # Global error + 429 handling
β β βββ routes/
β β β βββ auth.routes.ts # /api/auth/*
β β β βββ analysis.routes.ts # /api/analysis/* (20+ routes)
β β β βββ stripe.routes.ts # /api/stripe/* (checkout, webhook)
β β β βββ feedback.routes.ts # /api/feedback
β β βββ services/
β β β βββ analysis.service.ts # Core engine (2500+ lines)
β β β βββ auth.service.ts # User authentication logic
β β β βββ llm.service.ts # Gemini AI prompts (750+ lines)
β β β βββ nlp.engine.ts # TF-IDF, stemming, classification
β β βββ validators/ # Zod request schemas
β β βββ server.ts # Express app entry point
β βββ uploads/ # Resume file storage
β
βββ frontend/
β βββ src/
β β βββ api/
β β β βββ client.ts # Axios + interceptors (401/403/429)
β β β βββ auth.ts # Auth API calls
β β β βββ resume.ts # 25+ analysis API methods
β β βββ components/
β β β βββ layout/ # Sidebar, Navbar, DashboardLayout
β β β βββ charts/ # AtsScore, SkillsRadar, JobMatchBar
β β β βββ ui/ # Button, Card, Badge, Skeleton
β β β βββ ProGate.tsx # Credit-based feature gating
β β β βββ FeedbackModal.tsx # Floating feedback widget
β β β βββ SocialAuthButtons.tsx # Google OAuth button
β β βββ pages/
β β β βββ Home.tsx # Landing page (PLG dropzone)
β β β βββ Pricing.tsx # Free vs Pro plans
β β β βββ Purchase.tsx # 3-step Stripe checkout
β β β βββ NotFound.tsx # Custom 404
β β β βββ auth/ # Login, Register
β β β βββ dashboard/ # 15+ dashboard pages
β β βββ hooks/ # useAuth (Zustand), useTheme
β β βββ data/ # Sample resume mock data
β β βββ utils/ # PDF gen, sanitization, constants
β β βββ routes/ # Router config + ProtectedRoute
β βββ index.html
β
βββ assets/ # README screenshots
β βββ landing-page.jpg
β βββ pricing.jpg
β βββ auth.jpg
β βββ dashboard.jpg
β βββ analysis.jpg
β βββ job-match.jpg
β βββ career-hub.jpg
β βββ mock-interview.jpg
β
βββ README.md
Contributions are what make the open-source community such an incredible place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the project
- Create your feature branch
git checkout -b feature/AmazingFeature
- Commit your changes
git commit -m 'Add some AmazingFeature' - Push to the branch
git push origin feature/AmazingFeature
- Open a Pull Request
Note: Please ensure TypeScript compiles cleanly before submitting:
cd frontend && npx tsc --noEmit cd ../backend && npx tsc --noEmit
Distributed under the MIT License. See LICENSE for more information.
Built with π by Aliza Tariq
I'm always open to collaborations, freelance opportunities, and connecting with fellow developers!
| Link | |
|---|---|
| πΌ LinkedIn | linkedin.com/in/aliza-tariq-dev |
| π GitHub | github.com/aliza-dev |
| π§ Email | [email protected] |
"The best way to predict the future is to build it."
Made with β€οΈ and β β If you found this useful, a β on the repo means the world!












