Forms
The forms an internal tool is mostly made of, at the size they appear in an app. Every one is interactive — submit with fields empty, edit a setting, change a filter — so you can see the validation, dirty, loading and empty states the theme gives you without writing any styles.
Create a record
Sections with a title and description on the left and a two-column field grid on the right; errors appear only after the first submit, and the footer sticks to the bottom of the card while the form scrolls.
Card padding=0 with section rows (title + description left, two-column field grid right). Required fields use withAsterisk; errors appear after Create order via the error prop. The footer is position: sticky inside the scrolling card. The date field is a TextInput with a calendar icon here; the datetime interface renders a picker.Relational fields
Buildpad’s signature controls: a many-to-one value in a bordered card, and related-record lists you can reorder, add to and remove from — every change is staged until the parent record saves.
Supplier *
Atlas Packaging
Packaging · 2 orders
Parent order
Link a blanket order this one draws from.
No item selected
Paper with the display template, then view, change and remove ActionIcons. Change opens a Modal size="xl" picker; remove leaves the empty state with a light Select Item button.Supplier *
No item selected
Choose a supplier
Supplier
Keystone Logistics
Freight · 1 order
error renders as red xs text under the field. readOnly and disabled look the same: the value and its view link stay, the edit actions go.Line items *
4 items
Badge, open and remove. Edits are staged until the parent saves — new rows get a New badge, removed rows strike through with undo, and the count shows unsaved changes. Create New opens a Drawer; Add Existing opens the picker.Approvers
Everyone listed must approve before the order is sent.
2 items
Avatar, name and role, with the user's status badge. Add Existing excludes people already linked.Watchers
People notified when this order changes.
No related items
Linked records
3 items
color="blue" collection badge. readOnly drops the grip, remove and add controls but keeps each row's open link.PO-2041 · Atlas Packaging
Pending approval · due 04 Nov
Approvers
2 items
Select Items
| Name | Team | Role | Status | |
|---|---|---|---|---|
DO Daniel Osei daniel.osei@northwind.io | Fulfilment | Editor | Active | |
MS Marco Silva marco.silva@northwind.io | Procurement | Editor | Invited | |
HK Hana Kobayashi hana.k@northwind.io | Support | Viewer | Active |
Showing 1–3 of 4
Modal size="xl" titled Select Items: search resets to page 1, the header Checkbox selects the page (indeterminate when partial), selected rows tint --ds-primary-50, and the ink button counts the selection. Linked records are filtered out.File upload
The shipped upload field: a dashed drop zone, a queue that shows progress, success and failure per file, and a picker for files already in the library.
Drag files here or click to select
PDF, images or spreadsheets, up to 25 MB each
Paper p="xl" with default-variant buttons, as the shipped Upload interface renders it. Drag a file over it, or use Upload from device — files join the queue below.Drop files here
PDF, images or spreadsheets, up to 25 MB each
--ds-primary-500 on a --ds-primary-50 wash, the icon goes ember and the copy changes to Drop files here.freight-contract-2026.pdf
2.4 MB of 4.1 MB
dock-3-after.jpg
1.8 MB
Uploaded
supplier-scorecard.xlsx
220 KB
Uploaded
site-survey-walkthrough.mov
18.6 MB
Upload failed — the connection was interrupted.
Progress bar with cancel, a green Uploaded check, or a red message with Retry. Over-limit files fail without a retry. The shipped field also raises a toast on completion or failure (@mantine/notifications, not shown here).Uploading...
Drag files here or click to select
PDF, images or spreadsheets, up to 25 MB each
PO-2041 · Atlas Packaging
Attachments
Drag files here or click to select
PDF, images or spreadsheets, up to 25 MB each
Choose from library
Contracts
Folder
Invoices
Folder
Site photos
Folder
atlas-packaging-quote.pdf
312 KB
dock-3-before.jpg
1.6 MB
dock-3-after.jpg
1.8 MB
supplier-scorecard.xlsx
220 KB
freight-rates-2026.csv
48 KB
brand-assets.zip
14.2 MB
safety-induction.mp4
86.0 MB
Showing 1–10
Modal size="xl" with a search field, an icon-only SegmentedControl (visually hidden labels) for grid or list, a folder breadcrumb and keyboard-focusable cards — folders open, files select. Images show their thumbnail; everything else a gray light ThemeIcon.Settings
One setting per row — label and description left, control right — split by dividers. The footer tells you when there are unsaved changes and stays disabled until there are.
Workspace
Applies to everyone in Northwind Ops.
Workspace name
Shown in the sidebar, emails and exports.
Workspace URL
Changing it breaks existing bookmarks.
.buildpad.app
Default currency
Used for new orders and reports.
Approval threshold
Orders above this amount need an approver.
Time zone
Due dates and cron jobs run in this zone.
Weekly digest
A Monday summary of spend and open approvals.
Require two-factor
Members must set up 2FA at their next sign-in.
Single sign-on
Sign in with your identity provider.
Text fw=600 + dimmed description, control right) separated by Divider. Edit anything to arm the footer; the disabled row shows a plan-gated control.Filter bar
Search plus the two or three filters people use most, with everything else behind a popover. Active filters repeat as removable pills so the current view is always explained.
Filtered by
Showing 2 of 7 orders
| Order | Supplier | Category | Owner | Status | Amount |
|---|---|---|---|---|---|
| PO-2041 | Atlas Packaging | Packaging | Daniel Osei | Pending approval | $12,840 |
| PO-2035 | Atlas Packaging | Packaging | Daniel Osei | Shipped | $15,300 |
TextInput search, two clearable Selects, a Popover for less-used filters (count in a Badge), then active filters as removable Pills with a Clear all. Filters really narrow the table.Popover opened withinPortal=false — the dropdown surface (radius lg, shadow lg, hairline border) comes from the theme; hideDetached=false keeps it visible while the trigger scrolls. Controls inside drop to size="xs".No orders match these filters
Try removing a filter or searching for something else.
variant="default" Clear filters button.Multi-step
For long, ordered tasks. Next validates only the current step; completed steps stay clickable.
Confirmations are sent here
Stepper with allowNextStepsSelect=false: completed steps turn ember and stay clickable. Next validates only the current step — the delivery step starts empty so you can see it block.Sign in & sign up
Compact, single-column auth forms. The ink button is the default action; the ember color="primary" button is kept for brand moments like creating an account.
Button fullWidth with loading while submitting. Empty password shows a field error; fewer than 8 characters returns a form-level Alert.color="primary" — the ember brand CTA, reserved for moments like sign-up. Strength is a Progress whose colour follows the score; the button stays enabled and validates on click.Invite & confirm
Collecting many values in one field, and slowing people down before something irreversible.
Invite people
They'll get an email with a link to join Northwind Ops.
Press Enter or comma after each address
lena@northwind is not a valid email address
marco.silva@northwind.io
Editor · invited 2 days ago
TagsInput splits on comma, space or semicolon and errors on invalid addresses; the role Select uses renderOption for descriptions. Send stays disabled while anything is invalid.Delete supplier
Removes the supplier and everything attached to it.
Alert + a confirmation TextInput; the color="red" button unlocks only on an exact match. The same fields work inside a Modal.Validation states
Summarise every problem at the top of a long form and link each one to its field; repeat the message on the field itself. The field states on the right are everything an input can show.
Supplier reference is already used by PO-2031
Amount must be greater than $0
Choose an approver
color="red" Alert at the top of the form lists every problem as an anchor that focuses its field; each field repeats its own message via error. Warnings that don't block saving use color="yellow".Shown under the label
Supplier names are case-sensitive
Checking the number is free…
Available
description, focus (click any field — ember border + --ds-focus-ring), error, async check via a Loader in rightSection, readOnly and disabled.