Beat the ATS. Get hired faster.
An AI-powered SaaS that analyzes your resume against job descriptions, gives you an ATS compatibility score, finds missing keywords, and helps you land more interviews.
π Live at: https://arcivai.vercel.app
- Upload your resume as PDF or DOCX
- Paste any job description to match against
- Get an instant ATS compatibility score out of 100
- See matched and missing keywords at a glance
- Receive section-by-section feedback (Summary, Skills, Experience, Education)
- Powered by Google Gemini 3.6 Flash
- Build resumes from scratch using a structured form
- Choose from multiple ATS-friendly templates (Classic, Modern)
- Live preview of your resume as you type
- One-click PDF export β print-ready and ATS-safe
- Resumes auto-saved to your account
- Google OAuth sign-in via Supabase
- Email/password sign-up and login
- Magic link (passwordless) login
- Password reset via email
- Session management with secure HTTP-only cookies
- Free Plan: 2 AI analyses per month, all templates, unlimited PDF downloads
- Premium Plan (βΉ499 one-time): Unlimited AI analyses, all features, priority support
- Seamless Razorpay payment integration with webhook verification
- Per-user quota tracking with
usage_eventstable
- Server-side rendering with Next.js App Router
- Full Schema.org structured data (SoftwareApplication, FAQ, Organization)
- Open Graph & Twitter Card metadata
- Sitemap + robots.txt auto-generated
- Optimized fonts: Geist Sans, Geist Mono, Josefin Sans
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, Webpack) |
| UI | React 19, Tailwind CSS v4, Framer Motion |
| Icons | Lucide React |
| AI | Google Gemini 3.6 Flash (@google/generative-ai) |
| Auth & DB | Supabase (PostgreSQL + Row Level Security) |
| Payments | Razorpay (order creation + webhook verification) |
| PDF Parsing | pdf-parse + pdfjs-dist, mammoth (DOCX) |
| PDF Export | jspdf + html2canvas |
| State | Zustand |
| Deployment | Vercel |
ai_resume/
βββ public/
β βββ images/ # Static assets (bg, logos)
β βββ template-previews/ # Resume template preview images
βββ scripts/
β βββ supabase.sql # Full DB schema for Supabase
βββ src/
β βββ app/
β β βββ _component/ # Shared UI (Navbar, Footer, Hero, FAQ, Plans...)
β β βββ analysis/ # AI analysis results page
β β βββ api/
β β β βββ analyze-resume/ # Core AI analysis endpoint (POST)
β β β βββ razorpay/ # Payment routes (create-order, verify, webhook)
β β β βββ user/ # User plan API
β β βββ auth/callback/ # Supabase OAuth callback handler
β β βββ dashboard/ # User saved resumes dashboard
β β βββ login/ # Auth page (Google, email, magic link)
β β βββ pricing/ # Pricing page + Razorpay checkout
β β βββ template/ # Resume builder (template list + [id] editor)
β βββ components/
β β βββ Editor/ # ResumeForm β structured input form
β β βββ PDFTemplates/ # PDF-specific template renderer
β β βββ ResumeRenderers/ # Classic & Modern live preview templates
β βββ data/ # Universities dataset
β βββ lib/
β β βββ fileParsers.js # PDF/DOCX text extraction
β β βββ prompt.js # Gemini AI prompt builder
β β βββ razorpayServer.js # Razorpay server utils + quota config
β β βββ resumeService.js # Supabase resume CRUD operations
β β βββ supabase.js # Client-side Supabase client
β β βββ supabaseAdmin.js # Admin Supabase client (service role key)
β β βββ supabaseServer.js # Server-side Supabase client (SSR cookies)
β βββ middleware.js # Edge auth guard + route protection
β βββ store/
β β βββ resumeStore.js # Zustand global state for resume data
β βββ templates/ # Resume JSON schemas (classic, modern)
βββ next.config.mjs
βββ package.json
The full schema is in scripts/supabase.sql. Run it once in your Supabase SQL Editor.
| Table | Purpose |
|---|---|
profiles |
User profile β synced from auth.users via DB trigger on signup |
resumes |
Stores resume JSON data with template name & unique share token |
subscriptions |
Tracks user plan (free / premium) and Razorpay subscription ID |
usage_events |
Per-user AI analysis count for enforcing the free monthly quota |
All tables have Row Level Security (RLS) enabled β users can only read/write their own rows.
- Node.js 18+
- A Supabase project
- A Google Cloud project with OAuth 2.0 credentials
- A Google AI Studio API key (Gemini)
- A Razorpay account
git clone https://github.com/Aman17123/AchiVAI-AI-Saas_RESUME-ENHANCER.git
cd AchiVAI-AI-Saas_RESUME-ENHANCERnpm installCreate a .env.local file at the root:
# Supabase β Dashboard β Project Settings β API
NEXT_PUBLIC_SUPABASE_URL=https://your-project-id.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-supabase-service-role-key
# Google Gemini AI β https://ai.google.dev
GEMINI_API_KEY=your-gemini-api-key
# Razorpay β https://dashboard.razorpay.com
RAZORPAY_KEY_ID=rzp_test_xxxxxxxxxxxx
RAZORPAY_KEY_SECRET=your-razorpay-secret
RAZORPAY_WEBHOOK_SECRET=your-razorpay-webhook-secret
# App URL β use your live Vercel URL in production
NEXT_PUBLIC_APP_URL=http://localhost:3000- Go to Supabase Dashboard β SQL Editor
- Paste the contents of
scripts/supabase.sqland click Run - Go to Authentication β Providers β Google and enable Google OAuth
- Copy the Callback URL shown in Supabase
- In Google Cloud Console β Credentials β OAuth 2.0 Client, add it as an Authorized Redirect URI:
https://your-project-id.supabase.co/auth/v1/callback
npm run devOpen http://localhost:3000 π
- Push your code to GitHub
- Import your repository at vercel.com
- In Vercel β Project β Settings β Environment Variables, add all variables from
.env.local - Set
NEXT_PUBLIC_APP_URLto your live Vercel URL (e.g.,https://arcivai.vercel.app) - Click Deploy π
User uploads Resume (PDF/DOCX)
β
βΌ
fileParsers.js extracts raw text
β
βΌ
prompt.js builds a structured Gemini prompt
(resume text + optional job description)
β
βΌ
Gemini 3.6 Flash returns structured JSON:
{ atsScore, matchedKeywords, missingKeywords,
sectionsAnalyzed, feedback, suggestions, suggestedRole }
β
βΌ
Results displayed on /analysis page
(ATS score gauge, keyword chips, section breakdown)
| Feature | Free | Premium (βΉ499 one-time) |
|---|---|---|
| AI Resume Analyses | 2 / month | Unlimited |
| ATS-Friendly Templates | All | All |
| PDF Download | β | β |
| Cloud Save | β | β |
| Job Description Matching | β | β |
| Priority Support | β | β |
| Price | βΉ0 / forever | βΉ499 one-time |
- Protected routes (
/dashboard,/analysis,/template/[id]) guarded by server-side middleware - Row Level Security (RLS) enforced at DB level β no accidental data leaks
- Razorpay webhook payloads verified with HMAC signature before processing
SUPABASE_SERVICE_ROLE_KEYis server-only β never exposed to the browser.env.localis gitignored β secrets are never committed
Pull requests are welcome! For major changes, please open an issue first.
- Fork the project
- Create your feature branch:
git checkout -b feat/amazing-feature - Commit your changes:
git commit -m 'feat: add amazing feature' - Push to the branch:
git push origin feat/amazing-feature - Open a Pull Request
Aman Nakoti
- GitHub: @Aman17123
- Live Project: arcivai.vercel.app
This project is open source and available under the MIT License.
Made with β€οΈ and a lot of Gemini API calls.
If this helped you, please β star the repo!