A comprehensive full-stack learning platform for IELTS instruction, built with modern technologies and real-time capabilities.
Idest is an English teaching platform specifically designed for IELTS instruction. It connects teachers and students in an interactive, modern learning environment with integrated tools for class management, online meetings, assignments, and AI-powered assessment.
This project represents a complete full-stack application built from scratch, incorporating cutting-edge technologies and architectural patterns. It was developed as an academic project at the University of Information Technology (UIT), VNU-HCM.
Traditional online learning platforms often lack the integrated tools needed for comprehensive language instruction. Idest addresses this by providing:
- Centralized class management for organizing students, teachers, and learning materials
- High-quality real-time video/audio meetings with interactive whiteboards for visual teaching
- Automated assessment for Reading and Listening skills, with AI-assisted grading for Writing and Speaking
- Seamless communication through real-time messaging for classes and individuals
- Integrated payment processing for course enrollment
This project has been an incredible learning journey, exposing me to a wide range of modern technologies and architectural patterns:
- Designing and implementing a hybrid architecture combining monolithic and microservice patterns
- Understanding when to use different architectural approaches based on requirements
- Service communication patterns: REST APIs, message queues, and reverse proxies
- Implementing WebSocket connections with Socket.IO for instant messaging
- Integrating WebRTC via LiveKit for high-quality video conferencing
- Building real-time collaborative features like whiteboards and live chat
- Leveraging OpenAI API for intelligent grading of Writing and Speaking assignments
- Creating context-aware AI chatbots that understand user queries
- Implementing AI-powered feedback systems following IELTS rubrics
- Working with PostgreSQL (relational) for structured data (users, classes, sessions)
- Using MongoDB (document-based) for flexible assignment content
- Understanding when to choose different database paradigms
- ORM/ODM patterns with Prisma and Mongoose
- Implementing asynchronous processing with RabbitMQ
- Building decoupled services that communicate via message queues
- Handling long-running tasks (like AI grading) without blocking user requests
- Implementing Supabase Authentication for secure user management
- JWT token validation and role-based access control
- WebSocket authentication and authorization
- Security best practices: Helmet.js, CORS, rate limiting
- Deploying services to Fly.io with Docker containers
- Managing environment variables and secrets
- Database migrations with Prisma
- Understanding cloud infrastructure and scaling considerations
- TypeScript for type safety across frontend and backend
- API documentation with Swagger/OpenAPI
- Code organization with modular architecture
- Testing strategies and best practices
Idest consists of three main components working together:
flowchart TB
subgraph Frontend["Frontend (Idest)"]
FE[Next.js App<br/>React + TypeScript]
end
subgraph Backend["Backend (Idest server)"]
API[NestJS API<br/>REST + WebSocket]
DB1[(PostgreSQL<br/>Prisma ORM)]
end
subgraph Microservice["Idest Assignment Service"]
MS[NestJS Microservice<br/>Assignment Management]
DB2[(MongoDB<br/>Mongoose)]
end
subgraph External["External Services"]
SUPA[Supabase<br/>Auth & Storage]
MQ[RabbitMQ<br/>Message Queue]
AI[OpenAI<br/>AI Grading]
LIVE[LiveKit<br/>Video Conferencing]
STRIPE[Stripe<br/>Payments]
end
FE -->|REST API| API
FE -->|WebSocket| API
FE -->|Auth| SUPA
API -->|SQL Queries| DB1
API -->|REST Proxy| MS
API -->|Messages| MQ
MS -->|Messages| MQ
MS -->|Document Queries| DB2
MS -->|AI Calls| AI
API -->|Auth Admin| SUPA
API -->|Video Tokens| LIVE
API -->|Payment Processing| STRIPE
- Next.js application with App Router
- React 19 with TypeScript
- Real-time WebSocket connections for live features
- Supabase authentication integration
- Responsive UI with TailwindCSS
- NestJS monolithic backend
- PostgreSQL database with Prisma ORM
- RESTful APIs with Swagger documentation
- WebSocket gateways for real-time features
- Integrates with external services (Supabase, LiveKit, Stripe)
- NestJS microservice
- MongoDB for flexible assignment content storage
- Handles all assignment-related operations
- AI-powered grading via OpenAI
- Communicates with main backend via REST and RabbitMQ
- REST APIs: Frontend communicates with backend via HTTP/JSON
- WebSocket: Real-time features (meetings, chat) use Socket.IO
- Message Queue: Asynchronous tasks handled via RabbitMQ
- Reverse Proxy: Backend proxies assignment requests to microservice
- Secure authentication with Supabase
- Role-based access control (Student, Teacher, Admin)
- User profiles with specialized fields for students and teachers
- Create and manage classes (group or one-on-one)
- Invite codes for easy enrollment
- Stripe integration for paid courses
- Member and teacher management
- High-quality video/audio conferencing via LiveKit
- Interactive whiteboard with Excalidraw
- Canvas drawing with Fabric.js
- Screen sharing capabilities
- Meeting recording support
- Real-time chat during sessions
- Reading: Multiple passage types with various question formats
- Listening: Audio-based comprehension exercises
- Writing: Task 1 and Task 2 with AI-powered grading
- Speaking: Part 1, 2, 3 questions with audio recording and AI assessment
- Automatic grading for Reading and Listening
- Detailed feedback and IELTS band scores
- Context-aware chatbot for user assistance
- Automated Writing and Speaking assessment
- Detailed feedback following IELTS rubrics
- Content generation for learning materials
- Direct messages between users
- Group conversations
- Class-specific chat rooms
- Meeting chat during sessions
- Message history and attachments
- Next.js (latest) - React framework with App Router
- React 19 - UI library
- TypeScript 5 - Type safety
- TailwindCSS 3.4 - Utility-first CSS
- Radix UI - Accessible component library
- Zustand - State management
- Socket.IO Client - WebSocket communication
- LiveKit Components - Video conferencing UI
- NestJS 11 - Progressive Node.js framework
- Prisma 6.10 - PostgreSQL ORM
- Mongoose 8.18 - MongoDB ODM
- Socket.IO 4.8 - WebSocket server
- Passport.js - Authentication middleware
- Swagger - API documentation
- PostgreSQL - Relational database for core data
- MongoDB Atlas - Document database for assignments
- LiveKit - WebRTC video infrastructure
- Socket.IO - WebSocket framework
- RabbitMQ (CloudAMQP) - Message queue
- OpenAI API - AI grading and chatbot
- Supabase - Authentication and storage
- Stripe - Payment processing
- Cloudinary - Image storage and CDN
- Fly.io - Container hosting
- Docker - Containerization
- Git - Version control
This repository contains three main components:
- Frontend Next.js application
- Main NestJS backend service
- Assignment microservice
Each component has its own README with detailed setup and installation instructions. See the individual READMEs for:
- Prerequisites and installation steps
- Environment variable configuration
- Running the application locally
- API documentation and endpoints
Contributors:
Supervisor:
- ThS. Trần Thị Hồng Yến - yentth@uit.edu.vn
Institution:
- University of Information Technology (UIT), VNU-HCM
MIT License
Copyright (c) 2025 Vu Phan & Hen Huynh
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.