StealThis .dev
Pagina's Medium

Music — Listener Profile (top artists · stats)

A celebratory, data-rich listener profile and year-in-review page for the fictional listener River Halcyon, built in plain HTML, CSS, and vanilla JS. A CSS-drawn gradient banner with an animated conic avatar ring frames a display name, follower and following counts, and a follow toggle that nudges the count live. A 4 weeks, 6 months, and all-time range toggle re-renders the top-artists rank list, animated genre bars, count-up listening stats, and a top-tracks list with hover-play and a live equalizer, all wrapped up by a scrollable public-playlists strip.

Open in Lab
html css vanilla-js
Targets: JS HTML

Code

Listener Profile (top artists · stats)

A streaming-style listener profile and year-in-review page for the fictional listener River Halcyon, rendered entirely in CSS — no images. The header pairs a full-bleed banner of drifting gradient orbs and a halftone grain with a circular avatar wrapped in a slowly rotating conic-gradient ring. Beside the giant display-font name sit a handle, follower / following / playlist counts, and an action row with a Follow toggle (it bumps the follower count and flips to Following), an edit-profile button, and a share button — each confirmed by a small toast() helper.

The body is a responsive grid of cards. A Top artists this month rank list shows CSS cover art with a hover-reveal play button, genre, and play counts; Top genres animates a set of gradient bars from zero on each render; three listening-stats cards count up minutes listened and tracks played and surface the top listening day; and a Top tracks list flips its index into a four-bar animated equalizer on hover or when pinned by a click. A horizontally scrollable public-playlists strip rounds out the page.

Every interaction is vanilla JS. A 4 weeks / 6 months / all time range toggle slides an animated pill and re-renders the top lists, re-animates the genre bars, and replays the stat count-ups with a fresh data set for each window. Per-track like hearts and the follow button toggle their aria-pressed state, the range buttons drive an aria-selected tablist, and motion respects prefers-reduced-motion while the layout reflows cleanly down to ~360px.

Illustrative UI only — fictional artists, albums, tracks, and data. No real audio playback.