# Proposal ## Why Self-hosted galo сейчас доступен только как адаптивный веб, а `project.md` §17 явно исключает мобильные приложения. Но главный сценарий фотоальбома — снимать и загружать с телефона — на вебе ограничен: нет системного пикера, фоновой загрузки и офлайн-кэша. Нативный Android-клиент закрывает именно этот разрыв поверх уже существующего HTTP API. ## What Changes - Новое Android-приложение (Kotlin + Jetpack Compose, Android-only), подключаемое к произвольному self-hosted инстансу galo по базовому URL. - Онбординг: ручной ввод URL сервера, проверка `GET /api/health`, вход в аккаунт; режим небезопасного соединения для LAN, iOS/mDNS/доверие self-signed — вне объёма. - Просмотр: список альбомов, сетка фото, viewer фото/видео/pano, live-обновления по SSE. - Загрузка: системный Photo Picker, очередь в WorkManager, по одному файлу на запрос, прогресс в уведомлении, повторы, опция «только Wi-Fi», работа после закрытия приложения. - HEIC/HEIF конвертируется на клиенте в JPEG с сохранением EXIF перед отправкой. - Кэш метаданных (Room) и объектов (Coil, ключ — путь без подписи) для офлайн-браузинга. - Без изменений серверного API: используются существующие `/api/auth/*`, `/api/albums`, `/api/albums/:id/photos` (list + multipart upload), `/api/sse/*`, `/api/objects/*`. - Не входит в v1: редактирование тегов/комментариев/лайков, управление участниками и инвайтами, share-ссылки, push-уведомления через FCM, iOS. - **BREAKING**: нет. ## Capabilities ### New Capabilities - `android-client`: поведение Android-клиента — настройка сервера и онбординг, сессия и авторизация, просмотр альбомов и медиа, очередь загрузки и офлайн-кэш. ### Modified Capabilities Нет. Серверные требования не меняются: клиент потребляет существующий API без правок. Правка `project.md` §17 («только адаптивный веб») — документация, не spec. ## Impact - Новый верхнеуровневый модуль `android/` (Gradle-проект), не затрагивающий `backend/` и `frontend/`; отдельная сборка и подпись, опциональная цель в `Makefile`. - Ключевые зависимости клиента: Compose, OkHttp (+ okhttp-sse), Coil, Room, WorkManager, AndroidX ExifInterface, Media3/ExoPlayer. - Интеграционные ограничения сервера, учтённые в дизайне: origin-relative подписанные URL объектов с окном подписи (`host-agnostic-object-urls`), fail-fast batch-загрузка (`photos/handlers.go` Upload), отсутствие декодирования HEIC на сервере. - Требуется пересмотр `project.md` §17 как отдельная правка документации.