// wf-intro.jsx — System framing artboards: the two directions + entry-routing spine. const { Screen: IScreen, Wordmark: IWordmark, WF_T: IT, WF_DS: IDS } = window; const { Eyebrow: IEyebrow, Soul: ISoul, Tag: ITag } = IDS; // ── The two directions, side by side ─────────────────────────────────────── function TwoDirections() { return (
SD-0001 · MVP wireframes
One A/B, run across all four screens

Two bets on the lasting frame

These are the first screens of a product headed for hundreds. The variation isn't cosmetic — each direction is a different answer to how much frame to commit to on day one. Same content, same tokens, same honest copy; different skeleton.

Both honor the OHM bar. No trial clock, no plan wall, no fabricated metrics or locked-feature teasers. Empty is an honest, finished state — not a sales surface. Attention states use gold, since the palette carries no red.

); } function DirCard({ letter, name, bet, lines, best, cost, tone }) { const c = tone === 'gold' ? IT.gold : IT.lilac; return (
{letter}
{name}
{bet}
); } function TradeRow({ k, v, c }) { return (
{k} {v}
); } // ── Entry routing — the exhaustive arrival rule (§6.5) ───────────────────── function EntryRouting() { const lanes = [ { sess: 'No session', store: '—', arrow: 'Landing', puc: 'PUC-1', tone: 'mute' }, { sess: 'Valid session', store: 'No storefront', arrow: 'Create storefront', puc: 'PUC-5', tone: 'gold' }, { sess: 'Valid session', store: 'Has storefront', arrow: 'Admin shell', puc: 'PUC-6', tone: 'lilac' }, ]; return ( The shared spine

Entry routing

One server answer — GET /api/auth/me — decides where every arrival lands. Every screen here obeys it.

{lanes.map((l, i) => { const c = l.tone === 'gold' ? IT.gold : l.tone === 'lilac' ? IT.lilac : IT.mute; return (
{l.sess} {l.store}
{l.arrow} {l.puc}
); })}

Exhaustive by design — no state lands nowhere. A merchant without a storefront is guided to create one, never stranded.

); } function Cond({ children }) { return {children}; } // ── Direction A, chosen — the system this locks in ───────────────────────── function SystemA() { const patterns = [ ['Entry surfaces', 'One centered card on the midnight sky — landing, sign-in, create. Content-led, no side chrome.'], ['Admin', 'A slim top bar over a centered state. The storefront name is the anchor; no sidebar yet.'], ['Actions', 'One primary gold CTA per screen. Lilac for secondary links. Ghost buttons stay rare.'], ['Attention', 'Errors and waits read in gold — the palette carries no red. Honest failure, never a fake success.'], ['Emptiness', 'Honestly empty everywhere: no zeroed tiles, no locked-feature teasers, no manufactured aspiration.'], ]; return (
SD-0001 · MVP wireframes
Chosen direction

Quiet centered

A single calm column on the sky, with the least chrome the job allows. The honest voice carries the rest — and every screen here uses the same tokens, the same copy register, the same primary action.

{patterns.map(([k, v], i) => (
{k} {v}
))}

Deferred, not forgotten. When the product grows past forms, a persistent nav frame gets introduced as its own deliberate step — designed then, against real sections, not guessed at now.

); } Object.assign(window, { SystemA, TwoDirections, EntryRouting });