YolUp
Кейс · 2026Учителя вели уроки в видеоприложении, мессенджере и таблице, а родители ничего из этого не видели. Мы сделали YolUp, чтобы весь урок был в одном месте.


Обзор
YolUp — платформа онлайн-уроков для школьников Узбекистана. Учитель ведёт живой урок с видео и демонстрацией экрана, объясняет на общей доске с математическими формулами и общается с группой в чате курса. Домашние задания сдают файлом или фото, их проверяет ИИ на узбекском языке, а учитель может пересмотреть оценку. Посещаемость и внимание фиксируются автоматически, а родители следят за успехами ребёнка — с его согласия. Мы спроектировали и сделали веб-приложение для учителей, учеников, родителей и администраторов, приложение для iOS и Android, бэкенд на Django и сайт yolup.uz.
Задача
Обычный онлайн-урок — это видеозвонок в одном приложении, домашка в мессенджере и оценки в таблице. Учителя тратили время на то, чтобы связать инструменты, а у родителей не было надёжного способа узнать, был ли ребёнок на уроке, слушал ли и сделал ли задание. YolUp должен был заменить этот набор одной платформой, которая работает на телефоне при нестабильной мобильной связи — и в первую очередь на узбекском.
- C1
Живое и интерактивное
Видео, доска и чат обновляются в реальном времени сразу для всего класса.
- C2
Телефоны и слабая сеть
Многие ученики подключаются с телефона по 3G; приложение уходит в фон, связь обрывается.
- C3
Приватность детей
Наблюдение требует согласия: родитель привязывается к ребёнку только с его подтверждения, а записи воспроизводятся только внутри платформы.
Наш подход — журнал решенийЖурнал решений
В центре — урок: видео, доска, чат, домашние задания и посещаемость привязаны к одному уроку и курсу. Ниже — решения, которые сформировали систему, и цена каждого из них.Решения, которые сформировали систему, и цена каждого из них.
| № | Решение | Почему | Принятый компромисс |
|---|---|---|---|
| D1 | Собственный LiveKit для видео вместо платного видеосервиса. | Предсказуемая стоимость на ученика и данные уроков на инфраструктуре, которой управляет клиент; записи сохраняются автоматически. | Медиасервер команда запускает и мониторит сама. |
| D2 | Начальное состояние через REST, затем живые события по WebSocket для чата, доски и уведомлений. | При подключении посреди урока доска и чат загружаются одним запросом, дальше передаются только изменения — это легко для мобильной сети. | При переподключении пропущенное нужно досинхронизировать, поэтому клиент перезагружает последнюю страницу и сливает её с локальным кэшем. |
| D3 | Отдельные кодовые базы для веба и мобильных с проверяемым списком общей логики вместо монорепозитория. | Сборщики веба и мобильных не мешают друг другу, и небольшая команда выпускает обе версии независимо. | Общая логика существует в двух копиях; скрипт проверяет, что они совпадают. |
- D1
Собственный LiveKit для видео вместо платного видеосервиса.
- Почему
- Предсказуемая стоимость на ученика и данные уроков на инфраструктуре, которой управляет клиент; записи сохраняются автоматически.
- Компромисс
- Медиасервер команда запускает и мониторит сама.
- D2
Начальное состояние через REST, затем живые события по WebSocket для чата, доски и уведомлений.
- Почему
- При подключении посреди урока доска и чат загружаются одним запросом, дальше передаются только изменения — это легко для мобильной сети.
- Компромисс
- При переподключении пропущенное нужно досинхронизировать, поэтому клиент перезагружает последнюю страницу и сливает её с локальным кэшем.
- D3
Отдельные кодовые базы для веба и мобильных с проверяемым списком общей логики вместо монорепозитория.
- Почему
- Сборщики веба и мобильных не мешают друг другу, и небольшая команда выпускает обе версии независимо.
- Компромисс
- Общая логика существует в двух копиях; скрипт проверяет, что они совпадают.
Решение и архитектураАрхитектура
Клиенты на React и React Native, API на Django с WebSocket и собственный видеосервер.
Веб и мобильное приложения используют один API: REST для курсов, уроков, домашних заданий и отчётов; три WebSocket-канала — для чата, доски и уведомлений. LiveKit передаёт видео и записывает уроки; PostgreSQL хранит данные, Redis передаёт сообщения в реальном времени. Проверка домашних заданий ИИ работает на Google Gemini.
- Создано SwiftCore
- Существующая или сторонняя система
- Единая точка входа для всех клиентов
Технологии
Инструменты, работающие в продакшене этого проекта, и причины, по которым каждый выбран вместо альтернатив.
Фронтенд
- React
- TypeScript
- Vite
- TanStack Query
- Zustand
- Tailwind CSS
- React Native (Expo)
React · TypeScript · Vite · TanStack Query · Zustand · Tailwind CSS · React Native (Expo)
Веб-приложение для четырёх ролей и мобильное приложение для учеников и учителей — оба на узбекском, русском и английском.
Бэкенд
- Python
- Django
- Django REST Framework
- Django Channels
Python · Django · Django REST Framework · Django Channels
Одна таблица прав для всех ролей, журнал аудита и мягкое удаление — правила, важные, когда пользователи — дети.
Данные
- PostgreSQL
- Redis
PostgreSQL · Redis
Инфраструктура
- LiveKit
- Docker Compose
- Caddy
- Vercel
LiveKit · Docker Compose · Caddy · Vercel
Качество и инструменты
- TypeScript
- ESLint layer rules
- Three languages: uz, ru, en
TypeScript · ESLint layer rules · Three languages: uz, ru, en
Внутри продукта


Результаты
Результаты ещё измеряются.
Мы публикуем цифры только после того, как они измерены за полный период и одобрены клиентом. А пока — что изменилось:
- Видео урока, доска, чат, домашние задания и посещаемость — в одной платформе вместо трёх инструментов.
- Домашние задания проверяет ИИ на узбекском, оценку пересматривает учитель.
- Родители видят посещаемость и успехи — только с согласия ребёнка.