These principles override all other decisions.
-
Utility over decoration Every visual element must serve comprehension, navigation, or interaction.
-
Low visual noise Prefer whitespace, restrained color, and simple geometry. Avoid flourishes.
-
Predictability Similar interactions must behave identically across the site.
-
Developer-first clarity Interfaces should feel inspectable, logical, and intentional.
Base Palette
- Background: near-black blue (
#0b1020–#0f172a) - Surface (cards, panels): slightly lighter blue (
#111827) - Border/divider: muted blue-gray (
#1f2937)
Accent Colors
- Primary accent: desaturated blue (
#3b82f6or darker) - Secondary accent (optional): cyan/teal (
#22d3eerange)
Rules
-
No red or green hues.
-
Accent colors used only for:
- Primary actions
- Active states
- Focus indicators
-
Never use accent colors for large background fills.
Font Stack
- UI / body: system-ui or Inter
- Code / data: JetBrains Mono, Fira Code, or equivalent
Hierarchy
- Page title: single dominant heading
- Section headers: visually subtle, not bold-heavy
- Body text: regular weight, high contrast
Rules
- No more than two font families total.
- Avoid decorative fonts entirely.
- Use font size, not color, for hierarchy.
Structure
- Single-column default
- Max width: 960–1100px
- Centered content
Spacing
- Use a fixed spacing scale (e.g., 4 / 8 / 16 / 32)
- No arbitrary spacing values
Rules
- No full-bleed sections unless content demands it (e.g. large tables).
- Grids are functional, not decorative.
Used to contain tools.
- Flat appearance
- Subtle border, no heavy shadows
- Clear title, optional description, then content
Rule
- Cards never nest inside cards.
Types
- Primary: one per screen max
- Secondary: neutral, outline or low-contrast fill
- Tertiary: text-only
Rules
- Buttons must look clickable without hover.
- No icon-only buttons unless universally obvious (e.g. close).
- Rectangular, sharp or slightly rounded corners
- Clear labels above inputs
- Inline validation preferred over modals
Rules
- No placeholder-only labels.
- No animated input effects.
- Dense but readable
- Alternating row backgrounds allowed
- Sorting/filtering controls visible but understated
Rules
- Default to showing raw data honestly.
- No visual embellishment beyond clarity.
Required states
- Loading
- Success
- Error
- Empty
Rules
- Use text + subtle visual cue, not color alone.
- Loading indicators should be minimal (spinner or text).
- Flat hierarchy
- No hidden navigation
- Breadcrumbs only if depth > 2
Rules
- Navigation must always be visible or obvious.
- Avoid animations tied to navigation.
- Optional, never required
- Duration < 200ms
- Ease-in-out only
Rules
- No animation for decoration.
- Animations must convey cause → effect.
- Neutral
- Direct
- Slightly technical
- No marketing language
Examples
- Prefer: “Generates a CSV summary from input data”
- Avoid: “A powerful and elegant tool that supercharges…”
- Short sentences
- No exclamation marks
- No emojis
- Avoid jokes and personality flourishes
UI Text
- Verbs over nouns (“Export data”, not “Export”)
- Explicit over clever
Each project page should follow this order:
- Title
- One-sentence description
- Tool interface
- Optional explanation
- Optional implementation notes
Rules
- Tool always comes before explanation.
- No long introductions.
Even if not a priority, enforce:
- Sufficient contrast for text
- Keyboard navigation for core actions
No additional compliance requirements unless added later.
To enable style transitions:
- All colors defined as variables
- All spacing from a single scale
- All components reusable and centralized
- No inline styles
- No one-off UI decisions
Rule If a pattern appears twice, it must become a component.
Specify which you want next.