AdminandClaude Sonnet 5 1186903d22 web-player: P3 — Artwork y Avatar unificados
Crea src/lib/components/ui/Artwork.svelte y Avatar.svelte (B.3) y
migra todos los usos de Cover, PlaylistArt, MixArt y ArtistAvatar
(Sidebar, Queue, TrackInfo, TrackContextMenu, AlbumContextMenu,
TrackTitleCell, AlbumCard, PlaylistCard, MixTile, AlbumHeader,
PlaylistHeader, Home, Explorar, mezcla, perfil de usuario, TopBar,
MobileHeader). Borra los 4 componentes viejos.

Artwork: tamaño decide dimensión y radio automáticamente (tokens
cover-*/radius de P1); cascada src → mosaico (≥4 trackIds) → primera
carátula → fallback, con caída en cascada si cada paso falla (antes
repartida en 3 componentes con lógica ligeramente distinta). Añade un
tamaño 'fill' (aspect-square w-full) no descrito en la spec, necesario
para las tarjetas de grid fluidas hasta que P9 introduzca MediaCard.

TrackTitleCell cambia su prop `coverSize` (clases Tailwind libres) por
`size: 'sm'|'lg'` delegando en Artwork. SearchResultRow pierde su prop
`kind` y el radio por tipo (ahora lo decide Artwork/Avatar).

Decisión de producto (P3, sin bloquear en pregunta): se quita el
nombre bajo el avatar de perfil en /u/[id] por ser redundante con el
título de CollectionHeader.

Small deltas de radio/tamaño documentados en README del plan (auto-
radio por tamaño reemplaza clases ad-hoc; ver tabla B.1.1/B.1.2).

Verificado con npm run check/build; sin QA visual autenticada (Docker
no disponible en esta sesión).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 22:39:05 +02:00

Musify

Music streaming platform: upload your own tracks, process them asynchronously (audio transcoded to .m4a, thumbnails generated) and stream them without the bytes ever going through the API.

backend/      .NET 10 — Domain / Application / Infrastructure / Api / Worker / StreamingGateway / Tests
web-player/   SvelteKit 2 + Svelte 5 + Tailwind 4 web client
deploy/       Docker Compose stacks — self-contained, no wrapper scripts
docs/         What each piece does and why (in Spanish)
dotnet test backend/Musify.slnx   # backend/Tests/ — Docker running (Testcontainers: Postgres, SeaweedFS)

Run it

Development (Docker Desktop):

docker compose -f deploy/compose.yml -f deploy/compose.dev.yml up -d

Infrastructure plus stream-ticket keys, database migrations and Zitadel OIDC provisioning — all as one-shot jobs baked into the compose file. Apps run from the IDE by default; add --profile apps up -d --build as a second command to run them in Docker instead.

Production, on a server with a domain:

cp deploy/.env.prod.example deploy/.env.prod   # fill in the domain and secrets
docker compose --env-file deploy/.env.prod -f deploy/compose.yml -f deploy/compose.prod.yml up -d
docker compose --env-file deploy/.env.prod -f deploy/compose.yml -f deploy/compose.prod.yml --profile apps up -d --build

Idempotent — run the same commands again to deploy an update. See deploy/README.md for the details, the port map and the production prerequisites.

Components

Service Port (dev) Role
Musify.Api 5111 REST API, issues presigned upload URLs and stream tickets
Musify.StreamingGateway 8081 YARP proxy that validates the stream ticket and serves the audio
Musify.Worker — MassTransit consumers: transcoding, thumbnails
web-player 5173 / 3000 Web client (SvelteKit, server-side OIDC session)
Zitadel 8080 Identity (OIDC/OAuth2)
PostgreSQL / RabbitMQ / SeaweedFS / Jaeger 59000 / 5672 / 8333 / 16686 Metadata, messaging, object storage, traces

More in docs/: architecture, authentication, storage, streaming, media processing, development.

S
Description
No description provided
Readme
5.1 MiB
Languages
C# 73.1%
Svelte 12.1%
TypeScript 9%
Kotlin 4.1%
CSS 1.1%
Other 0.6%