Образовательная платформа — это не просто видео плюс текст. Это связка из каталога, плеера, системы прогресса, ДЗ, оплаты подписки и сертификации. Посмотрим, как это собирается и где обычно проседают MVP.
Каталог курсов
Каталог должен решать две задачи: помочь выбрать (фильтры по теме, уровню, длительности, цене) и продать. Карточка курса — программа, длительность, преподаватель, отзывы выпускников, что после курса. Если курс с потоковым форматом — следующий старт и количество мест.
На Next.js каталог делается через SSG с ревалидацией: новый курс добавляется в админке, страница пересобирается. Поиск — Meilisearch или Postgres FTS, в зависимости от объёма. Для больших каталогов (1000+ курсов) рекомендуем Meilisearch с triggers на синхронизацию.
Плеер уроков и прогресс
Плеер — критический компонент. Что должно быть: качество (240p-1080p), скорость (0.75x-2x), субтитры, конспект урока рядом, кнопка «следующий урок», запоминание позиции при перезагрузке.
Хранение видео — отдельная история. Загрузка напрямую в S3 не работает: нужен HLS-стриминг с адаптивным битрейтом. Для РФ-инфраструктуры это VK Cloud Video, Yandex Cloud Video или собственный pipeline на ffmpeg + nginx-rtmp + S3 для сегментов.
Прогресс пользователя — Postgres. Структура: user_id, lesson_id, progress_percent, completed_at. На фронте — оптимистичные обновления через React 19 Actions, на бэке — Server Components читают актуальный прогресс из БД.
Домашние задания и проверка
ДЗ бывают разные: тесты с автопроверкой, код с автотестами, эссе с проверкой ментором. Каждый формат — отдельная подсистема. Тесты — JSON в БД и React-компонент. Код — sandbox (Docker-контейнер с лимитом CPU/памяти) и набор тестов. Эссе — форма загрузки, очередь на проверку ментору, обратная связь.
Геймификация (баллы, ачивки, лидерборд) — спорная вещь. В B2C для подростков работает, в B2B для взрослых — раздражает. Не делайте её «потому что у конкурентов есть».
Оплата и подписка
Модели монетизации: разовая оплата за курс, подписка на доступ ко всему каталогу, freemium с платными «продвинутыми» уроками. Технически сложнее всего подписка: нужны рекуррентные платежи, отмена, заморозка, апгрейд тарифа.
В РФ это ЮKassa, Тинькофф Касса, CloudPayments — все умеют рекуррентные платежи. СБП пока не поддерживает рекуррентность для большинства банков, но это меняется. Ваш бэкенд хранит токен карты (через PCI-compliant провайдера), запускает списания по cron, обрабатывает отказы.
Сертификаты
Сертификат после прохождения курса — важный мотиватор. Технически: PDF с уникальным номером, QR-код с ссылкой на страницу проверки /cert/<uuid>, где видна информация о курсе и выпускнике (с его согласия). Генерация — на сервере через PDFKit или Puppeteer.
Если сертификат имеет юридический вес (профессиональная переподготовка) — нужна дополнительная обвязка: реестр в Рособрнадзоре, лицензия на образовательную деятельность, специальные формы документов.
Производительность и масштаб
EdTech-нагрузка пиковая: всплески при старте новых потоков. Архитектура должна выдерживать 10x от среднего: Redis для кеша, CDN для видео и статики, горизонтальное масштабирование Node/Go воркеров.
Стек, который мы используем: Next.js 15 на фронте, Go или NestJS на бэке, Postgres + Redis, S3-хранилище, Yandex Cloud или Selectel для инфраструктуры.
Итого
EdTech-платформа — это связка из 4-5 крупных подсистем (каталог, плеер, прогресс, оплата, проверка ДЗ), каждая из которых требует отдельного проектирования. MVP за 3-4 месяца и 2-3 миллиона рублей — реальный сценарий. Полноценный продукт с подпиской и менторами — 6-9 месяцев и 5-10 миллионов.
Частые вопросы
Как устроен каталог курсов на образовательной платформе?
Каталог должен решать две задачи: помочь выбрать (фильтры по теме, уровню, длительности, цене) и продать. Карточка курса — программа, длительность, преподаватель, отзывы выпускников, что после курса. Если курс с потоковым форматом — следующий старт и количество мест. На Next.js каталог делается через SSG с ревалидацией: новый курс добавляется в админке, страница пересобирается. Поиск — Meilisearch или Postgres FTS, в зависимости от объёма. Для больших каталогов (1000+ курсов) рекомендуем Meilisearch.
Как технически устроен видеоплеер для курсов?
Плеер — критический компонент. Что должно быть: качество (240p-1080p), скорость (0.75x-2x), субтитры, конспект урока рядом, кнопка «следующий урок», запоминание позиции при перезагрузке. Хранение видео — отдельная история. Загрузка напрямую в S3 не работает: нужен HLS-стриминг с адаптивным битрейтом. Для РФ-инфраструктуры это VK Cloud Video, Yandex Cloud Video или собственный pipeline на ffmpeg + nginx-rtmp + S3 для сегментов. Без HLS видео плохо работает на медленных сетях.
Как реализовать прогресс пользователя по курсу?
Прогресс пользователя — Postgres. Структура: user_id, lesson_id, progress_percent, completed_at. На фронте — оптимистичные обновления через React 19 Actions, на бэке — Server Components читают актуальный прогресс из БД. Это даёт мгновенный отклик при отметке урока пройденным и при этом надёжность данных. Прогресс — основа геймификации и мотивации продолжать обучение. Без него пользователи теряют ощущение продвижения и чаще бросают курсы на середине.
Как организовать домашние задания и проверку?
ДЗ бывают разные. Тесты с автопроверкой — JSON в БД и React-компонент. Код с автотестами — sandbox (Docker-контейнер с лимитом CPU/памяти) и набор тестов. Эссе с проверкой ментором — форма загрузки, очередь на проверку ментору, обратная связь. Геймификация (баллы, ачивки, лидерборд) — спорная вещь. В B2C для подростков работает, в B2B для взрослых раздражает. Не делайте её «потому что у конкурентов есть» — оценивайте по реальной пользе для аудитории.
Как реализовать оплату подписки на образовательной платформе?
Модели монетизации: разовая оплата за курс, подписка на доступ ко всему каталогу, freemium с платными «продвинутыми» уроками. Технически сложнее всего подписка: нужны рекуррентные платежи, отмена, заморозка, апгрейд тарифа. В РФ это ЮKassa, Тинькофф Касса, CloudPayments — все умеют рекуррентные платежи. СБП пока не поддерживает рекуррентность для большинства банков. Ваш бэкенд хранит токен карты (через PCI-compliant провайдера), запускает списания по cron, обрабатывает отказы.
Как сделать сертификаты после прохождения курса?
Сертификат после прохождения курса — важный мотиватор. Технически: PDF с уникальным номером, QR-код с ссылкой на страницу проверки /cert/UUID, где видна информация о курсе и выпускнике (с его согласия). Генерация на сервере через PDFKit или Puppeteer. Если сертификат имеет юридический вес (профессиональная переподготовка) — нужна дополнительная обвязка: реестр в Рособрнадзоре, лицензия на образовательную деятельность, специальные формы документов. Без юридической силы сертификат — это просто красивая бумажка для мотивации.