Chain-specific presentation inventory and the zero-opportunity treatment pass.
Chain opportunity teaser, rails, mystery cards, detail surfaces, and empty-state exploration.
Chains survived as components but didn't survive as a flagship product surface. Current state: 18 chain-related files scattered across /chains, /trades, /discover, trade detail, chat, and the widget path. Today's canvas renders every chain presentation we have, inventories every fragment, and audits the state model so we know our starting point. No design decisions yet — just baseline and open questions.
Per §5A.5E-chain, the flagship family has 4 canonical positions. Shows which current component fills each today — and where chains don't appear at all.
Every presentation that chains take today. These are the starting visual state we'll evaluate and migrate.
Reveal to see who's in it, what they want, and what you'd give and get.
A chain found you!
4 traders · waiting for Sarah W.
Every chain-related file in the tree with its current role and a starting-verdict placeholder. Most are TBD — we'll verdict during iteration.
The plan calls for normalizing these states across all chain surfaces. Today's coverage is partial; gaps flagged below.
Today, when a user has no chain opportunities, chains are invisible:
/chains redirects to /discover (chains/page.tsx:67)<TradeChainWidget> returns null when no data<TradeChainPill> hides when no chains/discover has no chain presence at all — not even marketing copy<ChainOpportunitiesSection> supports an EmptyState, but the parent only mounts it when count > 0 unless showWhenEmpty is setThe plan flags this explicitly: "Revisit discoverability, especially the zero-opportunity case, so chains do not disappear from the product when no live opportunities exist."
Design questions that need decisions before we ship new primitives. Each locks direction for the flagship family.
Which fragments survive as-is, which get redesigned, which get deprecated?
18 chain-related files. Verdict table above is mostly TBD — needs to be filled before we can propose a new family.
Is the clothesline the signature visual language for chains across all positions, or reserved for detail?
Currently the clothesline is used everywhere (full, compact inside cards, inside sections). Flagship family may want a simpler mark for rails/teasers and reserve the clothesline for the full detail surface.
Does the mystery/reveal surface get its own primitive, or compose from the clothesline + a lock overlay?
The MysteryChainCard is inline + has a blurred preview strip. Could become <LockedOverlay>-wrapped clothesline OR a distinct named primitive.
What does the teaser look like on /discover and in the zero-opportunity state?
Today /discover has nothing about chains. Plan calls for a teaser/CTA but no prior art exists — this is fresh design territory.
How many canonical primitives does this family expose via the barrel, and what are they named?
Candidates: <ChainTeaser>, <ChainOpportunityRail>, <ChainMysteryCard>, <ChainDetailSurface>, <ChainParticipantList> (shipped). Need to decide the public surface area.
How does the state model flow (hidden → teaser → mystery → revealed → joinable → in-flight → declined → expired) actually render? One component with state-driven variants, or separate components per state?
Batch 10's StepRail used closed-enum variant for 3 registers. Chains have 8 states + 4 positions = 32 combinations. Not all are valid, but the combinatorics are large.
What's the animation handoff? ChainDiscoveryAnimation is 24KB of motion. Stays in the family, or moves to Batch 15 animation followon?
Plan §15 Animation Handoff mentions routing residuals to a dedicated follow-on. Chain-discovery animation may qualify.
Widget vs. pill — do both survive, or does one absorb the other?
TradeChainPill is a mobile progressive-disclosure wrapper over TradeChainWidget. Could consolidate if the widget is responsive.
From this inventory, we need to: