Skip to content
EdTech · Online programming courses

Replacing a no-code stack with an in-house SaaS platform

The school had outgrown a site builder plus a course platform plus a messenger plus spreadsheets. We built a platform with an LMS, subscription billing, behavioural segmentation, protected video and a mobile PWA. Multi-tenant, so it scales to new schools.

+37%
student retention to the end of a course
+28%
revenue per student, through upsell
−85%
time to launch a new course
Project scenario

This is a representative build based on our expertise and stack. The architecture and the approaches are real. The metrics and the context are given as a reference point for projects of similar complexity, not as a delivered result.

Budget
mid seven figures in roubles
Duration
5 months
Team
5 people
Stack
FastAPI · PostgreSQL · Redis · Celery

About the client

An online programming school. 1,500 students a month across eight tracks: Python, JavaScript, Java, Go, mobile, DevOps, analytics and ML. The main acquisition channel is social advertising plus messenger channels.

The problem

The starting stack was the usual no-code combination:

  • a site builder for the track landing pages;
  • a course platform for the LMS, billing and mailing;
  • a messenger for talking to students and teachers;
  • spreadsheets for tracking payments, progress and homework.

That worked up to about 500 students a month. At 1,500 it started to break:

  • Students complained about access, because the course platform could not keep up with the integrations.
  • 35% of students never finished a course: no engagement mechanics, no automated triggers.
  • Launching a new course took two weeks of operational work to assemble the whole stack.
  • There was no honest way to calculate LTV or return on an acquisition channel.
  • At 1,500 students a month, payments needed manual reconciliation — four hours a day of a finance manager’s time.

What we built

An in-house LMS

Courses, modules, lessons, homework. A separate module for code review: a submission goes to the teacher with inline comments. A certificate is issued once 80% of the course is complete.

Subscription billing

Full billing with support for:

  • recurring payments and instant payment methods;
  • instalment plans through the providers the market uses;
  • promo codes, discounts and pricing plans;
  • refunds, including partial ones;
  • automatic renewal, and dunning on a failed payment.

Financial accounting is integrated natively, so the finance director sees revenue and LTV in one place rather than in a spreadsheet.

Behavioural segmentation and triggers

Students are segmented by behaviour: “has not logged in for three days”, “stuck on a module”, “past 80%”, “paid but never started”. Each segment gets automated triggers over messenger, email and push through the PWA:

  • reminders;
  • upsell offers — an advanced course, mentoring;
  • satisfaction surveys.

This is where the 37% retention gain comes from: the student does not quietly disappear, something reaches out.

Protected video

Integration with a video hosting platform that supports protection:

  • video cannot be downloaded by the usual means;
  • HLS with signed URLs;
  • viewing analytics — at which minute people leave, which segments get rewatched.

A mobile app as a PWA

Not native, because a native app does not pay for itself at this scale:

  • offline mode for lessons, through a service worker;
  • push notifications, through web push;
  • installable on iOS and Android from the browser;
  • five times cheaper to maintain than native.

Multi-tenant architecture

Designed in from the start: each school is a separate tenant with data isolation, its own branding, pricing and teachers. Three months after launch the client started a second school on the same platform, for marketing courses. Launching a new school takes a week rather than five months.

Stack

  • Backend: Python 3.12, FastAPI, SQLAlchemy with Alembic, Celery with Redis, structlog
  • Real-time: WebSocket for live lessons and teacher chat
  • Video: a hosting API with HLS streaming
  • Payments: a payment provider SDK, instant payments, instalments
  • Frontend: React 18 with TypeScript, Vite, TanStack Query, Radix UI, PWA
  • Push: Web Push with an FCM fallback

Results

  • 37% better retention to the end of a course, from 65% to 89%.
  • 28% higher LTV per student, through upsell into advanced courses.
  • 85% less time to launch a new course: from two weeks to a day of configuration in the admin panel.
  • 50% lower support costs: one senior support person instead of a team of four.
  • Payback in five months.

Twelve months in, the client is considering licensing the platform to other schools as white-label. At that point it is no longer “a studio built us a website”, it is a product.

What changes for each role

Moving off a no-code stack feels different depending on what someone does every day.

The product manager. Behavioural segmentation appears — “stuck on a module”, “away for three days” — along with triggered outreach over messenger and push. This is the real difference from ready-made platforms: the student is reached before they drop out, rather than counted after.

The finance director. Recurring payments, instalments, refunds and cohort LTV live in one system. Daily manual reconciliation between services does not shrink, it disappears, because there is nothing left to reconcile.

The head of marketing. End-to-end analytics from lead to LTV is built in, so return per acquisition channel is calculated honestly rather than estimated. The same segments drive the upsell mechanics, which previously had no data behind them.

The curriculum lead. Homework review with code review and inline teacher comments is the reason a programming school needs its own LMS at all. Certificates are issued automatically once the set share of the course is complete.

The technical director. Multi-tenant architecture, designed in on day one, pays for itself at the second school: it stands up in a week on the same platform. That turns the project from a website into a product with white-label potential.

The student. The PWA installs from the browser, lessons work offline, push reminders keep them in the course, and the video does not leak onto other platforms. For retention that matters more than any admin panel feature.

When this fits

  • EdTech with 500-plus students a month that has hit the ceiling of a no-code stack.
  • A subscription model with recurring payments, where proper financial analytics is needed.
  • Several tracks or schools, so multi-tenancy is an advantage.
  • A willingness to invest in owning the product rather than renting one.

A similar problem in your business?

In one call we will work out what this would be worth to you and which architecture fits.