Назад к портфолио

EdTech-платформа JUVOSpark

Кейс EdTech-платформы JUVOSpark: единая точка входа в Telegram, invite-only онбординг преподавателей, изоляция данных, тесты, расписание, домашки и JWT-админка. Инженерный подход и стек.

Задача

Изначальная задача была точечной: автоматизировать процесс обучения учеников — прежде всего прохождение тестов с уровнями, таймером, фидбеком и результатами без ручной проверки. Из этого контура продукт вырос в полноценную EdTech-платформу: расписание, домашки, оплаты и напоминания, поддержка, веб-админка и invite-only масштабирование на преподавателей в одном боте.

Наше решение

Что такое JUVOSpark

JUVOSpark — это EdTech-платформа, в которой образовательный сценарий для ученика живёт в Telegram, а операционка преподавателя и владельца платформы — в веб-админке на защищённом Admin API.

Платформа закрывает не одну «фичу бота», а связку процессов: тестирование, расписание, домашние задания, учёт оплат, напоминания, поддержку и контролируемое масштабирование на преподавателей.

Ключевой продуктовый принцип простой и жёсткий:

Один общий бот — единая точка входа. Разделение по преподавателям делается через invite и deeplink, а не через отдельных ботов.

Почему «ещё один Telegram-бот» — слабая постановка задачи

Когда команда говорит «нужен бот для обучения», обычно имеют в виду меню, пару сценариев и рассылку. На практике EdTech-продукт очень быстро упирается в операционные вопросы:

  • где ученик проходит тесты и видит результат;
  • где смотрит расписание и ссылку на урок;
  • как получает домашку после занятия;
  • как ему мягко напомнить об оплате;
  • куда писать в поддержку, если что-то пошло не так;
  • как владелец платформы подключает новых преподавателей, не открывая публичную регистрацию;
  • как не смешать данные разных преподавателей в одном канале.

Если эти вопросы не заложены в архитектуру с первого дня, продукт либо остаётся «демо-ботом», либо начинает обрастать костылями: отдельные боты на каждого преподавателя, ручные таблицы, чаты без статусов, доступы «всем подряд».

Именно поэтому JUVOSpark проектировался не как чат-виджет, а как платформа с ясной моделью входа, ролей и изоляции.

Generated_image

Самая распространённая ошибка в Telegram-EdTech

Самая частая ошибка — масштабировать продукт копированием ботов.

Новый преподаватель — новый бот.
Новая группа — ещё один токен.
Новый бренд внутри сети — ещё один инстанс.

Через несколько месяцев уже сложно уверенно ответить:

  • сколько ботов реально в production;
  • где единый UX и единые тексты;
  • как обновлять логику сразу для всех;
  • кто владеет каким контуром данных;
  • как безопасно выдать доступ новому преподавателю;
  • что делать, если ученик переходит к другому преподавателю.

Типичные anti-patterns, которые мы сознательно исключили:

  • отдельный бот на каждого teacher;
  • открытая self-registration в админку;
  • общая «каша» контента без tenant-изоляции;
  • teacher-функции прямо в student-боте без чёткой границы UX;
  • оплаты через эквайринг в v1 «потому что так солиднее», хотя операционная боль была в учёте и напоминаниях.

Отсутствие ответов на эти вопросы превращает рост в хаос сопровождения. Поэтому в JUVOSpark выбран другой путь: один бот, invite-only рост, изоляция данных.

Какую задачу решали

Нужна была EdTech-платформа, где:

  • ученик получает обучение и сервис в одном привычном канале — Telegram;
  • преподаватель и владелец платформы управляют контентом и операциями из веб-админки;
  • подключение новых преподавателей идёт контролируемо, без публичной регистрации;
  • ученики разных преподавателей не видят чужой контент и чужие данные;
  • инфраструктура остаётся простой: один bot-process, один Admin API, предсказуемый деплой.

Цель v1 — не «закрыть все EdTech-мечты», а собрать устойчивый контур: образование + операции + масштабирование на teachers.

Архитектурное решение: single bot + invites

Единая точка входа

Ученик всегда заходит в один и тот же бот платформы. Это единый бренд-канал, единый UX и единая точка обновлений.

Есть два сценария входа:

  1. Общая ссылка на бота. Пользователь стартует без персонального токена и попадает в систему как lead. Владелец платформы может позже вручную привязать его к конкретному преподавателю.
  2. Персональный deeplink преподавателя. Ученик открывает ссылку вида «бот + start-параметр с токеном teacher». Бот привязывает ученика к этому преподавателю, и дальше студент видит только его тесты, расписание, домашки и контакты.

