ds-badge
Rounded chip for counts and status; bold colored text on a tinted fill.
intent
Bold, bouncy, and green - every tap feels like a win.
Sprout is a re-reading of the gamified-learning aesthetic: a bright, friendly canvas where chunky rounded buttons sit on a solid colored ledge, so they look genuinely pressable and punch down when you tap them. A single saturated feather-green carries every primary action, an electric macaw-blue plays the foil, and motion is springy and celebratory - things bob, wiggle, and pop into place. Type is rounded and confident, set in heavy uppercase for actions. It feels playful, tactile, and rewarding - software that turns a chore into a streak you don't want to break. The native mode is light and sunny; flip the toggle and the system drops into a deep midnight-navy, the same indigo the source spends on its boldest section.
re-imagined from https://www.duolingo.com
Pull this design system into any project - it follows the system's tokens, recipes and rules. Run the commands yourself, or let your coding agent set it up and build.
npx synthesisui@latest loginnpx synthesisui add sprout --version 18@import "_synthesisui/ds/sprout/tokens.css";
@import "_synthesisui/ds/sprout/theme.css";Use the "Sprout" design system (slug: sprout) to: build the UI I describe next First make sure it's installed: run `npx synthesisui add sprout` if `_synthesisui/ds/sprout/` isn't in the project yet. Read these files first (highest authority first): - _synthesisui/ds/sprout/rules.md - project rules for this system (if present); obey them above everything else - _synthesisui/ds/sprout/philosophy.md - the mission, voice and principles (if present); let it shape every screen - _synthesisui/ds/sprout/v18/GUIDE.md - how to apply the system, the recipes and the token vocabulary Follow this contract (target framework: next): - First check whether this refers to UI that already exists in the project. If it does, modify only what's needed and keep the rest intact and on-system. If it doesn't, build it new. - Scope the markup with `data-ds="sprout"` (or rely on it at the app root). - Style with the design system only: reuse the `.ds-*` recipe classes and the DS-backed Tailwind utilities (`bg-primary`, `text-foreground`, `p-md`, `rounded-lg`, `font-display`…). Never use raw hex/px outside the system's scale. - Make sure `tokens.css` + `theme.css` are imported in the global CSS (see the GUIDE's "How to apply"). - Wire the behavior yourself (open/close, focus, routing) - the system ships the looks, not the JS. Composition (make it look composed, not just correct): - Cap page content with a max-width container and center it - this DS ships `max-w-app` for dashboards/wide UI and `max-w-prose` for text columns. Don't stretch content edge-to-edge. - Give the page a complete, intentional layout: clear vertical rhythm, sensible density and grouped sections. Never leave a single thin row floating on an empty screen. Deliver senior-level, production-quality code: clean structure, accessible (ARIA + keyboard), and responsive.
Paste into Claude Code, Cursor or any coding agent. From your project you can also run npx synthesisui use sprout "…".
What to install or load so the system renders at full fidelity - it ships token names and recipes, not the assets.
The system ships token names, not the fonts. Load them (Google Fonts, next/font or Fontsource) or type falls back to a generic family and loses the system's identity.
npm i lucide-reactComponents reference Lucide icon names. Install it (or swap in your own icon set) to render them.
npm i rechartsCharts are themed through your series tokens, but you bring the rendering library (the gallery uses Recharts).
Color
Named scales forged by the synthesis; semantic roles only ever point at them.
color.bee
400#ffd43b
500#ffc800
600#e0a800
700#856800
800#8f6a00
color.veil
500#000437cc
color.cloud
50#ffffff
100#f7f7f7
200#e5e5e5
300#cdcdcd
400#afafaf
500#777777
600#4b4b4b
700#3c3c3c
750#737373
800#2b2b2b
900#1a1a1a
950#0f0f0f
color.macaw
50#e8f7ff
100#c9edff
200#93dbfc
300#5cc7fa
400#38bcf8
500#1cb0f6
600#0d8fd0
700#0a6fa3
750#0774a8
800#0774a8
color.night
700#1a2a66
800#0d1745
900#060e33
950#000437
color.feather
50#f0fce8
100#dcf7c5
200#bdee92
300#97e257
400#74d62b
500#58cc02
600#46a302
700#357a02
750#378001
800#285c02
850#378001
900#1d4302
color.cardinal
400#ff6b6b
500#ff4b4b
600#e63535
700#df0000
800#b82929
color.semantic - resolved live via CSS variables
info
{color.macaw.800}
faint
{color.cloud.400}
muted
{color.cloud.750}
scrim
{color.veil.500}
accent
{color.macaw.750}
border
{color.cloud.200}
canvas
{color.cloud.100}
danger
{color.cardinal.700}
raised
{color.cloud.50}
overlay
{color.cloud.50}
primary
{color.feather.750}
success
{color.feather.850}
surface
{color.cloud.50}
warning
{color.bee.700}
foreground
{color.cloud.700}
color.series - categorical data-viz palette (bg-series-*)
series-1
series-2
series-3
series-4
series-5
series-6
series-7
series-8
Foundations
Corner radius, spacing rhythm and elevation - the physical feel of the system.
radius
spacing
shadow
Typography
Display: Fredoka · Body: Nunito · Mono: JetBrains Mono
Motion
Every keyframe runs live below, dressed in the system's own colors - durations, easing curves and the interactions they power.
keyframes - 8 live
easings
durations
interaction patterns
Tiles pop into place with a cheerful overshoot.
Content springs up and fades in.
The 3D button punches down onto its ledge.
A completed goal does a happy little tada.
Mascots and badges bob gently to stay alive.
An idle CTA wiggles to invite a tap.
Components · 45
Every value below is a token reference resolved by the renderer - hover, toggle and switch tabs to feel the states. Bespoke components are rendered from their anatomy hint.
Rounded chip for counts and status; bold colored text on a tinted fill.
intent
The signature 3D action - bold uppercase on a solid colored ledge that punches down when pressed.
intent
The bespoke streak counter - a flame and a big number that bobs to keep you coming back.
tone
The bespoke skill-tree node - a chunky circular tap target on a green ledge, the front door to a lesson.
tone
Friendly white panel with a soft 2px ledge border; lifts and pops on hover.
padding
Default
A card wearing this system.
None
A card wearing this system.
emphasis
Default
A card wearing this system.
Elevated
A card wearing this system.
A message that sits on the page like a game tile - chunky border, tinted fill and the Sprout ledge in the tone's own color. One tone per alert, never stacked.
tone
Accent
A message wearing this system.
Danger
A message wearing this system.
Neutral
A message wearing this system.
Primary
A message wearing this system.
Success
A message wearing this system.
Warning
A message wearing this system.
Field trigger that reveals a focus ring on interaction.
Rounded field with a 2px border; a soft macaw ring blooms on focus.
A chunky, pressable identity chip - round face, thick feather ring, and Sprout's signature ledge underneath so it sits on the page like a game piece. Image via ds-avatar-img.
size
A party of game pieces - avatars overlapping with a bold cloud ring so every face stays chunky and readable.
A pressable filter pill with the Sprout ledge - tap it and it feels like a win. data-active="true" fills it feather.
active
Inline text link, for words inside sentences - the underline is the affordance, so it reads as a link without relying on colour alone. For standalone actions use button; for navigation chrome use navbar/sidebar items.
Mono uppercase eyebrow with wide tracking - the HUD microtype that labels a section ("01 · ECOSYSTEM"). Use above headings; data-tone="accent" for the highlighted variant.
tone
HUD data readout - a mono tabular value over a micro uppercase label ("42s · AVG RENDER"). The corner instrument of cinematic scenes; pair with the count-up hook for live-feeling numbers.
Display heading on the system's type scale - the display family at a semibold weight. Pick a `size` step (defaults to 2xl) so headings stay on-scale without hand-set styles.
size
Body copy on the system's type scale. Pick a `size` step and a `tone`; defaults to base body text on the foreground color - so text stays on-system without hand-set styles.
size
tone
Vertical layout primitive - a flex column with a token `gap` (defaults to md). Stack sections/cards without hand-set flex styles.
gap
align
Horizontal layout primitive - a centered flex row with a token `gap` (defaults to sm). Compose toolbars/inline groups without hand-set flex styles.
gap
justify
align
Binary toggle - the track wears the system, on flips primary. Set data-state="on" on the track and the thumb.
state
Native checkbox/radio tinted to the system via accent-color. Put ds-checkbox on an <input type="checkbox"> (or radio).
Native range slider tinted to the system via accent-color. Put ds-slider on an <input type="range">.
Native radio tinted to the system via accent-color. Put ds-radio on an <input type="radio"> and give grouped radios a shared name.
Numeric stepper - a value flanked by minus/plus controls. Compose ds-stepper with two ds-stepper-button (each a <button>; add the disabled attribute at a bound) and a ds-stepper-value between them.
Step indicator for a multi-step flow (wizard/checkout/onboarding). Compose ds-steps with ds-steps-step and ds-steps-connector between them; nest a ds-steps-marker (the numbered circle) and ds-steps-label inside each step. Mirror data-state="done|active|upcoming" on BOTH the step and its marker (like switch on/off).
Hairline separator. Horizontal by default; data-orientation="vertical" makes a vertical rule (stretches to the flex row height).
orientation
Segmented control. The trigger marked data-active="true" lifts onto a surface; panels carry the body.
Determinate track - the fill carries the primary.
Notification indicator to overlay on an icon/button. ds-count shows a number on a high-contrast inverted bubble (portable in any DS); data-dot="true" drops the label for a small alert dot tinted danger. Position it absolutely over the trigger.
dot
KPI / metric - a label over a prominent value, with an optional delta. Compose ds-stat with ds-stat-label, ds-stat-value and ds-stat-delta (tone=up/down colors the change against neutral). Line several ds-stat in a flex row with a divider/border for a KPI strip.
Data table. Compose <table class="ds-table"> with ds-table-head, ds-table-row, ds-table-cell-head and ds-table-cell.
| Project | Status | Updated |
|---|---|---|
| Halogen | Active | 2h ago |
| Cinnabar | Paused | 1d ago |
| Ember | Active | 3d ago |
Centered dialog over a scrim. Compose ds-modal (the centering layer) with ds-modal-overlay, ds-modal-panel, and ds-modal-header/body/footer.
Off-canvas panel (drawer) for mobile nav and side detail. Compose ds-sheet (the fixed layer) with ds-sheet-overlay (the scrim) and ds-sheet-panel; the panel docks to the right by default - data-side="left" docks it left.
Dropdown/popover surface. Compose ds-menu with ds-menu-item (tone=danger for destructive) and ds-menu-separator.
Form field group. Compose ds-field with ds-field-label, the control, ds-field-hint and (when invalid) ds-field-error.
App navigation rail. Compose ds-sidebar with ds-sidebar-item (active=true marks the current route).
App top bar - brand/search on the left, actions on the right.
Horizontal navigation bar. Compose ds-navbar with ds-navbar-item (active=true marks the current route; data-locked="true" dims a disabled/"soon" item).
Multi-line text field - the input's taller sibling.
Trail of ancestors. Compose ds-breadcrumb with ds-breadcrumb-item (current=true for the leaf) and ds-breadcrumb-separator.
Page navigation. Compose ds-pagination with ds-pagination-item (active=true for the current page).
Zero-data placeholder. Compose ds-empty-state with ds-empty-state-icon, ds-empty-state-title and ds-empty-state-description.
No projects yet
Create your first project to get started.
Transient notification. Tone tints the border; compose ds-toast with ds-toast-title and ds-toast-description.
tone
Small label bubble - inverted surface for contrast against the canvas.
Square, label-less action for toolbars and row controls - a quieter sibling of button.
Loading placeholder block. Ships the muted shape; animate it with Tailwind's `animate-pulse` (or a DS shimmer keyframe).
Engagement blocks · 5
Optional gamification blocks the AI advisor can propose - token-only, so they re-skin to any base. A library to compose from, not a parallel product.
The streak is a growing thing - in Sprout the spark is a seedling, and keeping it alive is the game.
Experience / level progress bar - visualizes advancement toward a goal.
Circular progress ring - goal completion at a glance. Set --ds-ring (e.g. 72%).
Level / rank badge - recognizes earned status.
tier
Leaderboard - ranks peers to motivate progress (use sparingly in B2B).
Icons · lucide
Icons inherit the system: color via currentColor, a standardized stroke, sizing on the scale. Lucide by default; more libraries can be enabled per system.
Pages · 3
Full-page layouts assembled only from recipes and tokens - every region re-themes to the system automatically. Icons and media render as placeholders until their adapters land.
We'll tailor the workspace to your answers.
A complete design system, themed end to end - every token in its place, every screen already wearing your brand.
Free to start · no credit card requiredTokens compose into any surface you need.
Charts and dashboards inherit the theme for free.
App shells and landings assume your shape instantly.
Design once at the foundation and every component, chart and template re-dresses itself - no per-screen rework.
Every piece ships measured: contrast, hierarchy and consistency are scored before anything reaches production.
“We rebuilt our whole app on this system in a week - every screen came out consistent by default.”
Spin up your system and ship the first page before lunch.
Charts · 5
Chart recipes themed entirely from token refs - series, grid, axes and fills re-paint to the system automatically. Sample data; the theming is the point.