This is an EdTech platform. Here, anyone can sign up as a Student or an Instructor.
Catagories are being set prior by Admin only.
Instructors can add courses under a particular category and upload video lectures topic-wise. They will have a seperate dashboard where they can check all details and statistics about their own courses i.e how many students are enrolled in that course or what's the total earnings etc.
Courses will be available in the Catalog section under their respective catagories.
Students can go to the Catalog section and buy any course of a specific category. After successful payment, the course will be available in the enrolled courses section of the student dashboard. From there student can open the video lectures and watch the videos and progress of videos will also be saved. Besides, enrolled students can also give rating and reviews to that course.
Students can also add several courses to their cart and pay for all of them in a single order.
The All Courses page searches across every published course by name, description or tag, and filters by category and price, with sorting and pagination.
Payment will be done through Razorpay gateway where multiple ways of payment are present.
Both student and instructor can view, edit and save their profiles and upload profile picture in Settings and if required can also delete their account.
Admins get their own dashboard with platform wide totals, and manage the categories that every course sits under.
There is deliberately no admin signup route, since an endpoint that creates admins stays a hole in the API even when it is guarded by a secret. An admin is created by running the script once against the database:
cd server
MONGODB_URL="<your mongodb uri>" \
ADMIN_EMAIL="[email protected]" ADMIN_PASSWORD="<strong password>" \
ADMIN_FIRST_NAME="Your" ADMIN_LAST_NAME="Name" \
npm run create:adminIf that email already belongs to a user, that user is promoted to Admin instead of a second account being created.
The server needs MONGODB_URL, JWT_SECRET, the Cloudinary keys (CLOUD_NAME, API_KEY, API_SECRET, FOLDER_NAME), the Razorpay keys (RAZORPAY_KEY, RAZORPAY_SECRET) and the mail settings (MAIL_HOST, MAIL_USER, MAIL_PASS) in server/.env. CORS_ORIGIN is optional and takes a comma separated list of allowed frontend origins; http://localhost:3000 is always allowed.
The frontend needs REACT_APP_BASE_URL and REACT_APP_RAZORPAY_KEY.
The server runs on Node 22 (server/.node-version). Node 24 removed SlowBuffer, which jsonwebtoken still reaches for through a transitive dependency, so the server cannot start on anything newer.
npm run dev # frontend and backend together
npm test # frontend tests
cd server && npm test # backend tests