chore(openspec): archive add-android-app and sync main specs

This commit is contained in:
iu
2026-10-12 12:15:13 +03:00
parent 9e85e52a73
commit bf3641f9e0
6 changed files with 231 additions and 0 deletions
@@ -0,0 +1,47 @@
# 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 как отдельная правка документации.