Skip to content

design: Constellation direction + phase A prototype (The Stage)#64

Merged
knzeng-e merged 6 commits into
mainfrom
design/constellation-phase-a
Jul 5, 2026
Merged

design: Constellation direction + phase A prototype (The Stage)#64
knzeng-e merged 6 commits into
mainfrom
design/constellation-phase-a

Conversation

@knzeng-e

@knzeng-e knzeng-e commented Jul 4, 2026

Copy link
Copy Markdown
Owner

Constellation design track: direction + Phase A prototype (The Stage)

Two commits: the design direction document, then the Phase A prototype.

The direction (docs/design/dotify-constellation-ux.md)

The next visual chapter after Living Light, built on what the code already has
(the aura engine derives a deterministic light per work and paints the field):
works and people as dots (spheres of light), rooms as constellations of
real presence, the catalog as a calm navy sky. Three rules govern every
effect: light is presence (never decoration; every animated pixel maps to real
data), one hero effect per surface, and darkness is the stage floor. Explicit
anti-goal: decorative spinning-galaxy crypto aesthetics. Phasing: A (The Stage,
Listen), B (The Sky of rooms), C (micro-moments: dot-birth loader, unlock
ritual, reaction petals, studio orbit). Ticket 19-constellation-design-track.md
tracks the phases under the design-track rules.

Phase A prototype (this PR's second commit)

ListenView gains The Stage: a rail where covers sit on a shallow arc
(elevation/tilt/scale from distance to rail center, one rAF pass on
scroll/resize), an aura-colored lamp cone that travels to the
hovered/focused track while the rest dims to theater darkness, and a
holographic glare that only sweeps tracks the wallet has genuinely
unlocked. The selected (or first) track opens the show with the lamp lit.

  • Honesty rule holds: lamp color is the track's real aura (auraForTrack),
    glare keys off the real catalogAccessByTrackId, the chip shows the real
    access label.
  • CSS + requestAnimationFrame only. No WebGL, no new dependencies, so the
    single-file Bulletin build is unaffected.
  • prefers-reduced-motion gets a dignified static state: flat rail, no lamp
    travel, aura outline on the lit work.
  • The stage uses its own stage-* testids; the e2e-load-bearing track-card
    selectors stay unique on the untouched catalogue grid below (the library
    view).
  • docs/index.html intentionally not updated: tokens and palette are
    unchanged; the GitHub Pages alignment happens when the direction ships
    product-wide (noted in ticket 19).

Verification

tsc clean, lint 0 errors (3 pre-existing warnings), build, fmt:check, 72 unit
tests, 10/10 Playwright e2e, plus a visual check on a seeded dev server
(screenshots of the lamp/arc/dimming behavior).

🤖 Generated with Claude Code

knzeng-e and others added 2 commits July 4, 2026 14:43
Formalize the next visual chapter after Living Light: works and people as
points of light (dots), rooms as constellations of real presence. The document
specifies the concept, three principles (light is presence, one hero effect
per surface, darkness as the stage floor), per-surface specs (The Stage, the
Sky of rooms, the Theater, Into orbit, one loading vocabulary), the motion
grammar, the technical constraints (single-file Bulletin build, OGL over
three.js, aura engine as the single color source, e2e stability), and the
A/B/C phasing. Ticket 19 tracks the build phases under the design track rules.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add the Listen view's hero effect from the Constellation direction: a stage
rail where covers sit on a shallow arc (elevation/tilt/scale derived from
distance to rail center, computed via one rAF pass on scroll/resize), an
aura-colored lamp cone that travels to the hovered/focused track while the
rest of the rail dims, and a holographic glare sweep reserved for tracks the
wallet has genuinely unlocked. The selected (or first) track opens the show
with the lamp already lit.

Honesty rule holds: lamp color is the track's real aura, the glare keys off
catalogAccessByTrackId, the chip shows the real access label. CSS + rAF only,
no WebGL, no new dependencies. prefers-reduced-motion gets a static state
(flat rail, no lamp travel, aura outline on the lit work). The stage uses its
own stage-* testids so the e2e-load-bearing track-card selectors stay unique;
the catalogue grid below is untouched as the library view.

Verified: tsc clean, lint 0 errors, build, fmt:check, 72 unit tests, 10/10
Playwright e2e, plus visual check via seeded dev server screenshots.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@netlify

netlify Bot commented Jul 4, 2026

Copy link
Copy Markdown

Deploy Preview for muzinga ready!

Name Link
🔨 Latest commit 9617616
🔍 Latest deploy log https://app.netlify.com/projects/muzinga/deploys/6a4a5d9272ee0100082dafb8
😎 Deploy Preview https://deploy-preview-64--muzinga.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

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>
knzeng-e added 2 commits July 5, 2026 15:32
design: Constellation phase C - micro-moments
design: Constellation phase B - The Sky of rooms
@knzeng-e
knzeng-e merged commit db7be07 into main Jul 5, 2026
8 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant