# Proposal ## Why Список альбомов пустой и безликий: карточки показывают заглушку `🖼️`, а создание альбома — постоянная inline-форма в заголовке. При этом бэкенд уже хранит `cover_photo_id` и умеет его менять, но фронтенд нигде не отдаёт URL обложки и не даёт её выбрать. Нужно довести UI до состояния, где альбомы узнаваемы по обложкам, а создание не занимает место в шапке. ## What Changes - Кнопка «Создать» в списке альбомов превращается в компактную иконку с хинтом (`title` + `aria-label`). По клику открывается диалог с полем «Название»; отправка создаёт альбом через существующий `POST /albums`. - `GET /albums` начинает возвращать `cover_url` — presigned URL миниатюры обложки (или `null`), чтобы карточка списка могла показать изображение. - Карточки альбомов в списке показывают обложку; при её отсутствии — прежнюю заглушку. - В настройках альбома появляется секция «Обложка»: сетка миниатюр фото альбома, клик по фото применяет его обложкой (`PATCH` с `cover_photo_id`), кнопка «Убрать» очищает (`clear_cover`). - Автоматическая обложка при загрузке фото ставится только если обложка ещё пустая, чтобы не затирать ручной выбор владельца. ## Capabilities ### New Capabilities Нет. ### Modified Capabilities - `albums`: создание альбома через иконку-кнопку и диалог; `cover_url` в списке альбомов; выбор и очистка обложки в настройках; правило автоматической обложки (только при пустой). ## Impact - **Frontend:** `src/routes/+page.svelte` (иконка, диалог, рендер обложки), `src/routes/albums/[id]/settings/+page.svelte` (секция «Обложка»), `src/lib/types.ts` (`Album.cover_url`), возможно новый переиспользуемый inline-SVG компонент иконки. - **Backend:** `internal/albums/store.go` и `internal/albums/service.go` (получение thumb-ключа обложки и presign `cover_url`), `internal/photos/store.go` (`SetCover` только при пустой обложке). - **API:** ответ `GET /albums` расширяется полем `cover_url` (аддитивно, обратносовместимо). `PATCH /albums/:id` уже поддерживает `cover_photo_id` и `clear_cover` — изменений контракта не требуется. - **Данные/миграции:** не требуются.