Invite-only для преподавателей

Преподаватель не регистрируется в админке сам. Доступ выдаёт owner:

  1. Owner назначает роль Teacher.
  2. Генерируется одноразовый invite в веб-админку (с TTL, возможностью отозвать и перевыпустить).
  3. Teacher активирует доступ (email + пароль).
  4. В админке получает персональную Bot Invite ссылку для учеников.
  5. Может скопировать ссылку, перевыпустить токен или деактивировать его.

Так платформа растёт без open signup и без антиспам-слоя «на всём интернете», сохраняя контроль owner над тем, кто вообще получает рабочее пространство.

Изоляция и роли

В модели v1 есть три ключевых роли:

  • Owner — управление платформой, преподавателями, переносами учеников, мониторингом.
  • Teacher — своё пространство: ученики, тесты, уроки, домашки, оплаты, настройки, bot invite.
  • Student / lead — сценарий в Telegram.

Важное UX-правило: если пользователь одновременно teacher и student, в боте он всегда видит student-flow. Управление для преподавателя живёт в веб-админке. Это снижает путаницу и не превращает Telegram в «вторую админку».

Owner invite

Что видит ученик в боте

Образовательный контур в Telegram собран как цельный сценарий, а не набор разрозненных команд.

После /start ученик получает меню:

  • Tests — выбор уровня (их создает сам Учитель в своиз настройках), прохождение теста с таймером и без, варианты ответа и текстовый ввод, мультимедиа-вопросы (аудио, видео, изображения), фидбек и итог с возможностью пересдачи;
  • Schedule — ближайшие уроки на месяц, время, тип, заметки, ссылка на площадку;
  • Homework — домашки, которые становятся доступны после урока; карточка задания и статус выполнения;
  • Contacts — контакты и материалы, которыми управляют из админки;
  • любой свободный текст — уходит в поддержку.

То есть Telegram здесь не «витрина», а рабочий канал обучения и сервиса.

Bot interface

Какие настройки и операции доступны через бота

Отдельный слой платформы — операционные сценарии прямо в Telegram для платформенного администратора.

В Admin Panel бота доступны:

  • Statistics — сводка по пользователям и активности;
  • Broadcast — массовые сообщения с ограничением частоты отправки и итоговым отчётом;
  • Metrics — операционные метрики сервиса;
  • Support — очередь обращений, фильтры answered / unanswered, ответ ученику не выходя из Telegram;
  • User Interface — просмотр student-интерфейса «глазами пользователя».

Дополнительно в фоне работают ежедневные напоминания об оплатах и уроках. Это важно: платформа не только отвечает на действия пользователя, но и сама поддерживает ритм обучения и оплаты.

Именно этот слой делает бота не демо-меню, а управляемым каналом продукта.

Что закрывает веб-админка

Параллельно с ботом работает веб-админка на JWT-защищённом REST API. Один backend обслуживает и Telegram long polling, и HTTP API — без рассинхрона доменной логики.

Из админки управляются:

  • тесты, вопросы, уровни, медиа для заданий;
  • студенты, попытки, экспорт результатов;
  • уроки и площадки для встреч;
  • домашние задания и текст приветствия раздела Homework в боте;
  • оплаты как CRM-учёт: статусы, сумма, валюта, персональные напоминания (без платёжного шлюза в v1);
  • контакты для раздела Contacts в боте;
  • чат поддержки и уведомления о событиях;
  • аналитика и dashboard;
  • teacher onboarding и Bot Invite;
  • owner-операции: список преподавателей, ручная привязка lead, перенос ученика между teachers, обзор активности.

Google Calendar подключается через OAuth как интеграция календаря преподавателя; полный двусторонний sync выносился поэтапно, чтобы не блокировать основной контур.

admin-dashboard-dark

Инженерные решения, которые держат систему

Проект строился по Clean Architecture: домен не зависит от Telegram и HTTP, а инфраструктура подключается через интерфейсы. Это позволило развивать бот и админку параллельно на одном ядре.

Для Telegram-нагрузки важны:

  • worker pool на обработку updates;
  • rate limiting на исходящие сообщения;
  • state manager для conversational-сценариев (тесты, broadcast, support reply);
  • graceful shutdown.

Для доступа в админку — JWT с ролевой моделью owner/teacher.
Для данных — SQLite с предсказуемой схемой под education-domain и invite/binding.
Для поставки — Docker, reverse proxy, CI-образы, контролируемые обновления.

