Врач-аллерголог-иммунолог с частной практикой хотел монетизировать экспертизу: продавать коллегам видеокурсы по своей специализации.
Готовые платформы для онлайн-курсов не подошли по трём причинам: комиссия с каждой продажи, чужой домен вместо собственного бренда и невозможность подстроить логику доступа под себя. Нужна была своя платформа.
Требования к платформе:
— каталог курсов с описанием программы и преподавателя;
— приём оплаты банковской картой на сайте, без переадресации на сторонние сервисы;
— автоматическая выдача доступа сразу после подтверждения платежа, без ручной проверки;
— личный кабинет ученика с прогрессом по курсу;
— защита видеоматериалов от свободного скачивания;
— корректная работа с мобильных — большая часть аудитории смотрит уроки с телефона;
— возможность заводить новые курсы самому, без обращения к разработчику.
Отдельное условие — платформа должна жить на том же домене, что и основной сайт практики, чтобы не размывать бренд.
Собрал монорепозиторий: основной сайт практики и образовательная платформа на поддомене в одной кодовой базе, с общими компонентами и единой авторизацией.
Что сделал:
— спроектировал структуру данных: курсы, модули, уроки, доступы, платежи;
— каталог курсов с фильтрацией и страницами отдельных курсов;
— регистрацию, авторизацию и личный кабинет ученика;
— интегрировал приём платежей через Точка Банк: формирование счёта, редирект на оплату, обработка вебхуков с проверкой JWT-подписи;
— автоматическую выдачу доступа к курсу по подтверждённому платежу — без участия человека;
— админку, в которой врач сам создаёт курсы, загружает уроки и меняет цены.
Основная инженерная проблема всплыла на загрузке видео. Исходная реализация принимала файл целиком в память перед записью на диск — на роликах в несколько гигабайт процесс падал с переполнением кучи V8. Переписал загрузку на потоковую обработку: файл пишется на диск по мере поступления, память не растёт от размера файла. Заодно закрыл смежный баг — при обрыве соединения на середине загрузки процесс падал вместо корректной отмены.
Развернул на VPS: Caddy с автоматическим SSL, PM2 для процессов, PostgreSQL, автоматические резервные копии базы и загруженных материалов.
Платформа работает в продакшене. Оплаты проверены на реальных транзакциях, а не только в тестовом режиме банка.
Что это дало заказчику:
— продажи курсов идут без комиссии посреднику, деньги приходят напрямую на расчётный счёт;
— доступ к курсу выдаётся автоматически, врач не тратит время на ручную проверку оплат;
— новые курсы заводятся через админку самостоятельно — участие разработчика больше не требуется;
— загрузка многочасовых видеоуроков не роняет сервер независимо от размера файла;
— платформа живёт на собственном домене и работает на бренд практики.
Проект остаётся у меня на поддержке: выпускаю доработки и слежу за сервером.