Parts that already agree with each other.

Every one reads the same tokens for colour, corners, size and motion. A form, a chart and a chat thread built with them look like one product, because they are.

Browse components

The everyday pieces, finished.

Each tile is the component itself, recorded as you would use it. Menus, dialogs, fields and charts, with keyboard support and motion that respects your settings.

Measured, not promised.

Contrast, touch targets and motion each have an automated check that fails a change which breaks them. The readings here are taken live from this page, in the paint it actually has.

How motion works

Each text colour on each background the components put it on, measured on this page. Every pair clears 4.5:1, the minimum for body text, and the contrast audit fails the build if one ever drops below.

Every part you need, already built.

127 components, 1,953 examples you can copy, and 12 complete screens that show the parts working together. Start from a screen, or start from a single button.

Browse templates

Decided once, so you do not decide again.

One command, or one link.

From your terminal

Add the registry to components.json once, then install the base styles with your first component.

npx shadcn@latest add @tessina/base @tessina/button
Installation

From your agent

Point an assistant at the index. It lists every page as Markdown, examples included.

https://tessinaui.com/llms.txt
Working with agents

Make it yours in a minute.

Pick a brand colour, a typeface and the corners, and a real app follows every change. Each pair is checked for contrast as you go, and all 127 components take the theme with them.

The theme creator, recorded as you would use it.