Skip to content

feat(dashboard): Lemonade theme with theme switching#614

Merged
Lightheartdevs merged 12 commits intomainfrom
feat/dashboard-lemonade-theme
Mar 24, 2026
Merged

feat(dashboard): Lemonade theme with theme switching#614
Lightheartdevs merged 12 commits intomainfrom
feat/dashboard-lemonade-theme

Conversation

@Lightheartdevs
Copy link
Collaborator

Summary

  • Adds a complete theme system to the dashboard with Dream (dark/indigo) and Lemonade (cream/gold) themes
  • Sun/Moon toggle in the sidebar switches between themes
  • Theme persists across page reloads via localStorage
  • No flash of wrong theme on load (inline script in index.html)

Implementation

  • CSS custom properties on :root controlled by data-theme attribute — no Tailwind plugins needed
  • ThemeContext (React context) manages state + localStorage persistence
  • 15 component files updated from hardcoded colors to theme-aware Tailwind classes
  • Semantic status colors (red/green/yellow) unchanged — they mean the same thing in both themes

Files changed

Type Files
New src/contexts/ThemeContext.jsx
Config tailwind.config.js, index.html, src/index.css, src/main.jsx
Components App.jsx, Sidebar.jsx, SetupWizard.jsx, FeatureDiscovery.jsx, PreFlightChecks.jsx, SuccessValidation.jsx, TroubleshootingAssistant.jsx
Pages Dashboard.jsx, Models.jsx, Settings.jsx, Voice.jsx

Test plan

  • npm run build passes (verified locally)
  • Dream theme: dashboard looks identical to before
  • Lemonade theme: warm cream background, gold accents, white cards
  • Toggle persists across page reload
  • No flash of wrong theme on initial load
  • Status indicators (red/green/yellow) unchanged in both themes

🤖 Generated with Claude Code

Lightheartdevs and others added 12 commits March 24, 2026 12:17
Adds a complete theme system to the dashboard with two themes:
- Dream (default): existing dark theme with indigo accents
- Lemonade: warm cream/gold theme matching AMD Lemonade branding

Implementation:
- CSS custom properties on :root controlled by data-theme attribute
- ThemeContext (React context) manages state + localStorage persistence
- Tailwind config extended with theme-aware color tokens
- Flash prevention script in index.html reads theme before React loads
- Sun/Moon toggle in sidebar switches between themes

Updated 15 component files to use theme-aware classes. Semantic
status colors (red/green/yellow) remain hardcoded — they mean the
same thing in both themes.

Build verified: vite build passes with zero errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… Arctic

7 total prebuilt themes users can cycle through via Palette button:
- Dream (dark/indigo) — default
- Lemonade (warm cream/gold) — AMD branding
- Light (clean modern futuristic)
- Midnight (deep navy/electric blue)
- Forest (dark green/emerald)
- Sunset (warm dark/orange coral)
- Arctic (cool light/ice blue)

Theme toggle changed from Sun/Moon to Palette icon with cycle behavior.
Flash prevention script updated to handle all theme names.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Darken text colors and accent for better readability on light background:
- text: #2D2A26 → #1A1708 (near-black instead of brown)
- text-secondary: #6B6560 → #4A4535
- text-muted: #9C9590 → #7A7260
- accent: #D4A017 → #B8860B (richer gold, better on white)
- accent-light: #F5C518 → #D4A017
- border: #E5DDD0 → #D4C9B0 (more visible)
- card: #FFFFFF → #FFFDF5 (slight warm tint)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…randing

Implements the full design spec from lemonade-server.ai:
- Page bg #F6EFD9 (warm parchment), cards #FBF7EA (bright ivory)
- Sidebar #EFE4C6 (denser anchor tone)
- Text #262626 (deep charcoal), secondary #6B665C, muted #8A8478
- Accent #F5C518 (restrained yellow for CTAs only)
- Border #E1D4B0 with subtle card shadows

New theme variables: --theme-sidebar, --theme-card-shadow,
--theme-card-radius — applied to all 7 themes with appropriate
defaults (shadows for light themes, none for dark).

Design principles applied:
- Background darker than cards, cards lighter than sidebar
- Primary text always crisp, yellow means "action" not "everything"
- Clear tonal separation between surface levels

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
84 remaining text-zinc-* classes replaced across 11 component files:
- text-zinc-100/200/300 → text-theme-text (primary)
- text-zinc-400 → text-theme-text-secondary (body/descriptions)
- text-zinc-500/600 → text-theme-text-muted (metadata/hints)
- bg-zinc-700 → bg-theme-border (progress tracks, disabled states)

Also added global card styling rule that applies theme shadow and
radius to all rounded-xl elements via CSS variables.

