Minder

MINDER · AI CHAT DESIGN SYSTEM

A chat that opens
a workspace when it must.

A conversation that stays put, and a stage of panes that opens only when there is something to show.

01

The workspace

Threads left, chat middle, stage right. Panes open on demand and travel with their thread.

Loading the workspace…

RULE 01

The chat is constant; the stage is conditional.

The stage appears only when the agent has produced something worth a pane.

From: ChatGPT's file panel; Claude Code's tool panes.

RULE 02

Artefacts are cards first, panes second.

Clicking a card focuses its pane, or opens one. The transcript stays the index.

From: Claude's artefact cards.

RULE 03

One pane, one kind. Tabs inside; splits between.

Tabs hold one kind of thing. A new kind opens a new pane, never a modal.

From: Claude Code's tabbed panes; ChatGPT's multi-file tabs.

RULE 04

Every pane wears the same header.

Title or tabs left; share, more, open out, maximise, close right — always in that order.

From: Claude Code's pane headers; Canvas's version arrows.

RULE 05

Splits are how you multi-window.

Split right adds a column, split down stacks. Two by two is the ceiling.

From: Claude Code's stage.

RULE 06

The composer carries the controls.

Mode, effort, tools and attachments live in the composer bar, not a header.

From: ChatGPT's access modes; Claude Code's permission modes.

RULE 07

Versions are the undo model.

Every regeneration is a new version, never an edit in place.

From: Canvas's version arrows and Show changes.

RULE 08

Narrow widths stack, then sheet.

Below 760 px the stage moves under the chat; on a phone it becomes a sheet.

From: Ours — neither app documents it.

RULE 09

History is a rail when there is room, a title menu when there is not.

From 1040 px a rail that collapses to icons; below that the title becomes the switcher.

From: ChatGPT and Claude's sidebars; Notion AI's narrow-panel menu.

RULE 10

The empty state is a real screen, not a blank one.

Before the first turn: who you are talking to, how fresh the data is, one signal worth acting on, and a few starters shaped to the workspace. The composer stays at the bottom, where it will be for the rest of the conversation.

From: Codex's contextual suggestion above the composer; Claude Code's greeting and context chips; Gemini's Recent and Suggested lists.

02

Starting a thread

Before the first turn: who you are talking to, how fresh the data is, and where to start.

Configured workspacecomposed · empty-state + composer

What should we look at?

Data as of 08:10 · 4 sources

Suggested
Recent
CelesnityConfigured
First runcomposed · empty-state + composer

Let’s give Minder something to read.

Nothing is connected yet.

Start with
CelesnityNothing connected

03

Threads

One list, three homes. Dots mark threads that need you: blue running, amber awaiting approval, red failed.

Railcomposed · button + popover + dropdown-menu
Rail · collapsedcomposed · popover
Switcher · narrowcomposed · popover + dropdown-menu
Thread: Weekly ops reviewOpen the title to switch; ⋯ holds the same actions as the rail.

04

Panes

One header for every pane, plus the three non-content states.

Header

composed · tabs + button + dropdown-menu + tooltip
v3/3
1Tabs — one kind of thing per pane; the active tab shows its close
2Versions — documents only; every regeneration is a new one
3Share — a link to this tab, at this version
4More — split right / down, copy, download, close
5Open out — the same content in its own window
6Maximise and Close — always last, always in this order

The stage's outer edge

one pane · split · a ground pane
Weekly operations brief
Stage · single paneFlush. The hairline is the whole boundary; the ground padding and the pane's frame are gone.
Output
Late orders
Stage · splitFloating. Tinted ground, 8px gutters, framed panes — the frames separate pane from pane.
Board
Late orders
Stage · ground paneThe exception: a pane whose content is itself a ground stays flush even when split, or it becomes a window onto a ground.
Generatingcomposed · marker + skeleton
Output per line
Querying production_runs · 2 of 3 steps
Failedcomposed · alert + button
Late orders
Behind the latest versioncomposed · banner + version pager
Weekly operations brief
v3/3
You are reading v2. The brief was regenerated 4 minutes ago.

05

The composer

Chips say what the agent can see. The bar carries attachments, mode, effort, dictation and send. Type / for tools.

