Контекст
InteractiveLAB доставляет интерактивные учебные симуляторы на школьные панели METZ, в том числе в школы со слабой сетью или вовсе без неё.
Целевая панель работает на Android 11 и WebView Chrome 83. Физический 4K-экран отдаёт CSS-вьюпорт 1280×720 при DPR 3, а удалённые DevTools на ней недоступны.
Моя роль / где проходит граница
Я отвечаю за client/: интерфейс на React, модель офлайн-контента, обёртку на Capacitor, совместимость, сборку APK и проверку на панели. Сервер на FastAPI и база данных — зона коллеги. Первую версию админ-панели построил я, затем передал её ему.
Решение 1 / приложение в APK, контент в IndexedDB
Оболочка приложения лежит внутри APK. Предметы, симуляторы и их HTML, инструкции и вложения хранятся в IndexedDB. Service worker сознательно не используется: поверх нативной оболочки он завёл бы второй жизненный цикл кэша.
Скачивание показывает ход, останавливается по просьбе учителя и отчитывается, что не докачалось. На школьной сети загрузка обрывается постоянно, и это обычный сценарий.
Решение 2 / страж по итоговой сборке
Vite собирает под Chrome 80. После сборки отдельный страж проверяет dist на синтаксис и CSS новее Chrome 83, а диагностический оверлей на ES5 показывает ошибки разбора и выполнения прямо на панели, потому что DevTools там нет.
Релизный APK проходит второй страж: подпись не отладочная, cleartext выключен, панели разработчика в сборке нет, бэкенд — только по https://. Пока HTTPS-бэкенда не было, он валил каждую релизную сборку — ровно на этом адресе. Когда бэкенд появился, три поломки прода нашлись запросами по живым доменам ещё до сборки APK, а не на панели.
Решение 3 / общая панель, разные учителя
Офлайн-контент привязан к пользователю через метку владельца. Когда на панель входит другой учитель, IndexedDB предыдущего очищается до загрузки нового каталога.
Результат / проверка
- релизный APK подписан и раздаётся школам, текущая версия — 0.1.2;
- офлайн-скачивание, перезапуск, темы, казахский и русский, перемотка видео, инструкции и вложения проверены на реальной панели;
- клиент в CI: модульные тесты и сборка со стражем совместимости.
Ограничения
Проект только вышел в школы, и данных об использовании, которые можно показать, пока нет.


