๐จ Design Playbook
TrueBalance ร TrueCredits Hackathon ยท June 11โ12, 2026 ยท all teams ยท deploy playbook
Feed it to your Claude session โ that's the whole workflow:
Machine-readable original: /playbooks/design.md ยท This is a stylist, not an architect โ don't restructure, just paint.
1 ยท One can of paint โ TrueBalance tokens
Paste this :root block once (a global CSS file, or a <style> in your <head>). Then reference the variables everywhere โ never hard-code a hex again.
:root {
/* brand โ the ONE accent. use sparingly. */
--tb-orange: #FA823B; /* primary action / selected / progress */
--tb-orange-press: #E36C25; /* pressed */
--tb-orange-soft: #FEF2EB; /* secondary action surface */
/* surface + ink */
--tb-bg: #FFFFFF; /* page background */
--tb-surface: #F5F5F5; /* cards, tertiary fills */
--tb-border: #DCDDDF; /* dividers, borders */
--tb-text: #131E29; /* primary text */
--tb-text-sub: #7E868D; /* secondary text, captions, placeholder */
/* status (only when you mean it) */
--tb-error: #FF2E34;
--tb-success: #1DB66B;
--tb-info: #1879FF; /* also focus ring */
--tb-warning: #EB9D00;
/* spacing rhythm โ pick from this scale, don't free-hand */
--sp-xs: 8px; --sp-sm: 10px; --sp-md: 16px; --sp-lg: 20px; --sp-xl: 24px; --sp-2xl: 32px;
/* corner + lift */
--r-sm: 6px; --r-md: 10px; --r-lg: 12px; --r-pill: 9999px;
--shadow-1: 0 0 2px 0 rgba(0,0,0,.12); /* subtle */
--shadow-3: 0 0 8px 0 rgba(0,0,0,.12); /* card */
--shadow-4: 0 8px 8px 0 rgba(0,0,0,.12); /* raised / sticky */
/* type โ 3 tiers is enough */
--font: 'Roboto', -apple-system, 'SF Pro Text', system-ui, sans-serif;
/* head: 26px/700 ยท subhead: 18px/700 ยท body: 16px/400 ยท caption: 12px/400 */
}
Design System โ your source of truth, not a vibe:
- ๐จ TrueBalance DS โ Figma
- ๐ฅ๏ธ Live components
2 ยท Six paint moves
Apply in order, ~5 minutes each. Stop when it looks calm and intentional.
- Background & ink โ kill the raw black-on-white.
background: var(--tb-bg); color: var(--tb-text);and wrap content in a centered container (max-width: 720โ960px; margin-inline: auto; padding: var(--sp-lg)). - One accent, one place โ
--tb-orangegoes on the primary action only (the main button/CTA). Everything else stays neutral. One orange per screen beats ten. - Spacing rhythm โ replace ad-hoc margins with the
--sp-*scale. Default gap =--sp-md(16px). Consistency reads as "designed." - Corners & lift โ buttons/cards get
border-radius: var(--r-sm)andbox-shadow: var(--shadow-3). Things sit on the page instead of bleeding into it. - Type hierarchy โ 3 tiers, no more: head (26px/700) โ body (16px/400) โ caption (12px/400,
--tb-text-sub). Don't make everything the same size. - State paint โ give
empty / loading / errortheir own look: greyed placeholder (--tb-text-sub), a spinner, error in--tb-error. A screen that handles emptiness looks finished. (Static app? Paint the data you have โ status pills, an.emptystyle.)
Forms (most hackathon apps are forms): inputs get border: 1px solid var(--tb-border); border-radius: var(--r-sm); padding: var(--sp-sm), label in caption type, and a --tb-info focus ring (outline: 2px solid var(--tb-info) on :focus).
3 ยท AI-slop tells to avoid โ
If your app shows any of these, it reads as "machine-generated." Cut them.
- Purple/violet gradient hero (the #1 AI-slop signature)
- Lorem ipsum / placeholder copy left in
- One single screen, no empty/loading/error states
- Hard-coded hex values instead of the tokens above
- Emoji sprinkled as decoration (๐โจ๐ in headings/buttons)
- The generic "5-section landing" template (hero โ features โ testimonials โ pricing โ CTA)
- Stock/generic icon dump with no relation to your content
- Low contrast โ grey text on grey, fails WCAG AA (4.5:1)
4 ยท 60-second check โ
- Is
--tb-orangeused in exactly one place per screen (the primary action)? - Zero hard-coded color in your own rules โ everything
var(--tb-*)? (Hex literals are fine inside:root.) - Do empty / loading / error states exist and look intentional?
- Is body text
--tb-texton--tb-bg(contrast passes AA)?
Four out of four = shipped. That's the touch.