Перейти к содержимому
SwiftCore
Все проекты

YolUp

Кейс · 2026

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

Клиент
YolUp
Отрасль
Образование
Услуги
Дизайн продукта, веб-приложение, мобильное приложение, бэкенд, видео и совместная работа в реальном времени
Платформы
Веб-приложение, iOS и Android, сайт
Сроки
2026
Комната урока YolUp на синем фоне: доска, видео учителя, статус проверки внимания, участники и групповой чат
Комната урока YolUp
Рис. 1 — Комната урока на yolup.uz — иллюстрация интерфейса.

Обзор

YolUp — платформа онлайн-уроков для школьников Узбекистана. Учитель ведёт живой урок с видео и демонстрацией экрана, объясняет на общей доске с математическими формулами и общается с группой в чате курса. Домашние задания сдают файлом или фото, их проверяет ИИ на узбекском языке, а учитель может пересмотреть оценку. Посещаемость и внимание фиксируются автоматически, а родители следят за успехами ребёнка — с его согласия. Мы спроектировали и сделали веб-приложение для учителей, учеников, родителей и администраторов, приложение для iOS и Android, бэкенд на Django и сайт yolup.uz.

Задача

Обычный онлайн-урок — это видеозвонок в одном приложении, домашка в мессенджере и оценки в таблице. Учителя тратили время на то, чтобы связать инструменты, а у родителей не было надёжного способа узнать, был ли ребёнок на уроке, слушал ли и сделал ли задание. YolUp должен был заменить этот набор одной платформой, которая работает на телефоне при нестабильной мобильной связи — и в первую очередь на узбекском.

  1. C1

    Живое и интерактивное

    Видео, доска и чат обновляются в реальном времени сразу для всего класса.

  2. C2

    Телефоны и слабая сеть

    Многие ученики подключаются с телефона по 3G; приложение уходит в фон, связь обрывается.

  3. C3

    Приватность детей

    Наблюдение требует согласия: родитель привязывается к ребёнку только с его подтверждения, а записи воспроизводятся только внутри платформы.

Наш подход — журнал решенийЖурнал решений

В центре — урок: видео, доска, чат, домашние задания и посещаемость привязаны к одному уроку и курсу. Ниже — решения, которые сформировали систему, и цена каждого из них.Решения, которые сформировали систему, и цена каждого из них.

№РешениеПочемуПринятый компромисс
D1Собственный LiveKit для видео вместо платного видеосервиса.Предсказуемая стоимость на ученика и данные уроков на инфраструктуре, которой управляет клиент; записи сохраняются автоматически.Медиасервер команда запускает и мониторит сама.
D2Начальное состояние через REST, затем живые события по WebSocket для чата, доски и уведомлений.При подключении посреди урока доска и чат загружаются одним запросом, дальше передаются только изменения — это легко для мобильной сети.При переподключении пропущенное нужно досинхронизировать, поэтому клиент перезагружает последнюю страницу и сливает её с локальным кэшем.
D3Отдельные кодовые базы для веба и мобильных с проверяемым списком общей логики вместо монорепозитория.Сборщики веба и мобильных не мешают друг другу, и небольшая команда выпускает обе версии независимо.Общая логика существует в двух копиях; скрипт проверяет, что они совпадают.
  1. D1

    Собственный LiveKit для видео вместо платного видеосервиса.

    Почему
    Предсказуемая стоимость на ученика и данные уроков на инфраструктуре, которой управляет клиент; записи сохраняются автоматически.
    Компромисс
    Медиасервер команда запускает и мониторит сама.
  2. D2

    Начальное состояние через REST, затем живые события по WebSocket для чата, доски и уведомлений.

    Почему
    При подключении посреди урока доска и чат загружаются одним запросом, дальше передаются только изменения — это легко для мобильной сети.
    Компромисс
    При переподключении пропущенное нужно досинхронизировать, поэтому клиент перезагружает последнюю страницу и сливает её с локальным кэшем.
  3. D3

    Отдельные кодовые базы для веба и мобильных с проверяемым списком общей логики вместо монорепозитория.

    Почему
    Сборщики веба и мобильных не мешают друг другу, и небольшая команда выпускает обе версии независимо.
    Компромисс
    Общая логика существует в двух копиях; скрипт проверяет, что они совпадают.

Решение и архитектураАрхитектура

Упрощено · без конфиденциальных деталей

Клиенты на React и React Native, API на Django с WebSocket и собственный видеосервер.

Веб и мобильное приложения используют один API: REST для курсов, уроков, домашних заданий и отчётов; три WebSocket-канала — для чата, доски и уведомлений. LiveKit передаёт видео и записывает уроки; PostgreSQL хранит данные, Redis передаёт сообщения в реальном времени. Проверка домашних заданий ИИ работает на Google Gemini.

  • Создано SwiftCore
  • Существующая или сторонняя система
  • Единая точка входа для всех клиентов
Клиент
Веб-приложение
Клиент
Приложение iOS и Android
Клиент
yolup.uz
Точка входа
Django REST API + WebSocket
Сервис
Уроки и записи
Сервис
Доска
Сервис
Чат
Сервис
Домашние задания и тесты
Данные
PostgreSQL
Данные
Redis
Данные
Медиасервер LiveKit
Внешнее
Google Gemini
Рис. 2 — Упрощённо: клиенты, API, основные модули, данные и сервис ИИ.

Технологии

Инструменты, работающие в продакшене этого проекта, и причины, по которым каждый выбран вместо альтернатив.

Фронтенд

  • 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

Результаты

Результаты ещё измеряются.

Мы публикуем цифры только после того, как они измерены за полный период и одобрены клиентом. А пока — что изменилось:

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

Похожая задача?