Files
Musify/web-player
Admin 964dfc809f web-player: cards and grids (MediaCard)
MediaCard now builds its own art (src/trackIds via Artwork
size="fill", or a custom art snippet) and its own play button
(onPlay, with a scrim and a glass PlayButton on hover) instead of
relying on each wrapper passing it a snippet. Replaces AlbumCard,
PlaylistCard and MixTile, which are removed along with
MediaGrid.svelte (their grids move to the
grid-cards/grid-cards-lg/grid-tiles/grid-wide @utility recipes).

format.ts gains albumMeta() and playlistMeta() (previously ad-hoc
calculations inside each card). Explore's genre tile moves from an
inline style= gradient to the genre-tile @utility recipe +
--tile-hue. Along the way, fixes the "follower/s" pluralization on
the user profile that had been missed.

Delta documented: the art's hover-zoom and the scrim+PlayButton
(previously exclusive to MixTile) become MediaCard behavior gated on
the onPlay prop — they'll apply to any future card that uses it, for
consistency.

Verified with npm run check/build; no authenticated visual QA (Docker
unavailable this session).
2026-09-21 00:30:30 +02:00
..
2026-09-09 23:18:42 +02:00

web-player

Musify's web client: SvelteKit 2 (adapter-node), Svelte 5 runes, Tailwind 4, TypeScript. Authentication is server-side OIDC against Zitadel (openid-client and jose) with an encrypted session cookie; the backend is called from load functions and form actions through a typed openapi-fetch client.

Development

npm install
npm run dev      # :5173

Configuration lives in .env (template in .env.example). Bring the infrastructure stack up first (see ../deploy/README.md) and copy the WEB_CLIENT_ID / WEB_CLIENT_SECRET it writes to deploy/.env into this .env once, then run the dev server.

npm run check    # svelte-check — must be clean before closing a change
npm run lint     # prettier --check . && eslint .
npm run format   # prettier --write .
npm run build    # production build into build/
npm run gen:api  # regenerate src/lib/api/schema.d.ts from the running API

Production

Built and run as a container by the production stack — see ../deploy/README.md. There the same variables come from deploy/.env.prod through compose instead of from .env.

Conventions and the design system are documented in CLAUDE.md and in the musify-web skill.