Files
ds-galo/openspec/changes/archive/2026-10-12-add-android-app/proposal.md
T

3.7 KiB

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 как отдельная правка документации.