Skip to content

Music & Studio

Cygnus is two apps in one shell. A listening half — home, library, albums, artists, tracks — and an editing half with an arrangement timeline and a mixer, joined by a transport bar that survives every navigation. Built entirely from AWC UI components.

Open the applicationSwitch framework, theme, density, direction and language from inside the app.

All five are live, and the control bar switches between them without losing your place. Every artist, release, clip and fader position comes from @awc-ui/showcase-kit, so the only thing that differs between them is the view layer — which is what makes two screenshots comparable evidence.

BuildOpenHow it rendersWhere the language lives
HTML/html/Static pages, written at build time — no framework at allIn the URL — a page per locale
React/react/Single-page app — Vite, no meta-frameworkClient state — switches in place
Vue/vue/Single-page app — Vite, no meta-frameworkClient state — switches in place
Angular/angular/Single-page app — client-rendered onlyClient state — switches in place
Svelte/svelte/Single-page app — Vite, no meta-frameworkClient state — switches in place
ScreenWhat it showsWhere it leads
HomeMost played, recent releases, your playlists and the artists you follow — four short shelves rather than one long feedAn album, an artist, or a track
LibraryEverything saved, ordered by how often it is opened: liked tracks, your playlists, followed playlists, then all 16 albumsAn album or a track
StudioThe open project’s arrangement — a ruler, a lane per track, clips you can drag, resize and delete — with the edit history under itA project
MixerA strip per track: a vertical fader, a level meter, pan, mute and soloNothing: it is the deepest screen
ProfileYour listening, the whole queue, liked tracks, playlists and projectsA track or a project
AlbumThe sleeve, the running order numbered as printed, and the rest of the discographyA track or an artist
ArtistPortrait, biography, a follow button, top tracks and every releaseAn album or a track
TrackOne track with its waveform, its facts and the rest of its albumAn album or an artist
ProjectThe same arrangement as Studio, opened directlyA track’s lane

A music app was chosen because it asks for what the other five do not: state that outlives a screen, and a layout measured in time.

  • A transport above the router. Every other vertical’s interaction state dies with the screen — Corvus’s reactions belong to the feed, Lyra’s follow flags to the profile. An app that stopped playing when you opened an album would not be a music app, so the transport is held outside the routed subtree in all four SPA builds. Each framework does it differently and the browser suite asserts the same outcome for all of them: start a track, navigate twice, and it is still loaded, still playing, and the playhead has not reset.
  • A timeline that a content-security policy shaped. The deployed policy is style-src-attr 'none', so no element may carry a style attribute — and the usual way to place a clip is left: 340px; width: 96px. What works instead is a CSS grid with one column per bar: a clip declares data-start and data-span, and the stylesheet does the arithmetic the element is not allowed to. Dragging rewrites those two integers, which is why the snap is a property of the layout and why five builds drag identically — none of them is positioning anything.
  • Solo and mute, which do not compose the way anyone expects. Any soloed track silences every track that is not soloed; an explicitly muted track stays silent regardless, including when it is itself soloed. Implemented as “solo mutes everything else” it cannot represent two tracks soloed at once and leaves them muted afterwards. audibleTracks() in the kit is the only place that rule is written, and the mixer’s dimming is keyed on its answer rather than on the mute flag — so pressing solo on one strip visibly drops the others back.
  • An undo history with a redo branch. Moving, resizing and deleting a clip, and every fader and pan, go through one stack. A new edit after an undo discards the redo branch — the rule implementations forget, and without it redo reapplies an edit onto a document it no longer fits.
  • Sixty controls on one screen. A mixer is a bank of identical strips, and the accessibility question stops being “does this control have a label” and becomes “does its label say which track”. Every fader, meter, mute and solo takes its track’s name into its accessible name.
  • Three languages including a right-to-left one. Biographies, playlist descriptions and clip labels are dictionary entries, so an Arabic reader gets an Arabic catalogue. Musical time is the exception: mm:ss stays in Latin digits everywhere, because Arabic-Indic digits in the scrubber beside Latin bar numbers on the ruler would put two numbering systems on one screen.

Cygnus, its twelve artists, their releases and the four projects are invented. No real recording, label, person or release is represented, and none of the artwork depicts anyone. The disclaimer sits in the app bar on every screen rather than at the bottom of one.

The fixture holds 12 artists, 16 albums, 53 tracks, 8 playlists and 4 projects with 23 studio tracks and 181 clips between them, over 41 generated images, all from one seed and internally consistent — an album’s running order agrees with its tracks’ numbers in both directions, no playlist holds the same track twice, and no two clips on one lane overlap. That last one is not a nicety: two clips in the same grid columns render on top of each other, so an overlap is a clip that has vanished.

Every project is at 120 BPM in 4/4, which is not laziness about tempo. Four beats at 120 is exactly two seconds, so bar boundaries fall on whole seconds and the ruler’s labels, the clip edges and the transport’s readout all agree without anybody rounding. At 137 BPM bar 5 would start at 8.759…s and five builds would each round it their own way.

Every timestamp is measured from a fixed reporting instant of 18 November 2026, 15:20 UTC, not from the clock.