Files
iu 84ce4d1930 chore(openspec): archive shared-album and sync main specs
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.
2026-10-10 12:58:34 +03:00

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, печать.