Full-stack Indian course comparison platform with AI-powered recommendations, admin panel, reviews, and domain chat.
- Frontend: React 19 + Vite + Redux Toolkit + Tailwind (deploy on Netlify)
- Backend: Express + MongoDB + Socket.IO (deploy on Render)
course_comparator/
├── backend/ # Express API
└── frontend/ # React SPA
cd backend
cp .env.example .env # fill in your values
npm install
npm run dev # http://localhost:9000cd frontend
cp .env.example .env # VITE_BACKEND_URL=http://localhost:9000
npm install
npm run dev # http://localhost:3000cd backend
npm run seed| Variable | Description |
|---|---|
PORT |
Server port (default 9000) |
MONGO_URI |
MongoDB connection string |
JWT_SECRET |
Auth token secret |
GEMINI_API_KEY |
Google Gemini API key (AI recommendations) |
CLOUDINARY_* |
Image upload credentials |
FRONTEND_URL |
Production frontend URL (CORS) |
| Variable | Description |
|---|---|
VITE_BACKEND_URL |
Backend API URL |
- Connect repo, set root directory to
backend - Build command:
npm install - Start command:
npm start - Add env vars from
backend/.env.example(use production values) - Required for AI:
GEMINI_API_KEY— copy the same key from your local.envinto Render → Environment - Required for CORS:
FRONTEND_URL=https://course-comparator.netlify.app(or your Netlify URL)
- Connect repo, set base directory to
frontend - Build command:
npm run build - Publish directory:
dist - Set
VITE_BACKEND_URLto your Render backend URL
SPA routing is handled via frontend/public/_redirects.
- Browse courses by section (Tech, Skills, School, Competitive Exams)
- Search, filter, and sort courses
- AI Smart Course Finder (Gemini-powered recommendations)
- User auth, reviews, affiliate link tracking
- Admin panel (users, courses, domains, sections)
- Domain chat (Socket.IO)
Never commit .env files. Use .env.example as a template. Rotate any keys that were previously committed to git.