An axe-core audit of every screen in both themes found low contrast on white text over the accent and on caption text, track rows using row roles without cells, and unlabelled progress bars. Accent fills now use a darker token, caption text meets 4.5:1, track lists are lists and progress bars are labelled. The queue drawer slides in from the right as designed, takes focus, closes on Escape and notes that the wave never ends. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pipu-music
Self-hosted музыкальный сервис: веб и Android-приложение, библиотека на NFS, умная бесконечная лента «Моя волна» с учётом вкуса, звучания треков и настроения.
- Идея продукта: docs/IDEA.md
- Документация для разработки: docs/README.md
- План: docs/roadmap.md
- Установка сервера на свой домен: docs/install-guide.md
Структура
| Путь | Что |
|---|---|
api/openapi.yaml |
Контракт публичного API — источник истины для сервера и клиентов |
services/api |
Go: публичный API (cmd/api) и агент хранилищ (cmd/storage-agent) |
services/recommender |
Python: рекомендации (pipu-rec serve) и аудиоанализ (pipu-rec analyze) |
apps/web |
Веб-клиент (React + Vite) |
apps/mobile |
Android-приложение (React Native + Expo) |
packages/* |
Общий TS-код: api-client, core, i18n, design-tokens |
deploy/ |
Docker Compose, nginx, скрипты установки и обновления |
tests/fixtures/music |
Генератор тестовой библиотеки (нужен ffmpeg) |
.gitea/workflows |
CI по областям (ci-*.yml, docker.yml) и релиз по тегу (release.yml) |
Разработка
Нужны: Go 1.24+, Node 22 + pnpm 11, uv, Docker; для Android — JDK 17 и Android SDK.
pnpm install
docker compose -f deploy/compose.dev.yaml up -d
API (из services/api):
DATABASE_URL="postgres://pipu:pipu@localhost:5432/pipu?sslmode=disable" REDIS_URL="redis://localhost:6379/0" MEILI_URL="http://localhost:7700" MEILI_MASTER_KEY="dev-master-key-change-me" LIBRARY_HOST_ROOT="$PWD/../../tests/fixtures/music/out" X_ACCEL=false CACHE_DIR="$PWD/.cache" go run ./cmd/api
Веб на http://localhost:5173 (проксирует /api на :8080):
pnpm --filter @pipu/web dev
Проверки — те же, что в CI:
pnpm typecheck && pnpm test && pnpm i18n:check && pnpm test:scripts
cd services/api && go vet ./... && go test ./...
cd services/recommender && uv run ruff check . && uv run mypy pipu_rec && uv run pytest
После изменения api/openapi.yaml или packages/design-tokens/tokens.json перегенерируйте код и закоммитьте результат:
pnpm generate && (cd services/api && go generate ./...)
Релиз
Тег vX.Y.Z (или vX.Y.Z-rc.N) запускает .gitea/workflows/release.yml: Gitea Release с заметками → подписанный APK докладывается в него.
Docker-образы не публикуются: сервер клонирует репозиторий и собирает их сам (deploy/update.sh,
docs/install-guide.md). Нужные секреты — в шапке workflow и в docs/ci-cd.md.