Composercomposed · input-group + dropdown-menu + popover + kbd
CelesnityConfiguredorders_dailyv12shift-plan.xlsx48 KB
send⇧↵ new line/ tools@ a table

06

The message

What a turn looks like once a real conversation is in it: how one is set apart from the next, the rhythm a long answer reads on, and the four kinds of thing an answer can carry.

Containers

the person is a bubble · the assistant is not
Did anything fail overnight?

One run: orders_daily stopped at 02:14 on a mapping error. Nothing downstream of it has refreshed since.

What does that hold up?

Six orders are past their promised date. Five sit behind the failed run — their picks were never released, and they clear as soon as it is repaired. The sixth is with the carrier and unrelated.

  • Five held by the run — clear on repair
  • One with the carrier — needs a revised date
Repair it.

Queued. I will re-run the window once the mapping is corrected and release the five.

A long answer

42rem measure · 0.85rem / 1.65 · headings and bullets inside the turn
Why was output down last week?

Output finished the week at 9,140 units, 4% under plan. Two things account for almost all of the gap, and only one of them is worth acting on.

Where the units went

Line 2 ran all seven days and carried 41% of the volume, which is the most it has taken in a quarter. Line 3 lost most of Tuesday's afternoon shift to a changeover that ran roughly ninety minutes long, and never made the time back — the following days were already committed.

  • Line 2 — 3,747 units, no stoppages
  • Line 3 — 2,180 units, one long changeover
  • Line 1 — 3,213 units, one quality hold

What is worth acting on

The changeover is the real loss and it is repeatable: the same product pair has run long three times this month. The quality hold on Line 1 was a single 40-unit batch, already quarantined, with no pattern across the week — it reads worse in the totals than it is.

If the changeover sequence is corrected, last week's shortfall does not recur. Nothing else in the week suggests a second cause.

What a turn can carry

link · file · source · output — four rules, not four variants
Where did the late orders come from?

Six orders are past their promised date. I read the pipeline's own tables rather than the reporting copy, which is a day behind.

warehouse.orders_dailyStreaming · updated 02:14
warehouse.carrier_refBound · updated 3 days ago
orders_daily · run #4188 lines
02:14:07  INFO   window 2026-09-08 → 2026-09-09
02:14:07  INFO   reading 41,882 rows
02:14:11  WARN   carrier_ref: 6 unmatched keys
02:14:11  ERROR  mapping 'carrier_ref' → null for 6 rows
02:14:11  ERROR  aborting before write
02:14:12  INFO   0 rows committed
02:14:12  INFO   downstream views not refreshed
02:14:12  FATAL  run failed after 5.2s
… truncated

The six unmatched keys are the six late orders. I have put the row-level detail and the mapping as it stands next to each other:

late-orders.csv4.2 KB
carrier-mapping.json11 KB

The carrier's own tracking disagrees with our reference on two of them:

Supplier portal — shipment statusportal.supplier.vn

Arriving

motion-safe:animate-message-in
Reduced motion turns this off rather than shortening it.
Did anything fail overnight?

One run: orders_daily stopped at 02:14 on a mapping error. Nothing downstream of it has refreshed since.

What does that hold up?

Six orders are past their promised date. Five sit behind the failed run — their picks were never released, and they clear as soon as it is repaired. The sixth is with the carrier and unrelated.

  • Five held by the run — clear on repair
  • One with the carrier — needs a revised date

07

Anatomy

The primitives above, with their variants.

Message

components/message
A user turn, aligned to the end.
Minder AI
An agent turn: avatar, header, bubble, and a footer for provenance.
Answered in 1.2s · 4 sources
Bubble
Default
Secondary
Muted
Tinted
Outline
Destructive — a refused or failed turn
With reactions
🎉3
Marker
Reading 4 files…
Deployment plan drafted
Today
Context updated
Attachment
roadmap.pdf248 KB
dashboard.png1.1 MB

08

Questionnaire

When the agent needs a decision it cannot infer. No vendored primitive — composed.

Questionnairecomposed · field + radio-group + progress
Question 1 of 20%

This shapes how it ranks the next actions.