Analyze your resume, discover matching opportunities, build stronger applications, and prepare for interviews — all from one intelligent platform.
- Screenshots
- Features
- Architecture
- API Overview
- Tech Stack
- Project Structure
- Getting Started
- Environment Variables
- Deployment
- Pricing
- License
Hero section with feature highlights, pricing plans, and CTA — dark themed with orange accent.
One-click Google OAuth sign-in. No passwords required.
Upload your PDF resume (max 5MB) for ATS scoring, keyword analysis, and actionable improvement suggestions.
| Enter Skills Manually | Upload Resume |
|---|---|
![]() |
![]() |
Discover job roles matched to your skillset. Input skills manually or extract them directly from your resume PDF.
| Build From Scratch | Improve Existing Resume |
|---|---|
![]() |
![]() |
Build a professional, ATS-friendly resume from scratch with AI-enhanced summaries, or upload an existing resume for AI-powered improvements. Export to PDF instantly.
| HR Round (Manual) | Technical Round (Manual) | Upload Resume |
|---|---|---|
![]() |
![]() |
![]() |
Generate tailored interview questions for HR or Technical rounds. Enter your skills manually or let AI parse your resume.
| Free Plan | Pro Plan |
|---|---|
![]() |
![]() |
Manage your subscription. Free users see remaining AI request quota; Pro users see their plan expiry date.
- Resume Analysis — ATS compatibility scoring, keyword optimization insights, section-by-section analysis, and actionable improvement suggestions
- Job Matching — AI-powered role matching with skill-fit percentage, gap analysis per position, and personalized recommendations
- Resume Builder — Build from scratch or improve an existing resume; AI-assisted content generation with ATS-friendly formatting and instant PDF export
- Interview Preparation — Role-specific HR and Technical questions, behavioral interview guidance, and AI-powered feedback
- Google OAuth — Frictionless sign-in with Google; no passwords
- Subscription System — Free tier (3 AI requests) + Pro Monthly (₹299) + Pro 6-Month (₹1,499) plans via Razorpay
ForgePath follows a classic client → REST API → AI/DB/payments architecture. The frontend never talks to Gemini or Razorpay directly — all AI calls and payment webhooks go through the Express backend, which also enforces authentication and usage quotas.
graph TD
subgraph Client ["🌐 Client (React + Vite — Vercel)"]
A[User Browser]
end
subgraph Backend ["⚙️ Backend (Express + TypeScript — Render/Railway)"]
B[Express Server :5000]
C[isAuth Middleware\nJWT Verification]
D[AI Controller\nGemini API calls]
E[User Controller\nGoogle OAuth + JWT]
F[Payment Controller\nRazorpay Orders & Verify]
end
subgraph External ["☁️ External Services"]
G[(MongoDB Atlas)]
H[Google OAuth 2.0]
I[Gemini AI API]
J[Razorpay Payments]
end
A -->|HTTPS REST| B
B --> C
C --> D
C --> E
C --> F
E -->|Verify ID Token| H
E -->|Read/Write User + Plan| G
D -->|Resume PDF + Prompt| I
D -->|Read/Write Usage Quota| G
F -->|Create Order / Verify| J
F -->|Update Plan in DB| G
Key design decisions:
- JWT auth — stateless tokens;
isAuthmiddleware gates all protected routes - Usage quota — stored on the
Usermodel in MongoDB; checked before every AI call so the free tier is enforced server-side, not client-side - Prompt config — all Gemini system prompts are centralized in
server/src/config/prompt.ts, making them easy to tune without touching controller logic - trycatch middleware — a global async error wrapper on all controllers keeps error-handling DRY
Base URL: https://<your-backend-domain>/api
All protected routes require the header:
Authorization: Bearer <jwt_token>
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST |
/api/user/login |
❌ | Exchange Google ID token for a ForgePath JWT. Creates user on first login. |
GET |
/api/user/me |
✅ | Get authenticated user profile and subscription status. |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST |
/api/ai/analyse |
✅ | Upload resume PDF → returns ATS score, keyword gaps, and section analysis. Consumes 1 AI request. |
POST |
/api/ai/job-matcher |
✅ | Skills/resume → returns matched job roles with fit % and gap analysis. |
POST |
/api/ai/resume-build |
✅ | Form data → returns AI-enhanced resume content ready for PDF export. |
POST |
/api/ai/interview |
✅ | Skills/resume + round type (HR/Technical) → returns tailored interview questions. |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST |
/api/payment/checkout |
✅ | Create a Razorpay order for a given plan. Returns order_id. |
POST |
/api/payment/verify |
✅ | Verify Razorpay payment signature. Upgrades user plan in DB on success. |
Note: Free plan users are limited to 3 AI requests total, enforced server-side on every
/api/ai/*call.
| Technology | Purpose |
|---|---|
| React 19 + TypeScript | UI framework |
| Vite 8 | Build tool & dev server |
| Tailwind CSS 4 | Styling |
| React Router DOM 7 | Client-side routing |
@react-oauth/google |
Google OAuth |
| Axios | HTTP client |
| jsPDF | PDF resume export |
| React Hot Toast | Notifications |
| Lucide React | Icons |
| Technology | Purpose |
|---|---|
| Node.js + Express 5 | REST API server |
| TypeScript | Type safety |
| MongoDB + Mongoose | Database |
@google/genai (Gemini) |
AI features |
| Google APIs | OAuth verification |
JWT (jsonwebtoken) |
Authentication |
| Razorpay | Payment processing |
| Axios | HTTP requests |
cors + dotenv |
Middleware & config |
ForgePath/
├── app/ # Frontend (React + Vite)
│ ├── public/
│ └── src/
│ ├── assets/
│ ├── components/
│ │ ├── ctabanner.tsx
│ │ ├── features.tsx
│ │ ├── footer.tsx
│ │ ├── hero.tsx
│ │ ├── loading.tsx
│ │ ├── navbar.tsx
│ │ ├── pricing.tsx
│ │ ├── ProtectedRoutes.tsx
│ │ └── PublicRoutes.tsx
│ ├── context/
│ │ └── AppContext.tsx
│ ├── pages/
│ │ ├── Account.tsx
│ │ ├── Analyse.tsx
│ │ ├── BuildResume.tsx
│ │ ├── Home.tsx
│ │ ├── Interview.tsx
│ │ ├── JobMatcher.tsx
│ │ └── Login.tsx
│ ├── App.tsx
│ ├── main.tsx
│ ├── types.ts
│ └── utils.ts
│
└── server/ # Backend (Node.js + Express)
└── src/
├── config/
│ ├── db.ts
│ ├── googleconfig.ts
│ └── prompt.ts
├── controllers/
│ ├── ai.ts
│ ├── payment.ts
│ └── user.ts
├── middlewares/
│ ├── isAuth.ts
│ └── trycatch.ts
├── models/
│ └── User.ts
├── routes/
│ ├── ai.ts
│ ├── payment.ts
│ └── user.ts
└── index.ts
- Node.js ≥ 18
- MongoDB instance (local or Atlas)
- Google Cloud project with OAuth 2.0 credentials
- Gemini API key
- Razorpay account
git clone https://github.com/jaikishan1234/ForgePath.git
cd ForgePathcd serverCreate a .env file in the server/ root:
PORT=5000
# MongoDB
MONGO_URI=mongodb+srv://<user>:<password>@cluster.mongodb.net/forgepath
# Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# JWT
JWT_SEC=your_jwt_secret_key
# Gemini AI
API_KEY_GEMINI=your_gemini_api_key
# Razorpay
Razorpay_Key=your_razorpay_key_id
Razorpay_Secret=your_razorpay_secretInstall dependencies and run:
npm install
# Development (watch mode)
npm run dev
# Production build
npm run build
npm run startThe server runs at http://localhost:5000.
cd appCreate a .env file in the app/ root:
VITE_BACKEND_URL=http://localhost:5000
VITE_GOOGLE_CLIENT_ID=your_google_client_idInstall dependencies and run:
npm install
# Development
npm run dev
# Production build
npm run build
npm run previewThe app runs at http://localhost:5173.
| Plan | Price | Features |
|---|---|---|
| Free | ₹0 | 3 AI requests, ATS score report, basic job matches, 1 resume template, community support |
| Pro Monthly | ₹299/month | Unlimited resume analyses, full ATS report, unlimited job matching, all resume templates + PDF export, unlimited interview prep, email support |
| Pro 6-Month | ₹1,499 | Everything in Pro Monthly + early access to new features, weekly AI resume review, LinkedIn profile tips, dedicated support |
| Variable | Description |
|---|---|
PORT |
Backend server port (default: 5000) |
MONGO_URI |
MongoDB connection string |
GOOGLE_CLIENT_ID |
Google OAuth 2.0 Client ID |
GOOGLE_CLIENT_SECRET |
Google OAuth 2.0 Client Secret |
JWT_SEC |
Secret key for signing JWT tokens |
API_KEY_GEMINI |
Google Gemini AI API key |
Razorpay_Key |
Razorpay Key ID |
Razorpay_Secret |
Razorpay Key Secret |
| Command | Description |
|---|---|
npm run dev |
Run in watch mode (TypeScript + Node) |
npm run build |
Compile TypeScript to dist/ |
npm run start |
Start compiled production server |
| Command | Description |
|---|---|
npm run dev |
Start Vite dev server |
npm run build |
Type-check and build for production |
npm run preview |
Preview production build locally |
npm run lint |
Run ESLint |
- Push your repo to GitHub.
- Go to vercel.com → Add New Project → import your repo.
- Set Root Directory to
app. - Add environment variables in the Vercel dashboard:
VITE_BACKEND_URL=https://your-render-app-name.onrender.com VITE_GOOGLE_CLIENT_ID=your_google_client_id - Deploy. Vercel auto-deploys on every push to
main.
- Go to render.com → New Web Service → connect your repo.
- Set Root Directory to
server. - Set Build Command to
npm run build. - Set Start Command to
npm run start. - Add all environment variables from
.env.examplein the Render dashboard. - Set Node version to
18or higher.
Make sure your MongoDB Atlas cluster allows connections from
0.0.0.0/0(or Render's static IPs) under Network Access.
This project is licensed under the ISC License.
Built with ❤️ — Jaikishan Nayak











