Skip to main content
Every vly app ships with a light theme and a dark theme, plus a system preference toggle. Theme tokens live in CSS variables — change them in one place, the whole app updates.

How users experience theming

By default, every vly app:
  • Detects the user’s OS preference on first visit (light / dark).
  • Saves the user’s explicit preference in localStorage.
  • Provides a theme toggle (sun / moon / monitor icons) in the user dropdown.
To customize the toggle UI or its location, just prompt: “Move the theme toggle to the bottom-left of the sidebar.”

How tokens work

Open app/globals.css:
shadcn/ui components reference these variables (bg-primary, text-foreground, etc.). Change a variable; every consumer updates.

Changing the brand color

The fastest path:
vly updates the CSS variables, the Tailwind config, and any hardcoded references. One prompt.

Adding a new color

vly extends the tokens, updates tailwind.config.ts, and references the new color in the relevant components.

Per-page theme overrides

Most apps use one global theme. For unusual cases (e.g., a marketing landing page that’s always dark regardless of user preference):
app/marketing/layout.tsx
Anything inside renders with dark tokens.

Tailwind config

The lower-level config file.

shadcn/ui components

The components that consume the tokens.

Typography

Font and scale tokens.
Last modified on April 18, 2026