Ready-to-publish GitHub monorepo project for portfolio and interviews: an online course platform with user roles, access control, admin moderation, and payment business logic.
backend:Node.js + Express + TypeScript + Prisma + PostgreSQL + JWTfrontend:React + TypeScript + Vite + React Router- Roles:
ADMIN,TEACHER,STUDENT
- Teacher creates a course.
- Teacher submits it for moderation.
- Admin approves or rejects the course.
- Student buys published courses.
- Role-based access control.
- Course workflow:
DRAFT -> REVIEW -> PUBLISHED/REJECTED. - Only published courses can be purchased.
- Students cannot buy their own courses.
- Duplicate purchase is blocked.
- Transactional purchase logic:
- Student balance is debited.
- Teacher receives payout after platform fee.
- Enrollment and wallet transactions are created atomically.
src/modules/auth: register, login, me.src/modules/courses: create/edit/submit/retrieve courses.src/modules/payments: course purchase and transaction history.src/modules/admin: moderation queue, role management, stats.src/middlewares/auth.ts: JWT auth + role guards.src/middlewares/error-handler.ts: centralized error handling.
docker compose up -dcp backend/.env.example backend/.env
cp frontend/.env.example frontend/.envnpm installnpm run db:generate
npm run db:migrate
npm run db:seednpm run dev- Frontend:
http://localhost:5173 - Backend:
http://localhost:4000/api
- Admin:
admin@platform.dev/Password123! - Teacher:
teacher@platform.dev/Password123! - Student:
student@platform.dev/Password123!
POST /api/auth/registerPOST /api/auth/loginGET /api/auth/meGET /api/courses/publicPOST /api/courses(TEACHER)POST /api/courses/:courseId/submit(TEACHER)POST /api/payments/courses/:courseId/purchase(STUDENT)GET /api/admin/review-courses(ADMIN)POST /api/admin/courses/:courseId/approve(ADMIN)POST /api/admin/courses/:courseId/reject(ADMIN)
- Non-trivial business logic instead of simple CRUD.
- Permission boundaries with RBAC.
- Transactional data integrity for payments.
- Modular production-like backend architecture.
- End-to-end fullstack implementation from DB to UI.