.ts
MyLanguagePlayground
Back to Projects
Case Study
Completed

MyLanguagePlayground

Full-Stack Language School SaaS Platform

Role

Solo Full-Stack Developer

Year

2026

Tech Stack

12 Technologies

Status

Completed

Overview

Running a language school online means juggling enrollment payments, class scheduling, teacher assignment, grade tracking, and parent communication across five different tools. MyLanguagePlayground is a single platform that handles all of it — from Stripe enrollment payments to automatic class group formation, curriculum-driven session scheduling, a native in-app classroom with homework, quizzes, grading, and PDF certificates, plus dedicated portals for parents, teachers, and admins. Built solo across 25 database models and 5 documented build phases.

The Problem

Running a language school online is a coordination nightmare. Operators need to collect payments, assign students to teachers, schedule recurring classes, deliver lessons, track attendance and grades, send class reminders, issue certificates, and communicate with parents — all without a single platform built for this. Most schools stitch together Stripe, Google Classroom, spreadsheets, and WhatsApp groups. MyLanguagePlayground replaces the whole stack.

Screenshots

MyLanguagePlayground - Image 1
1 / 4

Challenges

01

Designing an enrollment flow that automatically assigns a teacher, places the student in the right class group, generates all curriculum sessions, and sends a receipt — all triggered by a single Stripe webhook.

02

Building a native in-app classroom to replace a planned Google Classroom integration after discovering that Google's OAuth scope verification requirements for Calendar and Classroom APIs were too slow to ship around.

03

Implementing an invisible grouping system that silently bins students into classes of up to 10 without parents ever managing groups — filling existing groups before creating new ones, automatically.

Solutions

01

Built a Stripe webhook handler that atomically activates the student, runs the teacher load-balancing algorithm, places the student in a group, generates all sessions, and sends a receipt email — all in one idempotent flow.

02

Built a full native classroom (announcements, homework with file submission, auto-graded quizzes, gradebook, flashcards, shared library) that eliminated the Google Classroom dependency entirely while shipping more features than the original plan.

03

Implemented a bin-packing grouping algorithm: on enrollment, find the best open group for this teacher, language, and level; if full or none exists, create one. All invisible to the parent.

Key Highlights

Invisible Auto-Grouping: Students are silently placed into class groups of up to 10, load-balanced across teachers — parents never manage groups, they just enroll and attend.

Native In-App Classroom: Full homework submissions, auto-graded quizzes, flashcard practice, shared library, gradebook, and lesson recaps — built natively after scrapping the Google Classroom integration.

PDF Certificates on Completion: pdf-lib generates A4 landscape certificates with school branding when a student finishes their programme — no third-party service needed.

Three Separate Portals: JWT-protected admin dashboard, passwordless magic-link parent portal, and passwordless teacher portal — each with audience-scoped tokens so a stolen token cannot be replayed across roles.

Scale & Scope

25

Database Models

5

Build Phases

3

Portals

Solo

Team Size

Technology Stack

Next.js 16
React 18
TypeScript 5
Tailwind CSS v4
MongoDB
Mongoose
Stripe
Nodemailer
pdf-lib
NextAuth.js
Framer Motion
Vercel

Outcome

Live at mylanguageplayground.com — a production-ready SaaS handling enrollment, Stripe payments, class scheduling, in-app learning, and certification for language schools operating online.