Files
pipu-music/docs/roadmap.md
T
mrleo1nidandCursor dfc72b1d69
ci / ts / ts (packages + web) (push) Successful in 54s
ci / db / db (push) Successful in 1m40s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 3m51s
chore(deploy): leave database backups to external tools
The app no longer dumps Postgres, restores it, or checks copies in CI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-21 09:03:06 +03:00

5.5 KiB
Raw Blame History

План разработки

Каждый этап заканчивается рабочей версией с тегом и релизом.

M0 — Скелет (v0.1)

  • Монорепо: pnpm + Turborepo, Go-модуль, Python-проект, openapi.yaml с server-info.
  • deploy/compose.dev.yaml, nginx, Postgres, Redis, Meilisearch.
  • ci.yml и release.yml (пока собирают пустые образы и debug-APK «hello»), генерация тестовой музыки.
  • Готово, когда: тег v0.1.0 создаёт релиз в Gitea с образами и APK.

M1 — Доступ (v0.2)

  • Bootstrap-админ, вход, refresh-ротация, смена пароля / учётных данных, сессии.
  • Роли и политика прав, админка «Пользователи», аудит.
  • Веб: каркас (топбар, сайдбар, пустой плеер), экраны входа и setup, i18n ru / en.
  • Готово, когда: E2E-сценарии 1, 2, 8, 9, 10 зелёные.

M2 — Библиотека и поиск (v0.3)

  • storage-agent, источники NFS / local, тест подключения.
  • Шаблоны путей с предпросмотром, сканер (инкрементальный, переименования, дубли), обложки.
  • Meilisearch, suggest и страница поиска, страницы исполнителя и альбома.
  • Готово, когда: реальная библиотека 11k треков сканируется, поиск < 50 мс, сценарии 3, 4.

M3 — Воспроизведение (v0.4)

  • Стриминг через X-Accel, подписанные ссылки, транскодинг и кэш.
  • Плеер в вебе (очередь, Media Session, горячие клавиши, нормализация), сохранение состояния.
  • События, история, лайки / дизлайки, раздел «Коллекция».
  • Готово, когда: сценарии 5, 7; перемотка мгновенная; позиция восстанавливается на другом устройстве.

M4 — Моя волна v1 (v0.5)

  • analyzer (Essentia), признаки и эмбеддинги, прогресс в админке.
  • recommender: кандидаты, эвристическое ранжирование, контексты (занятия / настроения), сессионный вектор, правила разнообразия; fallback в Go.
  • Анимированная кнопка волны и MoodPicker в вебе.
  • Готово, когда: сценарий 6; метрики волны видны в админке.

M5 — Android (v0.6)

  • Вход с адресом сервера, главная с волной, поиск, коллекция, плеер с фоновым воспроизведением.
  • Офлайн: загрузки, «Скачанное», очередь событий.
  • Самообновление через сервер.
  • Готово, когда: Maestro-сценарии зелёные; обновление 0.6.0 → 0.6.1 проходит на реальном устройстве.

M5.5 — Очередь на добавление (v0.7)

  • Отпечатки (SHA-256, Chromaprint) для существующей библиотеки.
  • Запись через storage-agent, accepts_uploads, write_template с автоподбором и проверкой обратимости.
  • tus-загрузка, предпроверка дублей, квота, обработка, экраны «Предложить треки», «Очередь на добавление», «Настройки».
  • Готово, когда: E2E-сценарии 11, 12; импорт реального альбома ложится рядом с существующими по той же структуре.

M6 — Моя волна v2 (v0.8)

  • ALS, центроиды вкусов, LightGBM-ранжировщик, бандит, онбординг, ночное обучение с проверкой метрик.
  • Персонализация suggest.
  • Готово, когда: на накопленных данных v2 лучше v1 по офлайн-NDCG и онлайн early-skip rate.
  • Состояние: всё реализовано (v0.8, v1.0). Ранжировщик включается сам после ~20 тыс. размеченных показов; критерий проверяется по метрикам версий в админке («Библиотека → Моя волна») и NDCG в model_versions.

M7 — Стабилизация (v1.0)

  • Нагрузочный smoke, документация администратора, доступность, полировка анимаций, багфиксы.
  • Состояние: v1.0 — руководство администратора, аудит доступности WCAG 2.1 AA, k6-smoke (tests/load/smoke.js, запускается вручную на сервере перед релизом). Копии базы и музыки — внешними средствами.

Дальше (идеи)

  • Плейлисты, волна по исполнителю / треку, ежедневные подборки, тексты песен, Chromecast / DLNA, Android Auto, iOS (TestFlight), Last.fm-скробблинг, импорт лайков.