Open source · E-learning platform
TutorTrek
An open-source e-learning platform where teachers publish video courses and students learn at their own pace, now widely used by developers as a learning reference.
- GitHub stars
- 120+
- Forks
- 50+
Problem
Teachers need a simple way to publish video courses, and students need one place to find and watch them, with separate experiences for teachers, students and administrators.
What I built
- Teacher and student registration and login, with JWT authentication and OAuth social sign-in
- A teacher dashboard to upload and manage courses and track progress
- A student dashboard to browse and watch courses
- An admin panel for managing users, courses and system settings
- Video and media uploads through Multer and Cloudinary, and transactional email through Nodemailer
Technical highlights
- Clean architecture on the backend, keeping domain logic independent of Express and MongoDB
- Redis caching for frequently read data
- Security hardening with Helmet headers, MongoDB query-injection sanitisation and schema validation
- Nginx configuration for running the full stack behind a reverse proxy
- Later adapted into a production e-learning platform for a freelance client
Key decisions
- 01
Clean architecture from day one
Use cases sit apart from Express and MongoDB, so business logic is testable on its own and the infrastructure can change without rewriting it. I chose it deliberately to practise production-grade structure, and it kept the codebase maintainable as features grew. That structure is also what made it adaptable for a real client later.
- 02
Cloudinary for course media
Large course videos are uploaded through Multer and stored and delivered by Cloudinary, which keeps heavy media off the API server.
- 03
Redis in front of MongoDB
Frequently read data is served from Redis, taking repeated load off the database.
Hardest problems
- Handling large video uploads and smooth playback
- Three roles (teacher, student and admin), each with its own flows and permissions
- Secure authentication with JWT and OAuth social sign-in
- Caching with Redis without serving stale data
Architecture
- React + Redux client
- Nginx reverse proxy
- Express API · Clean architecture
- MongoDB · Redis · Cloudinary
Stack
- TypeScript
- React
- Redux
- Tailwind CSS
- Node.js
- Express.js
- MongoDB
- Redis
- Docker
- Nginx