Live Website: https://b11a11-educore.web.app/
Server URL: https://b11a11-educore-server.vercel.app
- Client: EduCore-Client
- Server: EduCore-Server
To run the project locally on your machine, follow these steps carefully:
git clone https://github.com/arifuddincoder/educore_clientside.git
cd educore_clientside
npm install
npm run dev
git clone https://github.com/arifuddincoder/educore_serverside.git
cd educore_serverside
npm install
npm run dev
✅ Note: The client will not function properly unless the server is running.
So make sure the server is started before using the client.
Create a .env
file in both the client and server directories.
For client:
VITE_API_URL=http://localhost:5000
VITE_FIREBASE_API_KEY=your_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_bucket
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_id
For server:
PORT=5000
DB_USER=your_mongo_user
DB_PASS=your_mongo_pass
FB_SERVICE_KEY=base64_encoded_service_account_json
If there are .env.example
files, copy them as .env
and fill in the correct values.
Now you're all set!
- Server should run at
http://localhost:5000
- Client should run at
http://localhost:5173
EduCore is a full-stack Course Management System that allows users to browse, enroll, and manage educational courses in a clean and modern UI. It includes Firebase authentication, Firebase-based login (Email/Google/GitHub), protected routes, course management, seat-limit validation, and dynamic filtering.
The main purpose of EduCore is to simulate a real-world course management system where users can explore educational content, enroll in courses, and manage their learning activities.
It aims to:
- Solidify the understanding of full-stack development concepts (React + Express + MongoDB)
- Apply Firebase Authentication and Firebase-based authorization
- Implement secure CRUD operations and protected APIs
- Practice advanced React features like dynamic routing, loaders, and context
- Ensure responsive and accessible design using TailwindCSS
- Provide a polished user experience with notifications, animations, and modern UI/UX patterns
This project was developed as a part of Programming Hero’s Assignment-11 to reflect real-life use-cases and demonstrate production-level quality.
- User Registration with Firebase + Validation
- Email/Password, Google, and GitHub login
- Protected routes using
PrivateRoute
- Add/Edit/Delete Courses (CRUD)
- Enroll/Unenroll in courses (Max 3, Seat Limit enforced)
- Display of Latest & Popular Courses
- "My Enrolled Courses" & "Manage Courses" Dashboard
- Fully Responsive Layout
- Clean UI/UX with TailwindCSS
- Dynamic Route Title & Toast Notifications
- 404 Page, Loading Spinners, and Newsletter UI
- MongoDB + Express backend with Firebase Token
/
- Home (with Banner, Latest, Popular, Testimonials, Categories)/courses
- All Courses/course-details/:id
- Course Details with Enroll button/contact
- Contact Page/login
- Login with social logins/register
- Registration page
/add-course
- Add new course (Author only)/edit-course/:id
- Edit existing course (Author only)/manage-courses
- All courses added by logged-in user/my-courses
- Enrolled courses of the user
- Firebase Authentication with updateProfile
verifyFirebaseToken
&verifyTokenEmail
middlewares on server
- react
- react-dom
- react-router
- firebase
- react-hot-toast
- react-icons
- sweetalert2
- react-slick
- swiper
- react-tooltip
- react-simple-typewriter
- react-spinners
- tailwindcss
- daisyui
- @tailwindcss/vite
- eslint, @eslint/js, eslint-plugin-react-hooks, eslint-plugin-react-refresh
- vite, @vitejs/plugin-react
- express
- cors
- dotenv
- firebase-admin
- mongodb
- Firebase Admin initialized from
.env
encoded service key:
const decoded = Buffer.from(process.env.FB_SERVICE_KEY, "base64").toString("utf8");
const serviceAccount = JSON.parse(decoded);
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });
- MongoDB connected via URI using
process.env.DB_USER
andprocess.env.DB_PASS
- Token Verification Middleware:
const verifyFirebaseToken = async (req, res, next) => { /* ... */ }
const verifyTokenEmail = async (req, res, next) => { /* ... */ }
POST /api/jwt
- Generate tokenGET /api/courses
- Fetch courses with?filter=recent|popular
GET /api/courses/:id
- Course details with author infoPOST /api/courses
- Add coursePATCH /api/edit-course/:id
- Update courseDELETE /api/delete-course/:id
- Delete courseGET /api/my-courses?email=&filter=recent
- Own coursesPOST /api/enroll
- Enroll / Unenroll (toggle)GET /api/is-enrolled
- Check if enrolledGET /api/my-enrollments?email=
- Enrolled coursesPOST /api/users
- Register user (check+create)
Md Arif Uddin
📧 arifuddincoder@gmail.com
Assignment-11 Project for Programming Hero
- All routes work on reload (SPA)
- Firebase auth domain added
- No CORS/504 errors in production
- Mobile responsive and modern design
Thank you Programming Hero for the challenge & guidance!
⚡ Inspired by real-world platforms like Coursera & Udemy.