Case study

Tutosh

Tutosh project preview

Overview

Tutosh is an e-learning platform built around two main products: an online marketplace where students can discover and book learning sessions, and a live classroom application where teachers and students interact during their sessions.

I was responsible for the Live Classroom part of the platform, including its backend, frontend, real-time features, and migration from the existing technology stack.

The Live Classroom was originally built with Express.js on the backend and jQuery on the frontend. I proposed migrating the application to NestJS and Angular to improve the structure and maintainability of the platform.

I led the migration and rebuilt the Live Classroom almost from scratch in less than three months.

Live Classroom

The Live Classroom provides teachers and students with an interactive environment for conducting live learning sessions.

The platform supports:

  • Live video streaming
  • Real-time chat
  • Interactive whiteboard
  • Interactive PDF editor
  • Multiple-choice questions (MCQ)
  • Screen sharing
  • Student management

The goal was to provide teachers with the tools they needed to conduct an online class without relying on separate applications for each activity.

Interactive session

Platform Migration

When I joined the Live Classroom project, the existing application was built with:

  • Express.js backend
  • jQuery frontend

I proposed migrating the backend to NestJS and the frontend to Angular.

The migration was not limited to changing frameworks. I rebuilt the application architecture and its core features while keeping the existing product requirements and classroom experience.

I completed the migration in less than three months, effectively rebuilding the Live Classroom from the ground up.

Legacy stack

The new architecture provided a more structured codebase and made the application easier to maintain and extend.

Backend Architecture

The Live Classroom backend was rebuilt using NestJS with a microservices architecture.

The system used GraphQL for communication between the frontend and backend services.

PostgreSQL was used as the primary database, with TypeORM handling database access and entity management.

The backend was designed to handle the real-time and collaborative nature of live classroom sessions while keeping the different parts of the system separated.

GraphQL · Socket.IO

Live Video & Real-Time Communication

The platform used OpenVidu for live video communication.

Each new classroom session could trigger the creation of a dedicated OpenVidu container.

This approach allowed classroom resources to be created per session and provided a foundation for scaling the live classroom infrastructure as the number of concurrent sessions increased.

Real-time communication between users and the classroom was handled using Socket.IO.

Interactive Learning Tools

The classroom was more than a video call.

Teachers and students could interact through several collaborative tools.

Interactive Whiteboard

Teachers and students could work on a shared whiteboard during the session.

PDF Editor

Teachers could use interactive PDF documents during the classroom session and work with students directly on the material.

MCQ

Teachers could create and run multiple-choice questions during a live session and use them as an interactive learning activity.

Screen Sharing

Teachers could share their screen with students during the session.

Chat

A real-time chat allowed teachers and students to communicate during the classroom.

Student Management

Teachers could manage students participating in the live session and control the classroom experience.

Session Infrastructure

A dedicated OpenVidu container was created when a new classroom session was started.

This approach isolated live classroom resources between sessions and allowed the infrastructure to create additional classroom environments as required.

It also reduced the dependency on a single shared live classroom instance for all sessions.

On session start

My Role

Full-Stack Developer

I was responsible for the Live Classroom application and led its migration from the existing technology stack to the new architecture.

My responsibilities included:

  • Proposing the migration from jQuery to Angular
  • Proposing the migration from Express.js to NestJS
  • Designing the new Live Classroom architecture
  • Rebuilding the frontend with Angular
  • Rebuilding the backend with NestJS
  • Implementing the microservices architecture
  • Working with GraphQL
  • Designing and working with PostgreSQL and TypeORM
  • Integrating OpenVidu
  • Implementing real-time communication with Socket.IO
  • Developing the interactive classroom features
  • Implementing session management
  • Working on the dynamic OpenVidu container creation
  • Testing and troubleshooting the migrated application

I completed the migration in less than three months, effectively rebuilding the Live Classroom from the ground up while preserving its core functionality.

Technology

Frontend

  • Angular
  • TypeScript

Backend

  • NestJS
  • Node.js
  • Microservices
  • GraphQL

Database

  • PostgreSQL
  • TypeORM

Real-Time & Video

  • OpenVidu
  • Socket.IO

Original Stack

  • Express.js
  • jQuery