Move the completed shared-album change to openspec/changes/archive/2026-10-10-shared-album/ and create the 8 main specs (albums, auth, members, notifications, photos, realtime, share-links, social) from the delta ADDED requirements.
4.4 KiB
4.4 KiB
Proposal
Why
Фото участников разбросаны по мессенджерам и галереям — теряется авторство, контекст и разграничение прав. Нужно единое многопользовательское пространство (семьи и друзья, рабочие команды, фотограф ↔ клиент) с понятными ролями, live-обновлениями и self-hosted хранением поверх уже существующих Garage (S3) и PostgreSQL, без контейнеров.
What Changes
- Новый backend на Go 1.22+ (Gin, pgx, AWS SDK v2, нативный SSE) — один статичный
бинарник (
CGO_ENABLED=0) со вшитой статикой SvelteKit черезgo:embed. - Новый frontend на SvelteKit 2 + Svelte 5 (adapter-static, TypeScript, TailwindCSS).
- Аутентификация: регистрация, вход, JWT (access 15 мин + refresh 30 дней), logout.
- Альбомы: создание / редактирование / удаление / список, владение альбомом.
- Участники и роли: инвайт по токену, роли
admin/editor/member/viewer, владелец выводится изalbums.owner_id, правило «нет эскалации прав». - Фото: загрузка (одиночно и массово), три варианта (thumb 200px / preview 1200px / original), WebP-превью, EXIF, cursor-пагинация, просмотр, скачивание одиночного фото.
- Социальное: лайки и комментарии к фото.
- Real-time через SSE: события фото / комментариев / лайков / участников.
- Уведомления: персональный поток в приложении (in-app через SSE).
- Ссылки для просмотра: view-only доступ к альбому без аккаунта (несколько ссылок, срок действия, отзыв).
- Деплой без Docker: systemd-юнит, статика вшита в бинарник, один артефакт.
Capabilities
New Capabilities
auth: регистрация и вход по email/паролю, JWT-токены, refresh, logout.albums: жизненный цикл альбома (создание, просмотр, редактирование, удаление, список) и владение им.members: состав альбома, роли и права доступа, инвайт по токену, смена ролей.photos: загрузка и хранение фото в S3, генерация вариантов и EXIF, листинг с пагинацией, просмотр, скачивание одиночного фото.social: лайки и комментарии к фотографиям.realtime: поток событий альбома через SSE (фото, комментарии, лайки, участники).notifications: персональные уведомления пользователя и их статус прочитано.share-links: view-only доступ к альбому по ссылке без авторизации.
Modified Capabilities
Нет — проект новый, существующих спец нет.
Impact
- Код: новый
backend/(Go) иfrontend/(SvelteKit),deploy/(systemd, nginx),Makefile,.env.example. - Зависимости:
gin,pgx,aws-sdk-go-v2,golang-migrate,imaging,gen2brain/webp(чистый Go),rwcarlsen/goexif,golang-jwt,bcrypt. - Системы: подключение к существующим
pg.localnet:5432(PostgreSQL) и Garage наs3.localnet(path-style, регионgarage, ключGK...). - Права: все эндпоинты за JWT, кроме
/api/auth/*и публичных share-эндпоинтов; проверка прав на уровне сервиса, не только UI. - Не входит в MVP (осознанно отложено): web push (браузерные push-уведомления), распознавание лиц/ML-теги, мобильные приложения, биллинг, публичный API, печать.