SynthesisUI
Gallery/sprout

Sprout

v19 · published

Bold, bouncy, and green - every tap feels like a win.

playfulsaturatedroundedtactilegamified

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

Use in your project

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.

1 · Brings the system in
npx synthesisui@latest init --styles tailwind --ds sprout
2 · Turns the check and the tools on
npx synthesisui@latest connect
2 · Turn the check and the tools on
npx synthesisui@latest connect
Ask your agent
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/v19/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").
- Implement 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 "…".

Dependencies

What to install or load so the system renders at full fidelity - it ships token names and recipes, not the assets.

  • Web fonts - Fredoka, Nunito, JetBrains Mono

    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.

  • Icons - Lucidenpm i lucide-react

    Components reference Lucide icon names. Install it (or swap in your own icon set) to render them.

Color

Primitives and roles.

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

Shape & depth.

Corner radius, spacing rhythm and elevation - the physical feel of the system.

radius

sm
md
lg
xl
full

spacing

3xs2px
2xs4px
xs8px
sm12px
md16px
lg24px
xl40px
2xl64px
3xl96px

shadow

lg
md
sm
pop
ring
pop-blue

Typography

The voice of the system.

Display: Fredoka · Body: Nunito · Mono: JetBrains Mono

xsDesign, set free0.75rem / 1.4
smDesign, set free0.875rem / 1.5
baseDesign, set free1.0625rem / 1.6
lgDesign, set free1.25rem / 1.4
xlDesign, set free1.625rem / 1.25
2xlDesign, set free2.25rem / 1.15
displayDesign, set free3.25rem / 1.05

Motion

How it breathes.

Every keyframe runs live below, dressed in the system's own colors - durations, easing curves and the interactions they power.

keyframes - 8 live

press
pulse
bounce
pop-in
wiggle
fade-up
shimmer
celebrate

easings

snapcubic-bezier(0.22, 1, 0.36, 1)
bouncecubic-bezier(0.34, 1.56, 0.64, 1)
standardease-in-out

durations

base · 0.25sfast · 0.15sslow · 0.4sambient · 2s

interaction patterns

enterreveal

Tiles pop into place with a cheerful overshoot.

enterentrance

Content springs up and fades in.

presspress-in

The 3D button punches down onto its ledge.

entercelebrate

A completed goal does a happy little tada.

loopidle-bounce

Mascots and badges bob gently to stay alive.

hoverattention-wiggle

An idle CTA wiggles to invite a tap.

Components · 26

Blueprints, rendered live.

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.

streak

bespoke · indicator

The bespoke streak counter - a flame and a big number that bobs to keep you coming back.

  • lawThe seedling grows with the streak; celebrate milestones, never show a broken streak in red.

tone

365day streak

lesson-node

bespoke · control

The bespoke skill-tree node - a chunky circular tap target on a green ledge, the front door to a lesson.

tone

card

bespoke · surface

Friendly white panel with a soft 2px ledge border; lifts and pops on hover.

  • lawCards sit on their soft ledge; reserve the elevated emphasis for the one card being compared.

padding

A card wearing this system.

A card wearing this system.

emphasis

A card wearing this system.

A card wearing this system.

chip

bespoke · pill

A pressable filter pill with the Sprout ledge - tap it and it feels like a win. data-active="true" fills it feather.

  • lawChips are choices in a game - active means picked, and picking should feel like a win.

active

MAMaya AndersenMAMaya Andersen

stat

bespoke · indicator

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.

Monthly revenue$128,430▲ 4.2%

tabs

bespoke · control

Segmented control. The trigger marked data-active="true" lifts onto a surface; panels carry the body.

text

bespoke · text

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

texttexttexttext

tone

texttext

alert

bespoke · surface

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.

  • lawOne tone per alert, never stacked; the ledge color always matches the tone.

tone

A message wearing this system.

A message wearing this system.

A message wearing this system.

A message wearing this system.

A message wearing this system.

A message wearing this system.

badge

bespoke · surface

Rounded chip for counts and status; bold colored text on a tinted fill.

intent

PillPillPillPillPillPillPill

field

bespoke · field

Form field group. Compose ds-field with ds-field-label, the control, ds-field-hint and (when invalid) ds-field-error.

EmailEnter a valid email.

input

bespoke · surface

Rounded field with a 2px border; a soft macaw ring blooms on focus.

modal

bespoke · surface

Centered dialog over a scrim. Compose ds-modal (the centering layer) with ds-modal-overlay, ds-modal-panel, and ds-modal-header/body/footer.

Delete project?
This permanently removes the project and its data.

steps

bespoke · indicator

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).

table

bespoke · surface

Data table. Compose <table class="ds-table"> with ds-table-head, ds-table-row, ds-table-cell-head and ds-table-cell.

ProjectStatusUpdated
HalogenActive2h ago
CinnabarPaused1d ago
EmberActive3d ago

avatar

bespoke · indicator

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.

  • lawGame pieces stay chunky: never shrink below 28px or drop the ring.

size

MAMAMA

button

bespoke · surface

The signature 3D action - bold uppercase on a solid colored ledge that punches down when pressed.

  • lawEvery pressable wears the ledge; the press pushes it down 2px - never remove the travel.
  • lawOne feather primary per view; secondary actions go outline.

intent

kicker

bespoke · text

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

kickerkicker

navbar

bespoke · surface

Horizontal navigation bar. Compose ds-navbar with ds-navbar-item (active=true marks the current route; data-locked="true" dims a disabled/"soon" item).

select

bespoke · field

Field trigger that reveals a focus ring on interaction.

Choose an option

readout

bespoke · text

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.

LabelValue

stepper

bespoke · control

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.

3

breadcrumb

bespoke · text

Trail of ancestors. Compose ds-breadcrumb with ds-breadcrumb-item (current=true for the leaf) and ds-breadcrumb-separator.

pagination

bespoke · control

Page navigation. Compose ds-pagination with ds-pagination-item (active=true for the current page).

empty-state

bespoke · surface

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.

icon-button

bespoke · action

Square, label-less action for toolbars and row controls - a quieter sibling of button.

avatar-group

bespoke · indicator

A party of game pieces - avatars overlapping with a bold cloud ring so every face stays chunky and readable.

  • lawNever more than five pieces; overflow becomes a +N piece.
MAJSKPRL

Engagement blocks · 1

Engagement, wearing the system.

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.

streak

bespoke · pill

The streak is a growing thing - in Sprout the spark is a seedling, and keeping it alive is the game.

12day streak

Icons · lucide

A consistent icon set.

Icons inherit the system: color via currentColor, a standardized stroke, sizing on the scale. Lucide by default; more libraries can be enabled per system.