AI-powered Resume Review platform built with Next.js 15, Gemini AI, Supabase, and Stripe.
ResumeIQ analyzes resumes using Google's Gemini models and provides recruiter-style feedback, ATS scores, strengths, weaknesses, missing skills, and recommendations.
- Next.js 15 (App Router)
- React
- TailwindCSS
- Supabase Authentication
- Supabase Database
- Gemini 2.5 Flash
- pdfjs-dist
- Stripe Checkout
- Vercel Ready
app
├── api
│ ├── analyze
│ ├── checkout
│ └── webhook
│
├── dashboard
├── pricing
├── login
├── signup
├── success
│
components
│
├── UploadCard
├── ScoreCard
├── SummaryCard
├── SkillsCard
├── FeedbackCard
└── Navbar
lib
│
├── gemini.js
├── pdf.js
├── prompts.js
├── stripe.js
└── supabase
User
↓
Signup/Login
↓
Dashboard
↓
Upload Resume (PDF)
↓
Extract Text (pdfjs)
↓
Gemini AI
↓
Structured JSON
↓
Dashboard Components
Score
ATS
Summary
Skills
Recommendations
↓
Upgrade to Pro
↓
Stripe Checkout
↓
Webhook
↓
Supabase Plan Update
User uploads
resume.pdf
using React Dropzone.
POST
/api/analyze
receives the PDF.
extractResumeText()
uses
pdfjs-dist
to extract all text.
Returns
Plain Resume Text
reviewResume()
sends
Prompt
+
Resume Text
to Gemini 2.5 Flash.
Gemini returns
{
"overallScore": 82,
"atsScore": 78,
"summary": "...",
"strengths": [],
"weaknesses": [],
"recommendations": [],
"skillsFound": [],
"missingSkills": [],
"sectionScores": {}
}Response is rendered into
- Score Card
- ATS Card
- Summary
- Skills
- Missing Skills
- Recommendations
- Strengths
- Weaknesses
Prompt forces Gemini to return
ONLY JSON.
It evaluates
- ATS
- Resume Quality
- Formatting
- Projects
- Skills
- Missing Skills
- Recruiter Summary
- Recommendations
Supabase Auth
Signup
↓
Supabase Auth
↓
auth.users
Current implementation also inserts into
profiles
table.
Schema
create table profiles (
id uuid primary key references auth.users(id),
email text,
plan text default 'FREE',
created_at timestamptz default now()
);Dashboard currently shows
- Upload Resume
- Resume Score
- ATS Score
- Summary
- Skills
- Missing Skills
- Recommendations
Future improvements
- Review History
- Recent Uploads
- Download Report
- Dark Mode
- Analytics
lib/stripe.js
app/api/checkout
app/api/webhook
app/pricing
app/success
already exist.
FREE USER
↓
Clicks Upgrade
↓
POST /api/checkout
↓
Stripe Checkout Session
↓
Stripe Hosted Payment Page
↓
Successful Payment
↓
Stripe Webhook
↓
Update Supabase
↓
profiles.plan = PRO
↓
Redirect
↓
Dashboard
↓
Unlimited Reviews
Creates
Stripe Checkout Session
Returns
session.url
Browser redirects user.
Listens for
checkout.session.completed
Then
profiles.plan = "PRO"
Current project DOES NOT contain
- Stripe Secret Key
- Stripe Publishable Key
- Product
- Price ID
- Webhook Secret
Therefore payment cannot yet function.
Create
ResumeIQ Pro
inside Stripe Dashboard.
Price
$9.99
Copy
Price ID
Add
STRIPE_SECRET_KEY
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
STRIPE_WEBHOOK_SECRET
to
.env.local
Install Stripe CLI
stripe login
stripe listen \
--forward-to localhost:3000/api/webhook
Copy
Webhook Secret
into
.env.local
Checkout Session should include
client_reference_id
=
user.id
so webhook knows which profile to upgrade.
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
GEMINI_API_KEY=
NEXT_PUBLIC_APP_URL=http://localhost:3000
STRIPE_SECRET_KEY=
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
STRIPE_WEBHOOK_SECRET=
✅ Stripe Payment
✅ Plan Enforcement
✅ Review Limits
✅ Review History
✅ Download PDF Report
✅ Compare Resume with Job Description
Resume Builder
Cover Letter Generator
LinkedIn Profile Review
Interview Questions
Skill Gap Analysis
Roadmap Generator
AI Resume Rewrite
Multiple Resume Versions
Resume Templates
Recruiter Mode
Deploy
Vercel
Connect
- GitHub
- Supabase
- Gemini API
- Stripe
Add Environment Variables.
Completed
- Authentication
- Dashboard
- Resume Upload
- PDF Parsing
- Gemini Analysis
- Recruiter Feedback
- ATS Analysis
- Pricing Page
- Checkout Endpoint
- Webhook Skeleton
- Responsive UI
Pending
- Stripe API Keys
- Stripe Product
- Stripe Price ID
- Stripe Webhook Testing
- PRO Plan Upgrade
- Review Limits
- Dashboard History
- Job Description Matching
The payment architecture is already in place.
Only the Stripe configuration and API credentials are missing. Once the Stripe dashboard is configured and the environment variables are added, the checkout flow, webhook, and PRO plan activation can be completed with minimal code changes.