Added --theme-dark-contrast: #1E2240 to Lemonade theme for future
use in charts, log widgets, and selected states.

Preserved: disabled:bg-zinc-700, status dot colors (bg-zinc-500/600
in Dashboard/Settings), code block backgrounds, ErrorBoundary styles.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
35 instances of text-white changed to text-theme-text for elements
on card/page backgrounds (invisible on light themes):
- Page titles: Dashboard, Settings, Voice, Models
- Section headers: System Status, Services
- Feature card titles and descriptions
- Metric card values (GPU%, VRAM, temps, model name)
- Service card names
- SetupWizard step headings
- Modal titles and form inputs
- Settings info row values

Kept text-white on: accent buttons, green buttons, active nav,
mic icons on colored bg, chat bubbles on accent bg.

Also fixed: sidebar logo uses text-theme-text instead of accent,
feature card icons use text-theme-text-secondary instead of accent.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Per design review feedback, focused on component polish not palette:

Feature cards:
- Border softened from border-2 to border, lighter default
- Icon container uses bg-theme-bg for subtle depth
- Title bumped to font-bold, description given leading-relaxed
- Status pills refined: smaller text, softer bg, font-medium
- Tighter icon-to-title spacing (mb-4 → mb-3)

Metric cards:
- Labels: smaller (text-xs), uppercase tracking, quieter
- Values: larger (text-2xl), bolder — dominant element
- Subvalue: smaller (text-[11px]) for clear hierarchy
- Progress bars: slightly thicker (h-1.5), softer track

Service cards:
- More vertical padding (py-5)
- Status dot smaller (w-1.5) and subtler
- Metadata indented and smaller (text-[11px])
- More breathing room between name and port info

Sidebar logo:
- More padding (pt-5 pb-4) for breathing room
- Logo opacity removed — full contrast
- Version text upgraded from text-muted to text-secondary
- Collapsed logo: font-extrabold

Lemonade palette:
- Cards brightened (#FBF7EA → #FDFBF2)
- Borders softened (#E1D4B0 → #E8DFC8)
- Shadow refined (tighter, slightly stronger)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…sence

Per 8.5/10 brand review, focused on the four identified gaps:

Layer separation:
- Page bg darkened (#F6EFD9 → #F0E8CF) for stronger card contrast
- Cards stay bright (#FDFBF3) — now clearly elevated above canvas

Feature cards:
- More padding (p-7), hover adds shadow-md for depth
- Title: font-extrabold at 15px — stronger anchor
- Description: 13px at 80% opacity — deliberately quieter
- Icon padding restored (p-3) for visual weight

Stat cards:
- Labels: 10px, semibold, widest tracking, 70% opacity — very quiet
- Values: 26px, bold, tight leading — dominant element
- Progress track: thinner (h-1), 40% opacity — more refined

Service tiles:
- Title/metadata gap increased (mb-3)
- Metadata: 10px at 70% opacity — clearly subordinate
- Title: 13px for comfortable reading

Sidebar brand:
- Header padding increased (pt-6 pb-5) for presence
- Collapsed logo: text-xl font-black
- Tagline tracking widened, tighter to version line

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…aphy

Three targeted tweaks per 9/10 review:

1. Vertical rhythm:
   - Feature cards → System Status gap: mb-8 → mb-12
   - System Status → Services gap: mb-8 → mb-12
   - Section header margins: mb-4 → mb-5

2. Sidebar quick links quieted:
   - Icons: 20px → 16px
   - Label text: default → 12px
   - Status badges: "OPEN"/"OFFLINE" → "OPEN"/"—" at 9px, 50% opacity
   - Row spacing: py-2.5 → py-1.5, space-y-1 → space-y-0
   - Section header: smaller, 60% opacity, widest tracking
   - Border: 60% opacity

3. Stat card typography refined:
   - Labels: 10px → 9px, 50% opacity, wider tracking
   - Icons: 14px → 13px, 50% opacity
   - Values: 26px → 28px, leading-none (dominant focal point)
   - Subvalues: 11px → 10px, 70% opacity
   - Progress bars: h-1 → 3px, 30% opacity track

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reduced to 4 curated themes: Dream, Lemonade, Light, Arctic.
Removed CSS blocks and theme registry entries for Midnight, Forest,
Sunset. Users on a removed theme fall back to Dream on next load.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Changed coming status border from border-theme-border/40 to
border-transparent. The card still has opacity-40 to show it's
inactive, but no outline competing with the background.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The visible outline on LLM Observability was the card's bg-theme-card
surface showing against the darker page. Moved bg into statusColors
map so coming cards use bg-theme-bg/50 (nearly invisible) instead of
the elevated card surface.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Lightheartdevs Lightheartdevs merged commit 5edb6e3 into main Mar 24, 2026
13 of 20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant