Skip to content

Patterns

Cross-industry

Luc UI grew up on dense analytics, and that shows in its tables, charts and workspaces. It is not only for them. Each vignette below is built from the same public components — only the palette and the type voice change.

AI & developer tools

Status, code, an instruction field and an approval flow. Nothing here is financial; the components that carry it are the same ones a research desk uses.

Migrate the serving layer to V3

Agent run · 4 min 12 s · 18,402 tokens

Live

Read 42 files in luc-api/src

Healthy

Draft the migration plan

Healthy

Apply 6 patches

Pending
- return composePage(payload) + const page = await materialize(payload) + return composePage(page, { generation })

Why cobalt and mono

A cool, saturated blue reads as infrastructure rather than finance, and a monospaced display face signals “this output is literal”. Both are one attribute — the approve button, the switch and the status badge did not change.

Commerce & lifestyle

Product surfaces, prices with a discount, variant chips and a cart summary. The interactive Card and the numeric text are the same primitives used in a data grid.

New

Field notebook, A5

$24

$32

SML
In stock
Low stock

Ceramic pour-over set

$68
SML
degraded
Bag
$92
2 items · free delivery over $50

Why rose and a system sans

A warm accent keeps the storefront from looking like an admin tool, and the humanist system stack proves a product can ship with no webfont at all — the same components, zero font payload.

Creator & community

An editorial article: serif display, looser leading, a byline, a pull quote and topics. Turbulent typesetting is the product here, not a data table.

Field notes

The workshop where every prototype is allowed to fail

Most of what leaves this room is wrong. That is the arrangement: a prototype is a question, and the only prototype worth keeping is one that answers it in under a week.

Mira Okonkwo

Studio lead · 8 min read

Member
“A prototype that takes a month is a decision you have already made.”
workshopsprototypingcraft

1,204 responses

Why ember and a serif

The `editorial` typeface re-points the sans role as well as the display role, because an editorial voice is a whole-page decision. Line heights loosen with it — the preset ships the leading a serif needs.

Finance & analytics

The home turf: metrics with deltas, a sparkline, a compact attribution table with signed numeric columns.

Portfolio
$1,284,310+12.4%
Volatility (30d)
0.1%-4.1%
Equity curveHealthy
Weight and contribution by sleeve.
Core equity46.2%3.4%
Macro overlay18.9%-1.2%
Carry basket12.4%0.8%
Duration hedge9.1%-2.6%

Why emerald

Emerald is deliberately *not* the default cyan: the point is that the strongest data components in the system are palette-agnostic. Positive and negative values keep their semantic colours in every palette.

What stayed identical

Versatility is only credible if nothing was special-cased.

  • The same Button, Card, Badge, Tag, Switch, Metric, DataTable, Sparkline and typography components.
  • The same status vocabulary — healthy, pending, degraded — with the same colours in all four brands.
  • The same density, radius, elevation, focus ring and motion vocabulary.
  • The same keyboard behaviour and accessible names; a palette changes paint, never semantics.

Try one of them on the whole Showcase:

How a scoped brand is written

Two attributes on a wrapper. Nothing else.

<section data-palette="ember" data-typeface="editorial"> <Article ... /> </section>

The wrapper above is the entire implementation of this page's four brands. If a vignette needed a bespoke class to look right, that would be a defect in the component, not a missing variant.

Luc UI v1.0Industriesdark theme