The app is a read-only "Project View" for a music production session called Liminal. On load, a spinner fades out and the UI fades in, rendering the entire interface from a single JSON payload. The layout is a series of dark bordered panels styled like a DAW inspector window.
F# minor · 138 BPM · 44.1kHz / 24-bit, and a pulsing "in progress" status chip.
The aesthetic is dark, neon-accented, and animation-heavy — rows stagger in with cascading delays and level bars animate outward from zero. The only genuinely interactive element is the mute button on each stem.
<audio> elements, no Web Audio API, nothing to actually mute. The stems reference stems/kick.wav etc., but no such files are served.[1, 17, 33, 65, 81, 113, 128] are written literally in the render function rather than derived from the sections. A different JSON payload with different section boundaries would produce a ruler whose numbers no longer line up with the colored blocks.-14 LUFS shows green, anything louder shows amber. The project is tagged "club" and the notes reference a club master, where louder-than-streaming is the point — yet the louder -10.5 LUFS club master flags as a warning while the quieter -14 rough bounce flags as good. Reasonable for streaming delivery, but unlabeled and not configurable.solo boolean in the JSON, but the UI only exposes mute. Solo is a core mixing-console concept and its absence is conspicuous.min_overlap_ratio is 0.4, so the 44% clash is barely above threshold — calling it "low" is fine, but there's no "medium" category in between, so severity looks binary despite being a free string.arrangement.sections (one tick at each start_bar, plus total_bars) instead of the hardcoded [1, 17, 33, 65, 81, 113, 128] array, so any JSON payload renders correctly.solo field in the JSON. When any stem is soloed, visually dim all non-soloed rows. When none are soloed, return to normal. Soloing overrides muting visually.IntersectionObserver.proj_a3f9c1 in the header.overlap_ratio when the JSON's severity string is missing: ≥0.7 high, 0.5–0.7 medium, <0.5 low. Keep the JSON value if present.