3.7 KiB
🎨 GridPilot Dev Theme — “Precision Racing Minimal”
The core idea: A UI that feels like a race engineer’s dashboard — not a game launcher, not corporate SaaS.
⸻
- Identity & Mood
The theme should communicate: • Precision (like telemetry screens) • Calm intensity (the feeling before a qualifying lap) • Authority without ego (used by serious racers) • Modern minimalism (dev-friendly, clean structure) • Soft gaming hints (subtle neon touches, not RGB vomit)
It appeals equally to: • Devs (clean, modular, readable components) • Gamers (immersive, familiar atmosphere) • Simracers (motorsport seriousness)
⸻
- Visual Language
Primary Look • Dark, matte surfaces • Thin, crisp separators • Soft glow accents in blue / cyan / purple • Avoid aggressive neon or gamer-overload • Subtle gradient tints (barely visible)
Color System • Base: Near-black graphite (#0C0D0F) • Surface: Deep charcoal (#141619) • Outline: Soft steel grey (#23272B) • Primary Accent: Electric blue (#198CFF) • Telemetry Accent: Aqua (#4ED4E0) • Warning: Motorsport amber (#FFBE4D)
Everything should feel instrument-grade, not decorative.
⸻
- Component Philosophy
Cards • Functional over flashy • Slight bevel or inset shadow (hint of cockpit panels) • Dense info, clean hierarchy
Tables • High-density • Thin row dividers • Highlight on hover only • Telemetry-coded status colors
Buttons • Flat by default • Glow + gradient only on hover • Snappy micro-animation (motorsport feedback)
Modals • Soft frosted blur • Fast open/close animation • Dimmed pit-lane-lighting vibe
⸻
- Motion & Feedback
Racing-inspired, but minimal: • Short accelerations (fast ease-out) • No bounces — this isn’t a game store • Hover = slight lift + color pulse • Loading = progress line (like pit limiter light) • Switching tabs = sliding underline (chicane motion)
Devs should feel the UI is responsive, not playful.
⸻
- Layout Structure
Think “Telemetry Workspace”: • Sidebar = dashboard rail • Header = control bar • Content = track map / data table zone • Right panel = session or context info
Everything modular, easily replaceable, easy to reason about.
⸻
- Tone for Dev-Facing Text • Short • Neutral • Calm • Technical • Real-world language (not corporate slang)
Examples: • “Add race” • “Review protest” • “Session updated” • “Export standings” • “Sponsor payout queued”
No hype. No marketing tone inside the app.
⸻
- Emotional Target
Users should feel: • In control • Supported • Efficient • Connected to motorsport culture • Trusting (nothing looks cheap or gimmicky)
It’s basically:
“A premium cockpit dashboard… built by people who race and code.” ⸻
- UI Layering & Primitives
To maintain architectural integrity and prevent "div wrapper" abuse, we enforce a strict layering boundary:
Semantic UI (apps/website/ui/)
- Building blocks for components:
Card,Panel,Button,Table,Stack,Grid. - Restricted flexibility: Semantic layout components (like
Stack,Grid) are restricted to layout-only props. They do NOT allow styling props (bg, border, etc.). - Public API: These are the only UI elements that should be imported by
components/orpages/.
Components (apps/website/components/)
- Domain-specific:
RecentRacesPanel,DriverCard,LeagueHeader. - No raw HTML: Components must use semantic UI elements. Direct use of raw HTML tags is forbidden.
Rule of thumb: If you need a styled container in a component, use Panel or Card. If you need a new type of styled container, create it in ui/ using primitives.