Кейс разработки
LMS learn.1seller.ru — платформа онлайн-обучения с платной воронкой и авто-зачислением студента сразу после оплаты
О проекте
LMS — обучающая платформа группы 1SELLER (learn.1seller.ru): модули, уроки, типы вопросов, интервальное повторение. Поверх неё построена платная воронка: оплата на внешнем шлюзе автоматически открывает студенту нужный курс без участия администратора.
1. Задача
Нужна была обучающая платформа, которая одновременно служит продуктом монетизации:
- Полноценный LMS — модули, уроки, разные типы вопросов, система повторения (SRS).
- Платный доступ — покупка курса с автоматическим зачислением, без ручной выдачи доступов.
- Безопасная интеграция с платёжным шлюзом — идемпотентность и защита эндпоинта.
- Гейтинг контента — платный курс виден только тем, кто оплатил.
2. Архитектура решения
Next.js-приложение с собственной БД и аутентификацией; интеграция оплаты вынесена в защищённый admin-эндпоинт зачисления.
| Параметр | Значение |
|---|---|
| Frontend / Backend | Next.js 16 (App Router) |
| ORM / БД | Prisma 5 + SQLite |
| Авторизация | NextAuth |
| Доменная модель | модули / уроки / типы вопросов / интервальное повторение (SRS) |
| Инфра | GitHub Actions (деплой по SSH), PM2 (порт 3100) |
3. Главная инженерная сложность
Самое ответственное — связка «оплата → доступ»: она должна срабатывать автоматически, не выдавать доступ дважды по одному платежу и не зависеть от ручных действий.
- Admin enroll API —
POST /api/admin/topclaude/enrollс авторизацией по общему секрету (Bearer) и идемпотентностью по идентификатору заказа. - Set-password flow — после зачисления пользователь получает ссылку на установку пароля и попадает в курс.
- Гейтинг — доступ к платному курсу проверяется по записи о зачислении.
- Цепочка целиком:
оплата (Robokassa) → webhook → enroll → set-password → редирект в курс.
Результат
Продажа курса работает без оператора: клиент оплачивает — и сразу получает доступ. Эндпоинт зачисления проверен на проде (секрет сверён, идемпотентность по заказу подтверждена).
4. Эффект для бизнеса
- Автоматическая продажа — воронка от оплаты до доступа без ручного труда.
- Без двойных выдач — идемпотентность защищает от повторных зачислений по одному платежу.
- Контроль контента — платные материалы закрыты гейтингом.
5. Технологический стек — кратко
| Параметр | Значение |
|---|---|
| Frontend / Backend | Next.js 16 (App Router) |
| ORM / БД | Prisma 5 + SQLite |
| Авторизация | NextAuth |
| Оплата | Robokassa → webhook → enroll API (идемпотентный) |
| Инфра | GitHub Actions, PM2 |
Кейс подготовлен на основе технической архитектуры платформы learn.1seller.ru (ООО «Первый Селлер»). Описывается инженерное решение; секреты и данные студентов не публикуются.