- Название: Miro-vibe
- Краткое описание: Веб-приложение для быстрых командных ретроспектив и досок заметок в реальном времени (web, desktop). Помогает распределённым командам собирать фидбек, голосовать и фиксировать действия.
- Целевая аудитория: продуктовые и инженерные команды (скрам/канбан), фасилитаторы ретро, проджект/продакт-менеджеры, тимлиды.
- Бизнес-цели MVP: (1) Провести онлайн-ретро для команды до 20 человек без сбоев. (2) Собрать и агрегировать фидбек (стикеры, лайки) за ≤10 минут. (3) Дать фасилитатору экспорт/шэринг результатов.
- US1 (3, Высокий): Как фасилитатор, хочу создать доску с именем, чтобы команда могла присоединиться к общему пространству.
- Критерии: доска создаётся с непустым именем; доска видна в списке; владелец записан.
- US2 (13, Высокий): Как участник команды, хочу добавлять/редактировать/удалять свои стикеры, чтобы делиться обратной связью.
- Критерии: создать с заголовком и текстом; редактировать только свои; удалять только свои; мгновенное обновление интерфейса у всех.
- US3 (8, Высокий): Как участник команды, хочу, чтобы стикеры по умолчанию не накладывались и оставались перетаскиваемыми/масштабируемыми, чтобы доска оставалась читаемой.
- Критерии: автоплейсмент ищет свободное место; drag/resize сохраняются; учитывается масштаб.
- US4 (3, Средний): Как фасилитатор, хочу блокировать дубликаты заголовков стикеров на доске, чтобы элементы оставались уникальными.
- Критерии: дубль блокируется при создании/редактировании; ясная ошибка; уникальные дефолтные заголовки.
- US5 (13, Высокий): Как участник команды, хочу получать обновления в реальном времени (создание/редактирование/удаление) для всех подключённых пользователей, чтобы коллаборация ощущалась живой.
- Критерии: задержка ≤300 мс через WebSocket/BroadcastChannel; авто-реконнект; нет «призрачных» апдейтов на других досках.
- US6 (3, Высокий): Как участник команды, хочу ставить лайк стикеру и видеть единое состояние лайков у всех пользователей, чтобы голосование было надёжным.
- Критерии: переключение лайка; счётчики консистентны; визуальное состояние корректно для всех.
- US23 (3, Средний): Как участник команды, хочу, чтобы если текст стикера содержит только ссылку на изображение (png/jpg/webp/gif), стикер показывал картинку внутри себя, чтобы было удобнее работать с визуалами.
- Критерии: URL на картинку заменяет текст на img внутри стикера; изображение масштабируется под размеры стикера с сохранением пропорций; при недоступности картинки отображается исходный текст.
- US7 (3, Средний): Как пользователь, хочу видеть список досок с отметкой владельца, чтобы быстро находить и открывать их снова.
- Критерии: видно имя и владельца; клик ведёт на доску;
корректная обработка not found/forbidden (было реализовано, отказались из-за ненадобности).
- Критерии: видно имя и владельца; клик ведёт на доску;
- US8 (8, Высокий): Как пользователь, хочу слайдовый навигатор по стикерам с поиском и сортировкой по лайкам, чтобы быстро переходить к нужным элементам.
- Критерии: переключатель панели; поиск по заголовку; сортировка по лайкам (убыв.) затем по названию; виден счётчик лайков; клик фокусирует стикер.
- US9 (6, Высокий): Как пользователь, хочу корректный редирект при удалении доски, чтобы не застревать.
- Критерии: удаление доски даёт редирект на boards; back работает.
- US24 (3, Средний): Как владелец стикера, хочу сгенерировать ссылку, открывающую доску и фокусирующую конкретный стикер, чтобы быстро делиться им с командой.
- Критерии: кнопка «Create link» видна только владельцу стикера; ссылка ведёт на board view нужной доски; при переходе стикер центрируется и подсвечивается; ссылка доступна авторизованным пользователям.
- US11 (5, Средний): Как пользователь, хочу обработку повторных подключений и бэкоф для WebSocket, чтобы краткие обрывы восстанавливались автоматически.
- Критерии: экспоненциальный бэкоф с ограничением; отложенные сообщения отправляются; без дубликатов.
- US12 (2, Низкий): Как фасилитатор, хочу резерв через BroadcastChannel в одном браузере, чтобы вкладки оставались синхронизированными.
- Критерии: BroadcastChannel работает при отсутствии WebSocket; вкладки получают create/update/delete/board-deleted; каналы корректно закрываются.
- US13 (5, Высокий): Как пользователь, хочу войти/зарегистрироваться и сохранить сессию, чтобы возвращаться на доски без повторной авторизации.
- Критерии: register/login endpoints; токен хранится; logout очищает; 401 для неавторизованных.
- US14 (3, Средний): Как пользователь, хочу видеть своё имя на своих стикерах и действиях, чтобы было видно моё авторство.
- Критерии: created_by и имя сохраняются; отображаются на стикере; есть проверка владения.
- US15 (5, Высокий): Как фасилитатор, хочу строгие проверки прав, чтобы доска оставалась под контролем.
- Критерии: бэкенд-проверки; интерфейс отключает возможность удаления чужих досок и стикеров;
- US16 (3, Средний): Как пользователь, хочу валидацию и санитизацию ввода, чтобы контент был безопасным и стабильным.
- Критерии: обязательные поля; лимиты длины; безопасный для XSS рендер; 400 на неверный ввод.
- US17 (6, Средний): Как фасилитатор, хочу экспорт снепшота доски (JSON или текст), чтобы делиться результатами после ретро.
- Критерии: экспортный эндпоинт или клиентский снапшот; включает стикеры и лайки; скачивание из представления доски.
- US18 (8, Средний): Как пользователь, хочу, чтобы доска выдерживала до 300 стикеров с плавным взаимодействием, чтобы сессия оставалась пригодной.
- Критерии: средний кадр ≤16 мс при 300 стикерах; виртуализация/батчинг при необходимости.
- US19 (5, Средний): Как оператор, хочу базовую наблюдаемость, чтобы диагностировать проблемы.
- Критерии: логи бэкенда, фронта; логирование неожиданных WS/API ошибок;
- US22 (3, Средний): Как фасилитатор, хочу заметку «как начать» на представлении доски, чтобы участники знали про двойной клик или кнопку Add. (оказалась не нужна после реализации фичи с подсказками)
- Критерии: пустое состояние с подсказкой до первого стикера; не блокирует; учитывает зум и скролл.
- US21 (3, Средний): Как новый пользователь, хочу подсказки на кнопки и активные элементы.
- Критерии: подсказка появляется после зависания курсора над кнопкой более чем на 1 секунду;
| Эпик | Кол-во историй | SP |
|---|---|---|
| Основная доска и стикеры | 7 | 46 |
| Навигация и представления | 4 | 20 |
| Надёжность реалтайма и присутствия | 2 | 7 |
| Аутентификация и сессии | 2 | 8 |
| Модерация и безопасность | 2 | 8 |
| Экспорт и шэринг | 1 | 6 |
| Производительность и НФТ | 2 | 13 |
| Онбординг и подсказки | 1 | 3 |
| Итого | 21 | 111 |