surfaces

A library of generative UI paradigms · No. 01

Today’s interfaces wait for you to operate them.
These ones meet you halfway.

Six working surfaces, each dressed as a fictional brand in a familiar category: a fashion store you talk to, a bank dashboard that rearranges around your question, an airline chat that answers with the rebooking flow itself, a game whose rules you write by talking, a newspaper that reshapes to its reader, and eight small components that each do a little more for you.

Every surface has a Classic switch, so you can feel the difference rather than take our word for it. Agent view outlines every component and the tools it offers an agent. The trace logs each change the interface made, and every change can be undone.

In every surface, cobalt means one thing: an agent is composing this.

Six surfaces, this index included

  1. 01Lisbon, June26° · SEA BREEZE · UNDER $400E-commerce · Voice → storeMaréSay what the occasion is. The store rebuilds itself around it: looks instead of a grid, constraints become controls you can drag.BeforeCategory → filters → 40 tiles → 6 tabs to compareAfterOne sentence → a composed look, budget and weather already appliedTry Beach wedding in Lisbon in June, under $400
  2. 02JAPAN · MARCH+$220/moFinancial dashboard · Question → layoutHaldenAsk the dashboard a question. Widgets that answer it move forward, the rest step back, and a scenario you can steer appears.Before12 fixed widgets, export to a spreadsheet to answer anythingAfterThe dashboard rearranges into the answer to your questionTry Can I afford Japan in March?
  3. 03My flight got cancelledNL 2052 14:20 → 17:05+1NL 2060 18:45 → 21:30+1NL 3311 via ICNPINSupport chatbot · Answers are interfacesNorthlineAn airline assistant that replies with working UI: rebooking, seat maps, refund maths. Pin any answer and it becomes part of the page.BeforeChatbot pastes a help-centre link, you redo it in the appAfterThe reply is the rebooking flow, already filled inTry My flight to Tokyo got cancelled
  4. 04RULEBOOKGame · Rules from wordsTerrariumA living ecosystem whose rules you write by talking. Each new mechanic brings its own HUD — the game's interface grows with it.BeforeFixed rules, fixed HUD, a settings menuAfterSay “add rain” and weather, a gauge and a new species appearTry Add rain and let foxes hunt rabbits
  5. 05The Meridian61h$412m38MWNews & media · Reader-shaped storyThe MeridianOne article, many shapes. Ask for the timeline, just the numbers, or explain-it-like-I'm-new — the page re-typesets around you.BeforeOne 2,400-word article for every readerAfterThe story becomes a timeline, a glossary or a chart on requestTry Give me just the numbers
  6. 0601 · SEARCH → FORMflights to rome next friday for 2SFOFCOFri 20 Nov2 adults−4 CLICKSMicro-patterns · Tiny changes, big UXSmall ShiftsEight everyday components — a search box, an error, an empty state, a form — each given a small dose of intelligence. Before and after, side by side.BeforeStatic components that wait to be operatedAfterComponents that meet you halfwayTry Toggle any card between classic and generative

The layer underneath

One runtime, any brand.

Each surface keeps its own type, colour and voice. What they share is a thin layer: a sentence goes in, a plan of operations comes out, and those operations stream onto real components while the layout animates to show what moved where. The interpreters here are deterministic, so every demo runs offline. Swap in a model and the plan shape stays the same.

  1. 01IntentVoice or text, or a click someone made by hand.
  2. 02PlanTyped operations: compose, promote, demote, bind, ask.
  3. 03ComposeOperations land on real components, outlined in cobalt while they work.
  4. 04CheckpointEach plan is traced and can be undone. People can still edit by hand.
const c = useComposer(initial, interpret)

// interpret: (sentence, state) → plan
// { ops: [{ kind: "promote", target: "SavingsGoals", note }],
//   next: newState,  say: "Yes, if you move $220/mo…" }

<Composable ui="SavingsGoals" tool="set_goal(amount)"
  composing={c.composing.has("SavingsGoals")}>
  <SavingsGoals {...c.state.goals} />
</Composable>

Four rules every surface follows

  1. The brand stays the brand. The agent layer borrows the host’s typography and colour, except for one signal colour.
  2. Show what changed. Layout moves are animated and logged. Nothing appears without a trace.
  3. Ask before effect. Rebooking, cancelling and paying all wait for a person to confirm.
  4. Hands still work. Every control the agent sets, you can drag, type into or undo.