EduCore is a full-stack EdTech platform with a premium glassmorphic UI, JWT authentication, interactive course learning flows, quizzes, progress tracking, admin management tools, and deployment-ready service integrations.
The project is built as a monorepo with separate frontend/ and backend/ apps.
- Premium React + Tailwind + Framer Motion interface
- Full-stack monorepo structure with separate frontend and backend folders
- JWT authentication with
studentandadminroles - Course catalog, course detail, lesson playback, quizzes, and progress tracking
- Student dashboard with resume-learning flow
- Admin panel for course, module, and quiz management
- Stripe-ready checkout flow with demo fallback
- Cloudinary-ready upload flow with local fallback
- PDF certificate generation for completed courses
- MongoDB support with memory-mode fallback for local development
frontend/: Vite + React + Tailwind CSS + Framer Motionbackend/: Express + MongoDB/Mongoose + JWT auth + service integrationsscripts/: root-level helpers, including the monorepo dev runner
- Frontend: React, Vite, Tailwind CSS, Framer Motion, React Router
- Backend: Node.js, Express, MongoDB, Mongoose
- Authentication: JWT
- Integrations: Stripe, Cloudinary, PDFKit
- Browse courses
- View course details
- Enroll through checkout flow
- Watch video lessons
- Take quizzes
- Track progress
- Resume learning
- Download completion certificates
- Create courses
- Add modules
- Add quizzes
- Manage users
- Upload media assets
EduCore ships with demo content including:
- 10 demo courses
- 3 to 5 learning modules per course
- 5 quiz questions per course
- demo student and admin accounts
- Student:
student@educore.com / Password123! - Admin:
admin@educore.com / Password123!
- Install packages:
npm install- Create backend environment variables:
cp backend/.env.example backend/.env- Optionally create frontend environment variables:
cp frontend/.env.example frontend/.env- Start the full stack app:
npm run devThe Vite frontend runs on http://127.0.0.1:5173 and the API runs on http://localhost:8080.
At the repo root:
npm run dev
npm run build
npm run lint
npm run start
npm run seednpm run seedIf MongoDB is unavailable, the backend still starts in demo memory mode so the UI remains explorable during development.
Defined in backend/.env:
PORTCLIENT_URLMONGODB_URIJWT_SECRETJWT_EXPIRES_INSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETCLOUDINARY_CLOUD_NAMECLOUDINARY_API_KEYCLOUDINARY_API_SECRET
Defined in frontend/.env:
VITE_API_BASE_URL
- Stripe:
add
STRIPE_SECRET_KEYto enable real Stripe Checkout sessions - Cloudinary: add Cloudinary credentials to enable hosted media uploads
- MongoDB:
add
MONGODB_URIto persist users, courses, payments, and progress in a real database
Without these keys, EduCore still works in local development using safe fallback behavior where applicable.
Implemented:
- frontend and backend monorepo structure
- modern landing page and themed UI
- auth, dashboard, quizzes, progress, admin panel
- checkout flow, media upload flow, certificate generation
Still ideal to add for full production hardening:
- Stripe webhook verification
- forgot-password / reset-password flow
- email verification
- refresh-token/session hardening
- rate limiting and security middleware
See DEPLOYMENT.md for deployment notes.