Pipe

PIPE / DESIGN SYSTEM / 0.1

A little brighter.
A lot more human.

Confident colour, friendly shapes, and room to breathe. Meet the components that make your next interface feel like a welcome.

Meet the components
  • Editable source
  • Light & dark
  • Built for touch
63
UI modules
63
Story files
6
Palettes
A little change. A whole new feel.

Cocoa · active palette

01 / Typography

Good things start here.

A friendly face. A clear next step.

02 / Actions
Try the keyboard. Focus has a place here.
Accessible
light · cocoaReal components. Real tokens.
background
brand
foreground
ring

01 / THE PRINCIPLES

Warmth, with a backbone.

The small decisions add up. These six rules make Pipe feel like one system, from a single button to a busy working surface.

01

Colour has a job.

The brand colour points to the next action. Quiet neutrals hold the work. Success and failure keep their own meaning, whatever palette you choose.

02

Friendly, not fussy.

Capsule actions invite a click. Cards keep their 16px corners, fields keep theirs. Bigger components never get a different personality.

03

A confident voice.

A broad, warm heading leads. The interface answers in clear, comfortable type. Weight does the work; not every line needs to shout.

04

Grounded by default.

A single hairline gives a card its place. A small shadow belongs to the things above it. We do not float the whole interface.

05

Make room for people.

44px controls, real labels, and a visible keyboard ring. Touch, pointer, and keyboard all get a considered way through the same interface.

06

Details stay in line.

One container owns its gutter. Related cards share their tracks. States change the ink, not the geometry, so nothing jumps away from your cursor.

02 / COLOUR

One personality. Six expressions.

Change the identity, not the meaning. Every palette has a complete light and dark neutral spine, a brand family, and a focus ring. Choose one to see the whole page respond.

A palette never changes the message.

Status colours are fixed. They carry a label as well as a colour, so you never have to guess what a change means.

BrandInformationReadyNeeds reviewNot saved

Words you can build with.

--background

--card

--muted

21 palette slots · generated contrast · no component hexes

03 / TYPOGRAPHY

Type with a smile in its voice.

Bricolage Grotesque leads with a broad, friendly presence. DM Sans makes the everyday easy to read. Both are open-licensed, self-hosted, and loaded in the app and Storybook.

Bricolage Grotesque / 800

Make something
worth sharing.

The editorial face belongs to big ideas and short introductions. It never takes over a dense table or an ordinary form label.

Heading / 28 / 35 · 500

A fresh perspective

Component title / 18 / 23 · 700

A place for every good idea

Body / 16 / 24 · 400

Bring your ideas together. Give them room to grow.

Supporting / 14 / 21 · 400

All changes are saved in this session.

04 / SHAPE

Soft edges. Firm rules.

A small action and a large one share the same capsule. Fields use an 8px corner, tabs use 4px, and cards keep their 16px surface. Those are roles, not a ladder that grows with size.

The corner does not grow.
Same shape, from a small action to the main invitation.

rounded-control / 36 · 44 · 54px

Different roles, not random corners.
Field and surface shapes support reading without looking like actions.
4px / selection tab
16px / a surface holds a group

No breakpoint changes the radius.

05 / ELEVATION

Let the work stay grounded.

Cards use a single border and no shadow. Only overlays lift away from the page. Focus is a separate, crisp ring—press Tab to see it. Depth explains a relationship, never decorates empty space.

On the page
One quiet edge is enough to give related content a place.
A grounded surface

No floating tiles, no doubled frames, and no shadow pretending to be a divider.

border-border / shadow: none

Above the page
The scrim makes the relationship clear. Escape returns you to the origin.

shadow-overlay / bg-scrim

Floating surfaces use the same small shadow, rather than each inventing its own depth.

Your place in the flow
A focus ring is visible, deliberate, and painted only once.

2px outline / 2px offset / --ring

Error changes the border. Keyboard focus adds an outline. Neither resizes the field.

06 / LAYOUT

Room to breathe. Edges that agree.

Space carries relationships: 4 and 8px inside a group, 16 and 24px between related parts, 32px between decisions. Every container owns one gutter, so its heading, content and footer can agree.

Shared edges, less guesswork.

The grid is a tool, not a decoration. Turn it off and the relationships should still feel obvious.

Identity
Context
Next step
4px
8px
12px
16px
24px
32px

At the narrow end, the composition changes—not just the scale. Cards stack, filters fold into a sheet, and wide tables become readable record lists. The page itself never scrolls sideways.

320px minimum / 44px fields / 24px target floor

07 / MOTION

A response, not a performance.

Motion in Pipe confirms that something changed. It never moves the thing you are about to press, and it never animates a number into looking like a trend.

Ready on scroll. The four recipes take turns while this section is on screen.

ONE CURVE

Ease-in-out, every time

Ready on scroll
  1. 01

    Colour response

  2. 02

    Overlay fade

  3. 03

    State change

  4. 04

    Bounded loading

cubic-bezier(0.42, 0, 0.58, 1) / 100ms controls / 300ms overlays

01Resting

Colour response

A press darkens the fill. The capsule keeps its size and place under the cursor.

100ms / ease-in-out / colour only

02Resting

Overlay fade

A layer above the page fades in slowly enough to follow. It never grows from a point.

300ms / ease-in-out / opacity only

03Resting

Live updates

Refresh notes

State change

The thumb and the track change together, so the switch reads as one event.

100ms / ease-in-out / one event

04Resting
Syncing notes
x

Bounded loading

Ambient motion is kept for work that has not finished yet, and stops when it has.

1.4s loop / while pending only

WHERE MOTION STOPS

Three cases the system refuses

Collections published

1,284

1,297

Data never tweens

A number replaces itself. Nothing counts up between two values, so nothing hints at a direction that is not there.

0ms / transition: none

Arrives above, not inside

Feedback never pushes

Notifications float above the layout and field messages reserve their line, so the page never jumps under the reader.

Overlay feedback / undo / no layout shift

motion on
reduced

same final frame

Reduced motion keeps meaning

Turning motion off removes the journey, never the destination. No meaning lives in a skipped frame.

prefers-reduced-motion: reduce

Immediate
Focus and live values tell the truth without delay.
Still
Targets never shift, scale or bounce away from the cursor.
Restrained
No ambient loop competes with reading or comparing.
Inclusive
Reduced motion keeps every final state and its meaning.

08 / THE COMPONENTS

Small parts. Real possibilities.

Three rows of live primitives. Try the forms, open the overlays, and change the filters. Every colour follows the palette you choose.

24 working specimensScroll to explore

01 / actions

A clear next step
Primary, secondary, and quiet actions.
A quieter, reversible action

Add a note before publishing. Disabled actions explain how to unblock them.

02 / preferences

Your kind of updates
Choices with comfortable, labelled targets.

One thoughtful summary, without the constant interruption.

03 / navigation

Make yourself at home
Tabs keep related views within reach.

Small ideas, big possibilities.

Your latest notes, gathered in one place.

3 new notes

04 / invite

Better with good company
A form with validation and a way forward.

Give a collaborator access to your next collection.

05 / people

The people behind the work
Human context without extra chrome.
JR

Jamie Rivers

Making room for good ideas.

A writer, collector, and occasional maker of very ambitious weekend plans.

Open to collaborate

06 / dialog

One decision at a time
Focused layers with a clear way back.

A focused place for one decision, with a clear way back.

Dialog / Input / Button

07 / feedback

A message that helps
Success, failure, and real recovery.

08 / files

Bring your own inspiration
A local file picker with honest feedback.

Bring something you've been working on.

Local preview only. Nothing is uploaded or sent.

09 / notes

Give a thought some space
A note composer with a character budget.

0 / 180 characters

Write a note to enable saving.

10 / search

Find the familiar
Search that actually filters the records.
A quieter morning8 notes
Places to return to12 notes
Little discoveries5 notes

11 / empty

A beginning, not a dead end
An empty state invites the first action.
Start with one good idea.
This space is yours to fill.

12 / disclosure

Details, when you need them
Useful answers without a wall of text.

13 / range

A little progress every day
A real value and a derived progress bar.
40 min

