Modern, full‑stack tutoring and course marketplace inspired by Udemy. Designed for clean UX, fast discovery, and data‑driven course pages with real calculations for sections, lectures, and total hours.
- Overview
- What Users Can Do
- Core Features
- Tech Stack
- Monorepo Layout
- Quick Start
- Environment Variables
- Run & Build
- API Highlights
- Data Model
- Architecture Notes
- Roadmap
- Contact
Journal enables students to browse, preview, and enroll in courses, while tutors create, publish, and manage content. Course pages pull real data from the database and compute totals directly from modules and lectures—no hardcoded numbers.
- Discover courses with search and filters
- Preview course content before enrolling
- See real totals (sections, lectures, hours)
- Enroll in free courses instantly or pay for premium courses
- Access enrolled content from the student dashboard
- Create courses with modules and lectures
- Upload thumbnails and media assets
- Publish, unpublish, and archive courses
- Track learners and performance
- Show a public tutor profile with avatar, bio, and course list
- Course catalog with search, category, and level filters
- Udemy‑style preview pages (stats, highlights, content outline)
- Enrollment (free + paid)
- Tutor profiles with published courses
- Role‑based authentication and protected routes
- Module/lecture hierarchy with duration calculations
- Cloudinary media uploads
- Frontend: Next.js, React, Tailwind CSS, React Icons, Axios
- Backend: Node.js, Express, MongoDB (Mongoose), JWT, Cloudinary
- client/
- admin-app/ (Next.js admin)
- main-app/ (Next.js main app)
- server/ (Express + MongoDB API)
git clone <repo-url>
# server
cd server
npm install
# client
cd ../client/main-app
npm installCreate server/.env:
PORT=5000
MONGO_URI=your_mongodb_uri
JWT_SECRET=your_secret
CLOUDINARY_CLOUD_NAME=...
CLOUDINARY_API_KEY=...
CLOUDINARY_API_SECRET=...
RAZORPAY_KEY_ID=... # if payments enabled
RAZORPAY_KEY_SECRET=... # if payments enabled
Backend:
cd server
node server.jsFrontend (main app):
cd client/main-app
npm run dev # http://localhost:3000
npm run build && npm run start- Base URL: http://localhost:5000/api
- Courses: GET /courses (list), GET /courses/:id (detail with modules, lectures, tutor)
- Enrollment: GET /enrollments/check/:id, POST /enrollments
- Tutor profile: GET /auth/users/:id (tutor + their courses)
- User: name, email, role, avatar, bio
- Course: title, description, price, level, thumbnail, tutor, modules, ratings, enrolledStudents
- Module: title, description, order, lectures
- Lecture: title, description, duration (seconds), videoUrl, isPreview
- REST API with Express and Mongoose
- Role‑based access control with JWT
- Media storage via Cloudinary
- UI data is fully server‑driven (no hardcoded totals)
- Payments UI/flow hardening
- Reviews and ratings UI
- Better analytics on tutor dashboard
- Project: https://github.com/TheForgeDevs/Journal (replace with actual repo)
- Author: add your name/email/social here