Pattern batches covering chat surfaces, row families, named patterns, and step rails.
Chat surface migration references and audit fixtures.
I still have the Olympus body available if you want to bundle the strap too.
That works for me. Can you send one more photo of the lens mount?
Quick note: based on the recent comps, that body plus strap is landing in a fair range if the shutter is healthy.
Uploading it now. The mount is clean and there is no visible corrosion.
I still have the Olympus body available if you want to bundle the strap too.
Quick note: based on the recent comps, that body plus strap is landing in a fair range if the shutter is healthy.
That works for me. Can you send one more photo of the lens mount?
Pick a chat from the sidebar to continue the conversation, or start a fresh one
Start trading to begin chatting with other traders. Every trade starts with a conversation.
Ask questions about trades, get recommendations, or explore the marketplace
Hey wolfenstyne
Need a second opinion on a trade, or looking for your next swap?
Quick prompts
Quick note: based on the recent comps, that body plus strap is landing in a fair range if the shutter is healthy.
I still have the Olympus body available if you want to bundle the strap too.
That works for me. Can you send one more photo of the lens mount?
Quick note: based on the recent comps, that body plus strap is landing in a fair range if the shutter is healthy.
Uploading it now. The mount is clean and there is no visible corrosion.
I still have the Olympus body available if you want to bundle the strap too.
That works for me. Can you send one more photo of the lens mount?
Quick note: based on the recent comps, that body plus strap is landing in a fair range if the shutter is healthy.
Pick a chat from the sidebar to continue the conversation, or start a fresh one
Start trading to begin chatting with other traders. Every trade starts with a conversation.
Ask questions about trades, get recommendations, or explore the marketplace
Hey wolfenstyne
Need a second opinion on a trade, or looking for your next swap?
Quick prompts
Quick note: based on the recent comps, that body plus strap is landing in a fair range if the shutter is healthy.
Row and micro-pattern family for trade rows, note rows, and toggle rows.
Foundational row. Everyone composes this. Tone × variant × state matrix; size + align knobs.
Trade-domain wrapper. state=removing|adding drives tone/variant; built-in remove/undo button cluster. Absorbs what the plan originally scoped as a separate PendingAdditionRow.
Note-domain wrapper. Locks tone=note + paper typography. Sits inside vintage-paper surfaces. size=sm for compact detail sheets, md for full-page wants lists.
Distinct geometry: leading indicator + fixed-width key + flex value + trailing actions. State drives shell tint; tone is the explicit override for confidence signals.
Label + description stack + trailing control. No leading media — this is not a MediaRow default. Two materials (standard / note) for forms inside vintage-paper surfaces.
Inline pill with × button. Not a row — a selection affordance. Two intents (accent / neutral) cover selected-user, selected-filter, and tag-with-remove contexts.
Notifications have only one consumer in the app, so they compose MediaRow directly at the callsite rather than hiding behind a thin <NotificationRow>. Endgame principle: avoid generic wrappers.
Named pattern tail for profile heroes, badge chips, and note surfaces.
Translucent glass-morphism shell for hero-class inputs. Not composed on Card — Card is for content panels, GlassBar is for floating chrome. Two consumers: SearchBar widget, AIEntryPrompt in the landing hero.
Tall page hero with avatar / identity block / action cluster. Page chrome (flat bg-background with border-b edge), not a Card surface. Used on the public trader profile; dissolves the prior anti-slop-exception div.
@ada
Vintage electronics + original mid-century books. Happy to pick up or ship within NYC.
@grace
Compact elevated chip — icon + title + caption + optional trailing. asChild Slot for Link/button passthrough. Collapses the trader page's two raw chip shapes (badges grid, recent trades list) into one primitive.
First Trade
March 3, 20255-Star Trader
April 12, 202510 Trades
April 16, 2025Pinned index-card for chain participants. Owns the PushPin overlay + variant tint + current-user state that ChainParticipantList used to inline with two anti-slop exceptions.
Paper-sticky-note surface container. Header + body slots, optional paperclip overlay. Highest-impact extraction in this batch — 8 raw paper-sticky-note divs across routes collapse into one primitive.
Open to anything — surprise me!
Compact padding with a Paperclip slot. The overlay positioning is owned by the Paperclip atom; VintageNoteItem just passes it through.
A plain paper-sticky-note panel with no heading. Used when the body already owns its own title typography (post detail sheet, etc.).
Closed-enum StepRail primitive and its migrated evidence sites.
Three live evidence sites currently hand-roll a stepper shape. Goal: pick the API (Option A composable / B data-driven / C specialized names) before we author the primitives, then migrate all three sites.
WizardStepRail (post creation, mobile). Numbered circles + check-mark completion, on paper-notebook surface. Connector is a horizontal progress bar behind the markers.
NotebookStepItem (post creation, desktop sidebar). PushPin thumbtack for current step, filled dot for completed, hollow dot for upcoming. Red scribble-strikethrough over completed labels. Dotted vertical connector between steps.
Group-trade creation header. Compact rounded-pill chips with leading icon + (responsive) label, hairline connector between chips, on chromebar surface — not on paper.
All three render identical DOM. The decision is about authoring ergonomics, closure (can callers reach inside?), and how we handle the three visual registers (paper-numbered, paper-pinned, chrome-icon-chip).
// Composable parts. Markers + connectors are the atoms.
<StepRail orientation="horizontal" surface="paper">
<StepMarker state="completed" variant="numbered">
<Check />
</StepMarker>
<StepConnector variant="bar" active />
<StepMarker state="current" variant="numbered">2</StepMarker>
<StepConnector variant="bar" />
<StepMarker state="upcoming" variant="numbered">3</StepMarker>
</StepRail>// Data-driven. One JSX node, preset variants.
<StepRail
variant="numbered" // "pinned" | "iconChip"
orientation="horizontal" // "vertical"
surface="paper" // "chrome"
steps={[
{ key: "category", label: "Category" },
{ key: "details", label: "Details" },
{ key: "photos", label: "Photos" },
{ key: "review", label: "Review" },
]}
currentStep="details"
completedSteps={["category"]}
onStepClick={goToStep}
/>// Three named primitives, shared atoms under the hood.
<StepRail steps={stepsH} currentStep="details" completedSteps={["category"]} />
<StepStack steps={stepsV} currentStep="details" completedSteps={["category"]} />
<StepChipRow steps={chipSteps} currentStep="items" />All three shapes fit a common data model: ordered steps, one current, rest completed-or-upcoming. That's exactly what Option B encodes. Closed variant + closed orientation + closed surface cover every combination we have and most we can imagine. Callers never arrange markers by hand; the primitive enforces visual consistency across the three registers.
Option A is tempting for composability but earns its keep only if we expect callers to need custom marker/connector arrangements — and we don't. Option C spreads the logic across three names for a three-shape inventory; if a 4th register shows up, we add a fourth name rather than a fourth variant, which grows the API faster than it has to.
Emergency hatch: if a callsite needs a shape that doesn't map to a preset variant (unlikely, but possible in the trade-chain redesign in Batch 10a), we promote the shape to a new variant — we do not add a className override. Option B stays closed.
Proposed shipped surface area:
<StepRail variant="numbered"|"pinned"|"iconChip" orientation="horizontal"|"vertical" surface="paper"|"chrome" steps={…} currentStep completedSteps onStepClick /><StepChip> primitive. The icon-chip register is just variant="iconChip". The plan says ship <StepChip>only if the pill form doesn't collapse — it does.StepMarker, StepConnector) live in the same file but are not exported from the barrel — callers stay on <StepRail>.variant="pinned" owns the PushPin marker + scribble-strikethrough + clickable back-nav contract already in NotebookStepItem.User signed off on Option B — <StepRail> shipped atcomponents/patterns/step-rail.tsx. Three live evidence sites migrated: WizardStepRail + NotebookStepItem (both deleted as single-consumer wrappers, per Batch 7 endgame principle; NotebookStepper now composes <StepRail> directly) and the group-trade chip row in /trade/new/group.