# ✨ Сделать приложение устанавливаемым на телефон - **Тип:** feature - **Категория:** Очередь — Ставить на телефон есть смысл, когда есть что ставить. - **Зачем:** Приложение, живущее вкладкой браузера, теряется среди прочих: ярлыка на экране у него нет. Приложение ставится с телефона и запускается с ярлыка без адресной строки, а открытое без сети показывает это состоянием. Берётся после того, как есть что ставить, — то есть после `records-list-screen`. ## Затрагивает - манифест приложения: имя, иконки под размеры экранов, цвета, режим показа; - service worker: регистрация, обновление версии, поведение без сети; - раздача манифеста и service worker с правильными заголовками и без длинного кэша; - версионирование собранной статики, чтобы установленное приложение обновлялось; - `docs/conventions/web-ui.md` — раздел про статику и кэш; - `docs/security.md` — service worker перехватывает запросы, и это новая поверхность. ## Критерии приёмки - Приложение предлагается к установке и после установки запускается с ярлыка на отдельном экране, без адресной строки. Оракул — проверка на телефоне и сверка манифеста инструментом браузера. - Открытое без сети приложение показывает состояние «связи нет», а не пустую страницу и не ошибку браузера. Оракул — тест либо ручная проверка с выключенной сетью. - Новая выкладка доходит до установленного приложения: старая статика из кэша не переживает обновление. Оракул — установка, выкладка изменённой версии, перезапуск приложения показывает новую. - Service worker не кэширует ответы API и не отдаёт чужие данные после смены сессии. Оракул — тест: после выхода и входа другой учётной записью список записей чужих не содержит. ## Рамки Офлайн-чтения готовых расшифровок и очереди отправки без сети **не делаем** — это за границей из паспорта. Web Push не делаем: уведомления идут через apprise и ntfy — задача `ntfy-delivery`.