Flowra design system
Every Flowra screen is built from one shared set of pieces: a few color and size tokens, a few semantic classes, and a few React components. These pages show those pieces live, running the same code as the app itself, and explain why each one looks the way it does.
In codeapp/globals.csscomponents/
What it's made of
The Flowra design system has three layers. The bottom layer is tokens: CSS variables in app/globals.css for color, each with a light value and a dark value. The second layer is semantic classes, like .btn, .card, .pill, and .modal, which define appearance once. The third layer is React components, like TextField, DropdownField, Floating, Dialog, and EmptyState, which define behavior once: keyboard, focus, text direction, and how they adapt on phones.
Alongside these three layers, Tailwind utilities are used only for one-off layout: spacing, columns, order. Any appearance repeated in two places belongs in a semantic class, not in scattered utilities.
app/globals.css--bg--card--text--accent--dark--border--green--redapp/globals.css.btn.card.pill.modal.dropdown-menu.sheet-menu.tabbar.badge-softcomponents/TextFieldDropdownFieldFloatingOptionListDialogActionMenuEmptyStatePageHeaderAvatarIconOne way to do each thing
The most important rule in this system is simple: one piece for each need. One confirmation dialog, one empty state, one toast, one picker, one avatar. Every time a page wrote its own version, the versions drifted apart; the avatar was once hand-written in 29 different places, and the profile photo only showed up in one of them.
Do
If a piece is missing, add it to the system, then use it on the page.
Don't
Don't build a hand-made, slightly different version of an existing component on a page.
Do
Define a new token with both a light and a dark value in globals.css.
Don't
Don't hard-code color values in a component; they break in dark mode.
How these pages are written
Every component page follows the same order: what it is and when to use it, its anatomy, states with live examples, rules and the reasons behind them, do's and don'ts, accessibility, RTL notes, and the code you write in the project. Each page ends with related pages, linked in both directions.
The examples aren't screenshots. Buttons click, fields accept typing, menus open, and dialogs slide up from the bottom on phones; if you switch the theme or language, everything switches with you.
Where the numbers come from
Every number on these pages is read from app/globals.css or from the component itself, not from a mockup. A selector can be defined several times in globals.css; the last definition with the same specificity wins, and a rule inside @media applies only when its condition holds. That's why every size is stated with its condition: phone, desktop, or touch screen.
max-width: 640pxPHONE_QUERY in lib/use-phone.tsmin-width: 900pxpointer: coarseTouch sizes, independent of widthhover: hoverRow hover color only hereoutline: 2px solid var(--accent)offset 1px or 2px0.01ms !importantAll animation and transition- Contrast ratios are calculated with the WCAG 2.1 formula from the light and dark hex values in globals.css. Semi-transparent dark soft colors were composited on --card and then measured.
- Wherever a component is still missing something, like a field hint that isn't yet wired up with aria-describedby, it's stated right here, and when it's fixed it changes right here too; the list of gaps is part of the system, not its secret.
Related pages
Design system map
Start with Foundations if you want to know why things look the way they do; jump straight to Components if you're looking for a specific piece.
Fundamentals 8
The principles every design decision grows out of: voice, language and direction, numbers and dates, and accessibility.
Foundations 12
The tokens every component is built from: color, typography, spacing, radius and shadow, motion, and icons.
Components 23
The ready-made pieces every Flowra screen is built with, each with a live example, its states, and its rules.
Patterns 8
Combinations that come up again and again: the connector page, filtered lists, creation flows, upgrade prompts, irreversible actions, and the phone layout.
Brand 5
Every Brand kit rule and the reason behind it: name, mark and logo, clear space and size, color, typography, and misuse.