design: Constellation phase B - The Sky of rooms#65
Merged
knzeng-e merged 3 commits intoJul 5, 2026
Conversation
Add the Rooms view's hero effect from the Constellation direction: open rooms as dot-spheres in the navy sky. Each sphere has the current track's cover as its core and its real aura as a halo, laid out on a deterministic golden-angle spiral (roomId-hashed jitter so the sky never looks mechanical while staying stable). One light petal orbits per genuinely connected presence (visual cap 10, true count always printed on the label); the halo breathes only when the host's broadcast playerState.playing is true; rooms with no track loaded are embers; playbackMode 'preview' shows an honest amber tag. Joining is entering the halo: the sphere grows and its light floods for 420 ms before onJoinRoom fires (immediate under reduced motion). DOM + CSS only, no OGL: at realistic room counts (tens of points) the dependency and single-file Bulletin bundle weight were not justified; the decision is recorded in the design doc with OGL kept as the escape hatch. On mobile and prefers-reduced-motion the sky is hidden and the existing card grid below remains the complete experience. The e2e room-join flow never touches the rooms list, and the sky uses its own sky-* testids. Verified: tsc clean, lint 0 errors, build, fmt:check, 72 unit tests, 10/10 Playwright e2e, plus live two-page visual checks (host creates a room via the seeded dev server + signaling; viewer screenshots the sky, hover state, and the join flood). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add the four cross-surface micro-moments from the Constellation direction, all keyed off real state (no status-string matching for triggers): - Dot birth (components/DotBirth.tsx): the single loading vocabulary. Scattered particles converge into a lit sphere, three sizes, colored by the ambient aura variables. Wired to the catalog's genuine loading state in ListenView; terminal states (empty registry, failures) stay plain text. - Unlock ritual (PlayerView): when the selected track's real access flips from needed to granted (access-map transition tracked per track id), a ring of aura light travels the cover once (1.3s). Paying an artist is the product's most important moment; it gets the most care. - Reaction petals: the room reaction emojis now rise inside aura-tinted petals (CSS-only change to .room-reaction; markup untouched). - Into orbit (ArtistConsole + ReleasesTab): when a new release id appears in the artist's on-chain catalog while the console is open (structural id diff; the first observation only seeds the known set, so nothing animates on mount), its card plays a one-shot arrival glow. Reduced motion gets static dignity everywhere: particles hidden with a static core, near-instant ritual, fade-only reactions, no arrival motion. No new dependencies, no WebGL. Verified: tsc clean, lint 0 errors, build, fmt:check, 72 unit tests, 10/10 Playwright e2e, plus a mid-flight screenshot of the unlock ritual (ring crossing the cover) on the seeded classic-unlock flow. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
design: Constellation phase C - micro-moments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Constellation phase B: The Sky of rooms
Second phase of the Constellation design track (ticket 19, spec in
docs/design/dotify-constellation-ux.md). Stacked ondesign/constellation-phase-a(#64); merge that first.What this does
RoomsViewgains its hero effect: open rooms as dot-spheres in the navysky, rendered above the existing board when rooms exist.
(
auraForTrack), sized by the real presence count. Layout is adeterministic golden-angle spiral with roomId-hashed jitter: organic to the
eye, stable for a given set of rooms.
playerState.playingis genuinely true.(visual cap at 10; the true count is always printed on the label).
playbackMode: 'preview'shows an amber tag (thehost has not unlocked the track).
floods for 420 ms before
onJoinRoomfires (immediately under reducedmotion), landing in the immersive player where
applyAuratakes over. Thetransition tells the product story: you step into someone's light.
Engineering decisions
showed DOM/CSS covers the visual completely at realistic room counts (tens
of points), so the dependency and single-file Bulletin bundle weight were
not justified. Recorded in the design doc, with OGL kept as the escape hatch
for a future filament/hundreds-of-points sky.
prefers-reduced-motionthe sky ishidden entirely; the card grid below is the complete experience, untouched.
share links, never the rooms list; the sky uses its own
sky-*testids.Verification
tsc clean, lint 0 errors (3 pre-existing warnings), build, fmt:check, 72 unit
tests, 10/10 Playwright e2e. Visually verified live: seeded dev server +
signaling, host page creates a room, viewer page screenshots the sky (sphere +
halo + orbiting petal + honest preview tag) and the join flood mid-transition.
🤖 Generated with Claude Code