Cade Design system

Historical delivery notes. Use the current design system and React workbench for current implementation.

01 · Product as shipped

What the client ships today

The client's own reference captures from the handoff bundle (29 Sep 2026, rendered from their storybook in fallback fonts) and the live site as photographed on 30 Sep 2026 in the real faces. Every card names its storybook story or its URL; a click opens the full capture. The Meme Madness campaign these screens run ended on 21 Sep 2026: the shell, the market page and the sports field are what v2 builds on.

Figma page 01 ↗

Homepage

the shell v2 keeps, the campaign content it replaces

Homepage, desktop 1440
Homepage · desktop 1440core-landing-page--desktop
Homepage, mobile 390
Homepage · mobile 390core-landing-page--mobile-sections-and-brand

Coin market

the market detail page; stocks reuse it as is

Coin market, desktop 1440
Coin market · desktop 1440meme-madness-market-detail--all-star-live
Coin market, mobile
Coin market · mobile 415meme-madness-market-detail--all-star-live-at-390

Sports: the Cade Cup soccer field

the field, the ball, the scoreboard and the event label that the football and basketball centres extend

Soccer field, desktop 1440
Soccer field · ball movement · 1440handoff-soccer-reference--ball-movement
Soccer field, mobile 390
Soccer field · mobile 390handoff-soccer-reference--mobile
Soccer field, half time
Soccer · half time · 1200handoff-soccer-reference--half-time
Soccer field, waiting for the match
Soccer · waiting for match · 1200handoff-soccer-reference--waiting-for-match

Foundations, buttons, brand

their storybook's own audit pages: the source of the tokens and the button families in 03

Foundations, colour tokens audit
Foundations · colour tokens · 1440design-system-01-foundations-color-tokens--audit
Buttons, CTA slats
Buttons · CTA slats · 1200design-system-05-buttons-slat-button--cta-slats
Cade brand, all assets
Cade brand · all assets · 1440design-system-21-brand-cade-brand--all-assets

Live cade.market · 30 Sep 2026

the production site in its real faces; the homepage is the Meme Madness wrap page today, and /meme-madness serves the same page

cade.market home, live, desktop
Home · desktop 1440https://cade.market/
cade.market home, live, mobile
Home · mobile 390https://cade.market/
cade.market leaderboard, live, desktop
Leaderboard · desktop 1440https://cade.market/leaderboard
cade.market leaderboard, live, mobile
Leaderboard · mobile 390https://cade.market/leaderboard
02 · v2 screens

The new screens

Open a screen directly to review the product. The current homepage is responsive at desktop and phone widths. Supporting screens below are earlier v2 explorations; their status is separate from the current homepage.

Figma page 02 ↗

Current homepage preview, three market categories

Homepage CURRENT PREVIEW

Source-based Cade components · responsive desktop and mobile · illustrative data

Open ↗
Homepage component guide with interactive button examples

Homepage components

Actions, category filters, market cards and usage rules, using the preview’s shared components

Open ↗
Live markets, the generic view

Live markets

/markets · the in-app generic view: filters and the grid, no hero

Open ↗
Football, the game centre

Football · game centre

/football · the play on the field, the pick, the drive, five states, motion in their numbers

Open ↗
Profile

Profile

/profile · one plate recipe, a real table, results that read three ways

Open ↗
Cade Cup, the NFL playoff board

Cade Cup · NFL board

/nfl/v3 · the playoff bracket with a live game on it

Open ↗
States and flows

States & flows

/states · the card in four books, the money path, the empty screens, the interaction rungs

Open ↗
The archive

Archive

/archive · earlier passes and the Meme Madness campaign pages

Open ↗
03 · Design system

Tokens, type, shapes, components

The production values, named the way the code names them. Where our earlier value differed the old one is listed, so a diff against a page built before 29 Sep 2026 explains itself. The existing Figma library and the web implementations are linked separately. The current homepage component extension is documented below; its Figma update is pending.

Figma page 03 · the design system on one page ↗

Colour · pcColor

packages/tokens/src/design-tokens.ts · click a row to copy the hex · Figma: Pumpcade / Primitives, mode Production · frontend-v1