Это не «оверинжиниринг ради красоты». Это минимальный набор практик, без которых multi-teacher EdTech на одном боте быстро становится хрупким.

Реальный продуктовый кейс: от сценария к платформе

Исходная точка проекта была уже не blank page: был живой Telegram-контур и инженерная база. Задача состояла в том, чтобы вырастить из него полноценный EdTech-продукт с понятной моделью масштабирования.

Что сделали по сути:

  1. Зафиксировали education-domain как основу продукта.
  2. Собрали student-сценарий в одном боте: тесты, расписание, домашки, контакты, поддержка.
  3. Вынесли операционку преподавателя в веб-админку на том же backend.
  4. Добавили invite-only onboarding преподавателей и персональные deeplink для учеников.
  5. Ввели изоляцию tenant-данных и owner-инструменты переназначения.
  6. Довели delivery до production-контура: контейнеры, API, фоновые jobs, админка.

Перед каждым архитектурным решением проверяли один критерий: усложняет ли это сопровождение при росте числа преподавателей. Если да — искали модель проще. Так и появился принцип «один бот + invites», а не «бот на каждого».

Before and After

Почему нельзя было «просто наплодить ботов»

Самое опасное решение в такой задаче — ускориться за счёт копирования инстансов.

Отдельный бот на преподавателя выглядит быстро только в первую неделю. Дальше растут:

  • стоимость сопровождения;
  • риск расхождения версий логики;
  • сложность общих обновлений;
  • хаос в доступах и секретах;
  • невозможность аккуратно переносить учеников между преподавателями.

Безопасный путь масштабирования, который мы заложили:

  1. Оставить один bot entrypoint.
  2. Развести роли owner / teacher / student.
  3. Выдавать teacher-доступ только через invite.
  4. Привязывать учеников через deeplink или ручной bind owner.
  5. Изолировать данные tenant’а.
  6. Дать owner инструменты reassignment и мониторинга.
  7. Teacher-управление держать в web, student-опыт — в Telegram.

Именно такая последовательность делает рост обратимым и контролируемым. Формулировка «поднимем ещё одного бота» в зрелом EdTech обычно означает будущий операционный долг.

Что получает продукт и бизнес

Такой подход даёт сразу несколько эффектов:

  • единый канал для ученика без прыжков между инструментами;
  • управляемая операционка для преподавателей и owner;
  • контролируемый рост числа teachers без open registration;
  • меньше инфраструктуры на старте масштабирования;
  • понятная граница ответственности между Telegram UX и web CRM;
  • база для аналитики, напоминаний и поддержки в одном контуре.

Для портфолио и для заказчика здесь важен не список кнопок, а то, что платформа умеет расти, не разваливаясь на набор чатов.

Заключение

Сильный Telegram-EdTech начинается не с меню кнопок, а с модели входа и роста. Если сразу заложить «отдельный бот на каждого», продукт ускорится на неделю и замедлится на годы сопровождения.

JUVOSpark построен иначе: один общий бот как единая точка входа, invite-only подключение преподавателей, персональные deeplink для учеников, изоляция данных и веб-админка для операционки. Поверх этого — полноценный образовательный сценарий: тесты, расписание, домашки, напоминания и поддержка.

Такой дизайн делает платформу понятной для ученика, управляемой для преподавателя и масштабируемой для владельца — без зоопарка ботов и без хаотичной публичной регистрации.

Следующий шаг

Если нужен EdTech-контур в Telegram с контролируемым multi-teacher ростом, начинать стоит не с копирования ботов, а с карты ролей, точки входа и правил привязки учеников.
Дальше — домен обучения, admin API и только потом интеграции и платёжный шлюз.

Результат

Точечная задача — автоматизировать прохождение тестов в Telegram — выросла в цельный EdTech-контур. Ученик получает обучение и сервис в одном канале: тесты с уровнями и фидбеком, расписание, домашки, контакты и поддержку без переключения между чатами и таблицами. Для преподавателя и владельца платформы операционка вынесена в веб-админку: контент, ученики, уроки, оплаты, уведомления и аналитика — в одном месте, а не в разрозненных инструментах. На уровне платформы заложена модель контролируемого роста: один общий бот как единая точка входа, invite-only подключение преподавателей и персональные deeplink для учеников с изоляцией данных. Один backend обслуживает и Telegram, и Admin API, поэтому логика не расходится между каналами. Продукт доведён до production-контура — контейнеры, фоновые напоминания, поддержка и масштабирование на teachers без зоопарка отдельных ботов.