Skip to content

jaikishan1234/ForgePath

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚒️ ForgePath

AI-Powered Career Growth Platform

Analyze your resume, discover matching opportunities, build stronger applications, and prepare for interviews — all from one intelligent platform.

Live Demo React TypeScript Node.js MongoDB Gemini AI


📋 Table of Contents


📸 Screenshots

🏠 Landing Page

ForgePath Landing Page

Hero section with feature highlights, pricing plans, and CTA — dark themed with orange accent.


🔐 Login

Login Page

One-click Google OAuth sign-in. No passwords required.


📄 Resume Analyzer

Resume Analyzer

Upload your PDF resume (max 5MB) for ATS scoring, keyword analysis, and actionable improvement suggestions.


💼 Job Matcher

Enter Skills Manually Upload Resume
Job Matcher Manual Job Matcher Upload

Discover job roles matched to your skillset. Input skills manually or extract them directly from your resume PDF.


🏗️ Resume Builder

Build From Scratch Improve Existing Resume
Resume Builder Form Resume Builder Improve

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.


🎤 Interview Prep

HR Round (Manual) Technical Round (Manual) Upload Resume
Interview HR Manual Interview Tech Manual Interview Upload

Generate tailored interview questions for HR or Technical rounds. Enter your skills manually or let AI parse your resume.


👤 Account Page

Free Plan Pro Plan
Account Free Account Pro

Manage your subscription. Free users see remaining AI request quota; Pro users see their plan expiry date.


✨ Features

  • 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

🏛️ Architecture

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
Loading

Key design decisions:

  • JWT auth — stateless tokens; isAuth middleware gates all protected routes
  • Usage quota — stored on the User model 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

📡 API Overview

Base URL: https://<your-backend-domain>/api

All protected routes require the header:

Authorization: Bearer <jwt_token>

Auth — /api/user

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.

AI — /api/ai

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.

Payments — /api/payment

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.


🛠️ Tech Stack

Frontend (/app)

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

Backend (/server)

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

📁 Project Structure

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

🚀 Getting Started

Prerequisites

  • Node.js ≥ 18
  • MongoDB instance (local or Atlas)
  • Google Cloud project with OAuth 2.0 credentials
  • Gemini API key
  • Razorpay account

1. Clone the Repository

git clone https://github.com/jaikishan1234/ForgePath.git
cd ForgePath

2. Backend Setup

cd server

Create 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_secret

Install dependencies and run:

npm install

# Development (watch mode)
npm run dev

# Production build
npm run build
npm run start

The server runs at http://localhost:5000.


3. Frontend Setup

cd app

Create a .env file in the app/ root:

VITE_BACKEND_URL=http://localhost:5000
VITE_GOOGLE_CLIENT_ID=your_google_client_id

Install dependencies and run:

npm install

# Development
npm run dev

# Production build
npm run build
npm run preview

The app runs at http://localhost:5173.


💳 Pricing

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

🔐 Environment Variables Reference

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

📦 Available Scripts

Backend

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

Frontend

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

🌐 Deployment

Frontend → Vercel

  1. Push your repo to GitHub.
  2. Go to vercel.comAdd New Project → import your repo.
  3. Set Root Directory to app.
  4. 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
    
  5. Deploy. Vercel auto-deploys on every push to main.

Backend → Render

  1. Go to render.comNew Web Service → connect your repo.
  2. Set Root Directory to server.
  3. Set Build Command to npm run build.
  4. Set Start Command to npm run start.
  5. Add all environment variables from .env.example in the Render dashboard.
  6. Set Node version to 18 or higher.

Make sure your MongoDB Atlas cluster allows connections from 0.0.0.0/0 (or Render's static IPs) under Network Access.


📄 License

This project is licensed under the ISC License.


Built with ❤️ — Jaikishan Nayak

🌐 Live Site

Releases

No releases published

Packages

 
 
 

Contributors

Languages