TokenValueJobBefore 29 Sep
surfacePage#0E0D0Cthe page ground, a warm near-black#0A0A0A
surfaceRaised#161514panels#161413
surfaceOverlay#1A1816overlays, sheetssame
surfacePaper#EFE9D8the comic plate every card is printed onsame
surfaceHeroOrange#FFA800hero, CTA, the up/down ribbonsame
surfaceHeroOrangeDeep#FF7A00the orange's shadow sidesame
surfaceHeroViolet#9652EFhero violet, the head-to-head ribbonsame
surfaceHeroVioletDeep#6330D3the violet's shadow sidesame
surfacePanelViolet#210D49violet inksame
accentHighlight#FAF424countdown, plates, the stampsame
accentInfo#419FE5sport, the game-line ribbon, the event slatsame
outcomeYes#91BB4Fup, yes, the winning slatsame
outcomeNo#EA2A46down, no, the live dotsame
textOnPaper#141414ink on paper and on every accent platesame
textPrimary#EFE9D8text on the dark groundsame
textSecondary#A1A1A1meta lines, eyebrows, dates#9C9C9C
textTertiary#8773AFthe quiet grey-violetsame
borderInk#0B0B0Bthe comic keyline; shadows stay #000000 (pcShadow)#000000
textNegativeSoft#F24B61red at reading weightnot used yet
accentPink#FF8A9Ecampaign only: voting and result surfacesnot used

Three of ours have no token yet and are proposed: lilac #D9C8FF (accentLilac), dim #8C8C8C (textDim), orange deep #D95F00 (surfaceHeroOrangeDeeper). The turf greens on the fields are art, not UI: #91BB4F and #7DA831, from their gridiron artwork.

Type · three faces, three jobs

the product's own faces, self-hosted from /assets/fonts/futura · the floor: nothing on a page is set smaller than mono 12 (12.5 on the phone stage), display 14, body 13

Display · Futura PT Cond Medium
one weight, upright or oblique
hierarchy from size and case
The prediction arcade
Display · section 44 · card question 24
kicker 18 · floor 14
Will $WIF close higher at the end of this round?
Body · Futura PT Book
paragraphs, help, legal · floor 13
Every settled call mints a card. The question, your side, the figure. Post it anywhere, it links back.
Data · JetBrains Mono
values, clocks, ids, never labels · floor 12
$271,600 · 04:12 · 61%
Data · meta line
Mono Medium 12 to 13
ROUND 412 · POOL $271,600 · VOL $4.2M

Shadow · hard offset, zero blur, down-right

pcShadow 2 / 3 / 4 / 5 / 8 / 11, always #000000 · the pages use four rungs: chip 3, plate 4, panel 5, band 8 · never a blur, never a lighter colour

comicXs · 2
chip · 3
plate · 4
panel · 5
band · 8
comic2xl · 11

Silhouettes · the client's shape package

frontend-v1/packages/shapes · every polygon under its name in their code, with its Figma node, natural size, what it is for and what draws it on our pages · generated by scripts/silhouettes.mjs, so this row cannot drift from the package

Earlier SVG screens · component index

Earlier screen mappings in site/lib and the shared head. For current homepage components, use the guide above.

PartOurs (code)Theirs (frontend-v1)What it is
MarketCardCadeCard.draw()MarketRow · components/market/one card for every market: ribbon = mechanic, glyph = category, head = coin / coins / teams / ticker / mark, clock chip, two slats, bolt
NavK.nav()NavItem, WalletButton, HamburgerButtonone header for the system; the current item is the white pill
CTAK.cta()CTASlat, Button (DsButton)the yellow plate with ink type, no chevron
Category railcatRail()SportsTabALL / Memecoins / Sports / Stocks; selected = paper pill, live dot and count
Category glyphnewCadeCard.catGlyph()none yetcoin / ball / candles in ink inside the ribbon, so a category reads without colour
Scoreboardscoreboard()sports-matchscoreboard-*.svgthe yellow torn lockup, team chips, the clock slat
GridirongridironP()sports-playfieldviz-gridiron.svgbroadcast perspective, their two greens, scrimmage in paper, line to gain in yellow
The playnewdrawPlay()SoccerPitchViz (the reference)run straight, pass arc, kick dotted, the drive underneath; a tracked route when the feed carries x/y
Event slateventSlat()SoccerEventPanelthe Cade Cup blue label: clock, text, tail
Pick slabspickSlab()SlatButton (wager pair)YES / NO stamps, tilted two degrees, the price plate on the face
Live stripnewliveStrip()none yetthe ticker ribbon, the yellow LIVE FEED label, one rolling line
StatesSTATE table · /statesStatusBadge, LiveTagopen / locked / settled / voided on the card; scheduled / live / break / final / feed lost on a field

