Deliverd design system

Complex infrastructure. Simple interface.

Deliverd sits between autonomous systems and people. Every screen answers, in order: what is happening, what is being asked of me, why, what happens if I say yes, who asked, what evidence exists, and what I do next. This page is every token and component that answers those questions.

Principles

  • Clearer, not more

    A sentence that says what matters beats another widget.

  • People first, machines on request

    Human language leads; the technical detail is one click away.

  • One obvious next step

    One navy action per screen. Nothing else competes with it.

  • Type carries the hierarchy

    Scale, space, colour, placement, and weight last.

  • Whitespace is the identity

    No cards inside cards inside cards.

  • Colour is never alone

    Every status has a word, and usually an icon.

Colour

A warm off-white canvas, ink type, navy for the one action, pale blue for selection and focus, and muted status colours. Text colours show their contrast on the canvas; every one clears 4.5:1.

Surfaces

  • canvas

    #F8F9F7

    bg-background

    Page ground

  • surface

    #FFFFFF

    bg-card

    Cards, inputs, dialogs

  • surface-subtle

    #F3F6F8

    bg-muted

    Insets inside a surface

  • surface-blue

    #EEF6FC

    bg-accent

    Selection, hover, active nav

  • blue-soft

    #DCEEFF

    bg-blue-soft

    Strong selection, info fill

Ink

  • ink

    #071428

    text-foreground

    Headings and primary text

    17.4:1 on canvas

  • ink-soft

    #4F5968

    text-secondary-foreground

    Body copy

    6.7:1 on canvas

  • ink-muted

    #636B78

    text-muted-foreground

    Captions and metadata

    5.1:1 on canvas

Action and accent

  • navy

    #082E73

    bg-primary

    The one primary action

    12.1:1 on canvas

  • navy-hover

    #06265F

    hover:bg-navy-hover

    Primary, hovered

  • blue

    #1D5FC4

    text-brand · ring-ring

    Links, accents, focus

    5.7:1 on canvas

  • blue-bright

    #246FDB

    bg-blue-bright

    Fills, charts and dots, never text

Status

  • green

    #207A58

    text-success

    Approved, live, finished

    5.0:1 on canvas

  • green-soft

    #E9F6F0

    bg-success-soft

    Its fill

  • amber

    #8C5A12

    text-warning

    Waiting, needs a decision

    5.5:1 on canvas

  • amber-soft

    #FFF4DE

    bg-warning-soft

    Its fill

  • red

    #A53A3A

    text-danger

    Declined, refused, failed

    6.1:1 on canvas

  • red-soft

    #FCECEC

    bg-danger-soft

    Its fill

Two values differ from the original brief, on purpose

Muted text is #636B78 because #737B88 reads at 4.0:1 on the canvas, and blue text is #1D5FC4 because #246FDB reads at 4.4:1 on the pale-blue fills. #246FDB stays as blue-bright for fills, charts and dots.

Type

Newsreader for display: headlines, page titles, report headings. Geist for everything you read to operate the product. Geist Mono only for IDs, code and policy expressions.

Display XL · landing hero

Agents do the work.

Display L · section statement

People approve it.

H1 · app page title

Good morning, Sarah

H2 · section heading

Needs your decision

H3 · card title

Refund £1,240 to Acme Ltd

Body L · lede

Finance agent wants to issue a refund over the £1,000 limit.

Body · app text

The agent pauses here until somebody decides. Nothing has been sent.

Caption · metadata

Asked 4 minutes ago · expires tomorrow at 17:00

Mono · technical

payments.refund · amount > 1000

Space and shape

A 4px base. Radii named for what uses them. Three shadows, tinted with the ink, and nearly invisible.

Spacing

  • 4
  • 8
  • 12
  • 16
  • 20
  • 24
  • 32
  • 40
  • 48
  • 64
  • 80
  • 96
  • 120
  • 160

Radius

  • rounded-xs · 8

    Badges, menu items

  • rounded-sm · 12

    Buttons, fields

  • rounded-md · 16

    Textareas, menus

  • rounded-lg · 22

    Cards

  • rounded-xl · 28

    Dialogs, panels

  • rounded-2xl · 36

    Feature panels

  • rounded-3xl · 48

    Showcase frame

  • rounded-full · pill

    Composer, avatars, status

Elevation

  • shadow-soft

    A resting surface. Usually none: the hairline is enough.

  • shadow-lift

    Menus, and an interactive card when hovered.

  • shadow-pill

    Floating: dialogs, the composer, the showcase windows.

Buttons

Navy for the one primary action on a screen. Outline for its alternative. Secondary and ghost for everything quieter.

Variants
Sizes: 28, 32, 40, 44, and 48 for approval actions on a phone
With an icon, and disabled

Status

Every status in the product comes from one map, so the same state reads the same way everywhere. The word is always there; the icon repeats it.

StatusBadge
Needs your decisionWaiting for a personApprovedChanges requestedDeclinedExpiredWithdrawnAllowed by policyRefused by policyRevokedRunningFinishedFailedDraftLivePublishedNot liveArchivedBlocked
With the person's own words
Waiting for SarahAgent continued2 of 3 have approved
Badge, for labels that are not a status
FinanceTemplatev3New

Forms

A visible label above every field, a hint under it where one helps, and an error that says how to fix it. Field edges are drawn at 3:1 so a field can be found.

The approver sees this first, so say it as a sentence.

Enter the amount as a number, like 1240.

Page layout

A page opens with its title in the display face, one line saying what it is for, and its one action. Sections are panels only when they need a heading.

Flow

Refund for Acme Ltd

The finance agent paused here for a decision. Nothing has been sent.

Needs your decisionAsked 4 minutes ago

What the agent will do

Exactly what runs if you approve.

Action
Issue a refund
Amount
£1,240.00
To
Acme Ltd, account ending 4471
Policy
Refunds over £1,000 need Finance
Request ID
apr_8f2c41

This is over the usual limit

Most refunds are under £500. This one is 2.5 times that.

Approved by Sarah Chen

The agent continued at 10:46.

Expires tomorrow at 17:00

If nobody decides by then, the request expires and the agent is told.

Metrics

A number with the sentence that explains it. A number nobody can act on is decoration.

Waiting on you

3

The oldest was asked 2 hours ago

Decided this week

41

Median time to decide: 6 minutes

Autonomy

82%

Policy settled 279 of 340 requests in the last 30 days without interrupting a person.

Asked
340
82% settled by policy
With a person
61
52 approved · 6 declined · 3 waiting
Permissions used
57
Receipts
57
All verified

Agent composer

The signature input. One sentence starts a real request on the page that already makes one, and that page asks who should decide. It never runs an agent or pretends to.

What are you asking for?

Next you choose who to ask. Nothing is sent until you do.

Agent work

Work as a calm timeline. Each step reads as a sentence; the machine's version waits behind Details.

  1. Done:

    Read the refund request from the support inbox

    10:41

  2. Done:

    Checked it against the refund policy

    10:41

    Over £1,000, so Finance decides.

    Details
    policy refunds@v3 · rule amount_over_limit · decision APPROVAL_REQUIRED
  3. Waiting:

    Waiting for Sarah Chen to approve

    10:42

    Asked by email and in Slack.

  4. Skipped:

    Issue the refund

    Runs once approved.

AgentStep on its own, failed, with what happened to the work
  1. Failed:

    Could not issue the refund

    10:47

    The payment provider refused it. Nothing was sent, and Finance has been told.

    Details
    stripe.refunds.create → 402 card_declined · request req_9KfQ2

Approvals

A request reads as a sentence: who asks, for what, the facts that decide it, and what happens next. The decision is made on the request's own page.

Finance agent asks

Needs your decision

Refund £1,240 to Acme Ltd

Over the £1,000 limit, so it needs a person.

Amount
£1,240
Customer
Acme Ltd
Policy
Refunds v3

Asked 4 min ago

Evidence

Who did what, under which policy, and when. Agents, people and policy are always told apart.

  1. Finance agent (Agent) asked to refund £1,240 to Acme Ltd

    Agent

  2. Refunds policy (Policy) sent it to Finance

    PolicyRefunds v3 · over £1,000

  3. Sarah Chen (Person) approved it

    Person

    “Confirmed with the account manager.”
  4. Finance agent (Agent) issued the refund and sent a receipt

    Agent

Policy

A policy read as plain English: when this happens, do that, because of this. The expression the engine runs is under Technical view.

Refunds

What the finance agent may refund on its own.

v3In force
  • When a refund is £1,000 or less, let it go ahead.

    Routine, and reversible within 30 days.

  • When a refund is over £1,000, ask a person to approve (Finance).

    Technical view
    action == "payments.refund" && input.amount > 1000
  • When the customer is on a payment hold, refuse.

    Legal asked us to stop all payments to held accounts.

Changed by Sarah Chen on 2 October.

Reports

Published work, with who made it, which version people see, who can see it, and whether it is live.

Live

Q3 revenue review

By Claude · v4 · Finance

Finance team · 12 people128 views · Updated 2 h ago

Tables

For comparing many of the same thing. On a phone, a table scrolls inside its own frame; the page never scrolls sideways.

RequestAsked byStatusWhen
Refund £1,240 to Acme LtdFinance agentNeeds your decision10:42
Send the renewal quoteSales agentAllowed by policy09:15
Delete 40 stale accountsOps agentDeclinedYesterday

Empty, error, loading

An empty state says what will appear and the one thing that puts it there. An error says what failed and what happened to your work.

Nothing needs you right now

When an agent asks for a decision it appears here, and we email you.

Dialogs and sheets

A dialog for a short, focused decision. A sheet for anything with more to read: from the bottom on a phone, from the side on a desktop.

Card
For a group that needs a heading and invites interaction. Otherwise, a section.
Q3 revenue review

Words

Plain English, sentence case, and the person's words rather than the system's.

SayNot
Ask FinanceConfigure approval routing destination
Waiting for SarahPending decision state
Agent continuedWorkflow execution resumed
Nothing was sentOperation aborted
Refused by policyDENY