// 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 (
{lines.map((l, i) => (
-
·{l}
))}
);
}
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 });