Library

Components

44 components, from the logo to the chat's prompt box, each shown live with its variants, props and guidance. They are what the blocks and prototypes are built from.

Brand

Logo

The full Builtwell wordmark, drawn in currentColor. It fills the width it is given, so size it with its container.

The BW monogram, for tight spaces: navbars, avatars, favicons. It fills its box, so the container sets the size.

Switches between light and dark with a circular reveal from the button, using the View Transitions API where the browser has it.

Actions

The pill button for every action. Six variants, four text sizes and four icon sizes, on Base UI's Button so it can render as a link.

Joins buttons, inputs and selects into one pill, squaring the inner corners. Nest groups to space them.

A button that stays pressed. For one on/off setting, such as bold, where a checkbox would feel like a form.

A row of toggles that share a value: one at a time by default, or several with multiple. Spacing 0 joins them into a segmented control.

Forms

The single-line text field: a soft filled pill with a ring on focus and a red ring when invalid.

An input or textarea with addons inside the same pill: icons, text, buttons, at either end or above and below.

Multi-line text that grows with its content (field-sizing: content), filled like the input.

Pick one from a short list. Base UI Select: pass items to the root so the trigger can show the label, and the popup opens over the trigger.

A text input that filters a list as you type. Single choice with ComboboxInput, several with chips.

On or off, or one of several that can all be on. Base UI's Checkbox with a check indicator.

Exactly one of a few options, all visible at once.

A value, or a range with two thumbs, along a track. Base UI Slider; values are arrays.

As it should appear on the proposal.

The layout around a control: label, description, error. FieldSet and FieldGroup stack them; orientation sets the row.

A plain label, text-sm medium. Inside forms, reach for FieldLabel, which is this plus field states.

Overlays

A modal over a blurred backdrop, for a short task that needs the whole of someone's attention. Closes on Escape and outside click.

Rich content anchored to a trigger, opened on click. Not modal, so the page stays usable.

A short label on hover or focus, dark with an arrow. Each Tooltip brings its own provider, with no delay.

@builtwell

A preview of what a link leads to, on hover. Base UI's PreviewCard.

A list of actions or options from a button. Items, checkboxes, radios, labels and submenus, on a blurred dark popup.

A searchable list of commands on cmdk. Inline, or as a palette in a dialog with CommandDialog.

Display

NewPopularDraft

A small label for status or category. Renders a span, or anything via render.

Card

Brand sprint
Two weeks, one team.
Popular

A surface for one thing: header with title, description and an action, content, footer. A leading image bleeds to the edges.

A callout in the flow of the page: an icon, a title, a description and an optional action.

InvoiceProjectStatusAmount
BW-104Brand sprintPaid$8,000
BW-105WebsiteDue$14,500
BW-106Design systemDraft$9,200
Total$31,700

Semantic table parts with row hover and a scrolling container. For data, not layout.

Tabs

Switch between views of the same thing without leaving the page. A muted pill, or a line.

Two weeks from kickoff to handover, with a check-in every few days.

Stacked questions that open to their answers. One open at a time unless multiple is set.

Show and hide one region. Unstyled: the trigger and panel look like whatever you render.

BrandWebProduct

A 1px rule in the border colour, horizontal or vertical.

A pulsing block that holds a place while content loads. Size it like what is coming.

Lucide's Loader2, spinning, with role="status" and a Loading label.

A scrolling region with a thin custom scrollbar that shows on hover, on Base UI ScrollArea.

Brand
Website
Product
Motion
System

A row of slides with previous and next buttons, on Embla. Swipe, drag or use the arrow keys.

Builtwell placeholder artwork

Click an image to see it full screen over a blurred backdrop, on react-medium-image-zoom.

AI Elements

How long does a brand sprint take?

A brand sprint runs two weeks: a kickoff, two rounds of concepts, and a handover with the files and a short guide.

And a website after that?

Usually four to six weeks, depending on how many pages and how much motion.

The scrolling log of a chat. Sticks to the bottom as messages stream in, with a button to jump back down.

How long is a brand sprint?
Two weeks, start to finish.

One turn in a chat. The user's sits right in a bubble; the assistant's renders Markdown with Streamdown and can carry actions.

Enter to send, Shift Enter for a new line

The box people type into. A form around an input group: a growing textarea, a footer for tools, and a submit that turns into stop while the answer streams.

Starter prompts as outline pills in a row that scrolls sideways. Clicking one hands its text to onClick.

Tool

A tool call in the chat, collapsed to its name and status. Opens to show the input and the result as JSON.

import { Button } from "@repo/design-system/components/ui/button";

export function Cta() {
  return <Button>Start a project</Button>;
}

Code highlighted with Shiki in light and dark, with a header for a filename and a copy button. The usage blocks on these pages are this.

Loader

The spinning radial loader the chat shows while the model thinks. Sized in pixels.

Builtwell

Pick block categories as chips, each labelled with its count. A multiple combobox with its labels and sorting built in.