Small, steady progress. Choose a goal that leaves room for everything else.

20 min read
x

14 / filters

Less noise, more possibility
A sheet that keeps filters comfortable.

3 collections shown

A quieter morning

Places to return to

Little discoveries

15 / loading

Keep a place for what's next
Loading respects the content's geometry.

Real line boxes / reserved space

16 / badges

Meaning at a glance
Badges pair every colour with a label.
DraftIn reviewPublishedNeeds a titleUpload failed

Every state has a name. Status colours keep their meaning when you change palettes.

PersonalShared collection

17 / avatars

A few familiar faces
Avatar groups keep the team together.
  • Jamie RiversEditor
  • Alex LaneWriter
  • Robin WellsReviewer

3 collaborators / initials as fallback

18 / radio

Find your rhythm
One choice from a comfortable radio group.

Preview schedule: weekly summary. No notifications are sent.

19 / select

A different perspective
A native select that really sorts the list.
  1. A quieter morning8 notes
  2. Little discoveries5 notes
  3. Places to return to12 notes

20 / toggle

Keep a favourite close
A reversible toggle with a visible state.

Weekend possibilities

Keep a favourite collection within reach. Press again to unpin it.

In its usual place in this preview.

21 / tooltip

Just enough context
Helpful hints for pointer and keyboard.

Hover or focus for a little context. The action stays available without the hint.

Preview notifications are on.

22 / popover

Take a closer look
An anchored popover, not a detour.
Collection preview

A little more context, without leaving your place on the canvas.

23 / separator

Room between the details
Quiet separators give related content order.

Little discoveries

Things to read, places to go, and ideas to revisit.

5 notesPersonal collection

One clear edge between the story and its details.

24 / pagination

One page at a time
Pagination with real records to move through.

A quieter morning

Notes

8 notes to explore.

Collection 1 of 3

09 / DATA

Make the numbers feel clear.

Three fixed series, labelled by name. The palette changes around them, but their meaning stays put. Every figure here — totals, changes, shares and both charts — is derived from the same twelve seeded weeks, so nothing on the page can drift out of step.

Kept in the last 4 weeks, measured against the previous 4 weeks.

Everything

162

up +25%

Notes

84

up +31%

Places

36

down -5%

Ideas

42

up +50%

The last 4 weeks, by kind

NotesPlacesIdeas

Segments are stacked, so the column height is the same total the first tile reports.

The whole quarter

One series needs no legend — the title names it. The shaded band is the period chosen above.

How long a note waits

  • Same day41%
  • 1–2 days27%
  • 3–6 days16%
  • 1–2 weeks11%
  • Over 2 weeks5%

162 kept · shares are allocated by largest remainder, so the column sums to exactly 100%.

Collections close to done

  • Kyoto, slowly18 of 24
    x
  • Balcony garden11 of 20
    x
  • Sunday cookingFinished
    x
  • Letters to write4 of 15
    x

42 of 68 kept across 4 collections. Each bar divides the two counts beside it.

One fixture, every number.

Change the period and the tiles, both charts and every share move together, because they read the same twelve weeks. There are no hand-typed summaries to drift.

Identity gets hues; magnitude gets a ramp.

Six fixed hues name what a thing is, always in the same order. The brand marks the one series you came for, and the wait buckets are ordered, so they take the brand ramp instead. A seventh kind folds into one muted “other”.

Colour never works alone.

Every change carries a sign and an arrow, every series carries its name, and every bar carries its own percentage. Digits stay tabular so columns line up.

--chart-primary · --chart-muted · --chart-1 … --chart-6 · --chart-seq-1 … --chart-seq-6

10 / IN SITU

Six real screens, running inside this page.

Everything above is inventory: colour, type, shape, motion, components. This is what they add up to. Each panel is a live route from the screen library, on the palette and mode you are reading in right now.

Live routesNot screenshotsTheme follows
01/06/login-001Open in a tab
Loading /login-001 …

Sign in

A welcoming split sign-in screen with local credential validation, password visibility, and a workspace preview.

These six are a sample. The library carries 82 built screens across 15 groups, every one a route in this repository on these tokens.

Browse the screen library