The previous catalogue, with the full component browser (every component, its variants and its spec card), is kept at catalogue-2026-09.html.

Icons

… glyphs on a 32 grid, one file each · click a tile to copy the markup

Brand kit

the product's own app/assets/brand/v1, not redrawn · … files in … families · click a colourway to download

04 · Handover

How a developer takes a screen

The current homepage uses shared HTML component renderers and the original landing shape paths. Earlier SVG screen explorations use the script workflow below. A web preview alone does not confirm a matching Figma frame or React integration.

Current homepage: site/v2/home-a/page.html, source-shapes.js, source-components.js, market-components.js and home.js. Component usage guide · State review.

One script per route

site/<route>/<route>-tail.js on the shared head site/nfl/index.html (tokens, shapes, text with the size floor, kicker, live tag, scoreboard, chip, band grouping), with site/lib/cade-shapes.js (the client's polygons, nav, CTA, footer, burst) and site/lib/marketcard.js (the card). scripts/build-pages.sh stitches them.

Bands

A page is a stack of bands, declared with B('Live markets') in code and grouped under the same name in Figma. Desktop 1440 and mobile 480 are two stages in the same file; a CSS rung at 1180 shows one at a time.

The card contract

CadeCard.draw(root, {x, y, scale, market, dark}). A market is {label, tone, cat, head, q, meta, clock, a, b}: the ribbon word and its tone (the mechanic), the category, the head kind, the question in two lines, the meta line, the clock chip, the two outcomes with their percentages.

Tokens, exported

/data/export/tokens.css, /data/export/tokens.w3c.json, /data/export/tailwind.theme.json. The values are pcColor's; the names carry both sides.

Motion

CSS classes on named SVG groups plus one SMIL path for the ball, timed in the production field's numbers (travel 0.67s, trail 0.42s, pop 0.65s). ?nomotion and prefers-reduced-motion render the settled frame.

Figma refresh

scripts/figma-import/: export-all, plan, upload, place; one use_figma call per frame; the desktop plugin tools/figma-font-swap moves the type to Futura. Update the frame in place, never add a page per iteration.

const market = {
  cat: 'sports', label: 'NFL · SPREAD', tone: C.blue, head: 'teams',
  home: { ab: 'KC', c: TEAM.KC }, away: { ab: 'DET', c: TEAM.DET },
  q: ['WILL KC COVER', 'THE -3.5 SPREAD?'],
  meta: 'Q3 04:12 · KC 21-17 DET · VOL $84.2K',
  clock: ['QTR 3', '04:12'], a: { l: 'KC -3.5', v: 61 }, b: { l: 'DET +3.5', v: 39 }
};
CadeCard.draw(stage, { x: 40, y: 792, scale: .864, market, dark: false });

Working with the client's repo

  • The design repo of record is gman-top/pumpcade-design-system: every change lands there first, rebuilt, with the overflow scan green on all routes at both widths. The plan is docs/PLAN.md; the states and widths to cover are docs/SCENARIOS.md.
  • A pull request into pumpcade/cade-design-studio is opened only when the owner says so. Nothing is pushed there in passing.
  • One pull request per screen or component family, and each one carries: the Figma section link; the pcColor tokens it uses, by name; the states it covers, from SCENARIOS.md; screenshots at 1440 and 390; the storybook story ids it maps to.
  • Copy: uppercase display, values only in the data face, "predict" and "prediction" in product copy, no em dashes anywhere (commas, colons, the middle dot).
  • A screen ships with its states (loading, empty, unavailable, scheduled, live, closed, resolved), its long-label case and its phone layout, or it is not done.
09 · Archive

Earlier passes and campaign explorations. Previous homepage concepts: Arcade and Arcade dark. These are superseded references. Other historical work: open the archive.