Specifying an AI composer, frame by frame — Nayara Marques
Composer specAI platform · private capital markets2024—26

Specifying an AI composer, frame by frame

One bar carried every AI feature in an investment platform and offered everything at once. I respecified it as twenty-six frames across six state families, each with the one line an engineer can pass or fail.

Role

Senior Product Designer. Interaction design, working prototypes, and the delivery spec.

Users

Institutional allocators and fund managers. Sophisticated, time-poor, sceptical of automation.

Timeframe

Ongoing. AS-IS audit through specified states and prototypes.

Built

Designed in Claude Design on the current design system, and shared with engineering through Claude Code.

01 — Context & my role

The platform serves private capital markets: allocators and fund managers running diligence, tracking managers and preparing for investment committee. The composer is the way into every AI feature in it — one bar on the dashboard, and the same component inside reports, documents and meeting notes.

I was the designer on it: the audit of what existed, the interaction patterns, the prototypes in code, and the delivery board engineering built from. The work is still shipping, so this case is illustrated with the wireframes from that board rather than product screenshots. Labels are invented; structure, states and behaviour are as specified.

02 — The problem

The first layer offered everything at once, and once you chose something it disappeared into the input.

The as-is first layer

I audited the as-is composer and thread. The first layer of the composer carried too much: a shortcuts row and an all-shortcuts grid, a context picker, a source selector, research, web, history, workflows and send — all exposed before the user had typed anything. Choosing was harder than asking. And once something was selected — a document, a team, a generated output — it was rendered inside the composer itself, mixed into the text the user was still writing, so the question and its context were indistinguishable.

/ Write weekly recap/ List recent findings/ Lorem ipsumAll shortcuts
ContextSource

Ask anything…

ResearchHistoryWorkflows

The as-is composer. Nine controls on the first layer, and selected context rendered inside the input. Drawn in grey throughout; every redesigned bar further down is drawn in ink.

03 — Constraints

The brief was not to cut features. Shortcuts, context, source, research, web, history and workflows all had to remain reachable — the composer had to get simpler without losing anything.The user needs to see what the model can see. It could not be shown by writing into the field they are typing in, which is what the as-is did.The design system lived in Claude Design. The version in the codebase had drifted and its components were inconsistent, so the work had to be built on the Claude Design system and avoid the outdated ones.

04 — The decision

The first layer becomes a field, a plus for attaching, a model selector and send. Features move behind two things the user already knows: / for commands and shortcuts, + for context. Everything selected or generated as context then attaches as a tag row under the input. Twenty-six frames follow from that one move, covering the field and send, the attachment bar, the pickers, voice, modes and the model read-out.
What the first layer became

Two moves. The composer's first layer comes down to a prompt, a plus, a model selector and send — commands live behind / and context behind +. And everything the user has attached moves out of the input into a row of context tags below it, where it stays visible without competing with the question being typed.

Ask anything or type /

WebDeep researchGPT-5.5
Workspace · fundQ2 fact sheet.pdf+4
Dashboard composer — first layer, then the second

One prompt, a plus for context, the model, send. Commands sit behind the slash the placeholder names and context behind the plus — the figure opens that second level and closes it again.

Why — the dashboard is where open questions start, and it was the one surface with no room for a new column, so the composer had to sit in the existing composition.

05 — The states

The composer was specified as twenty-six frames across six families, each carrying the one line an engineer can pass or fail.

The first layer is a field, a plus, a model read-out and send. Everything behind it has states of its own, and most of them had never been drawn: an attachment that fails to upload, a picker on first run with nothing to pick, a microphone that is not there, a model control that disappears when a flag is off.

Where the machine already had numbers, the spec uses them rather than approximations: a 120-second recording cap, a countdown that appears with fifteen seconds left, a 44-bar waveform. Seven keyboard bindings are written out as a contract, and Escape is still an open question — two panels can be open at once, and only the innermost should close.

FamilyFramesStates
Field and send5Typing, multi-line at the cap, sending, send failed, inert
Attachments5One attached, overflow, overflow opened, uploading, upload failed
Pickers5Plus menu in place, where it opens, searching, no results, first run with nothing to pick
Voice5Starting, recording, last fifteen seconds, transcribing, unavailable
Source1Plus menu with Meetings — the one source with no row in the new menu
Modes and model5Both modes off, one mode on, model menu with the flag on and off, model control hidden
Field and send

Seven states between an empty bar and a failed send. Only the first and the last could be inferred from the frames that existed.

Flag anything off-market in the fee
Web Deep research GPT-5.5
Typing

Send turns live on the first character and the placeholder is gone, not faded.

Web Deep research GPT-5.5
Meridian Growth IV +4
Multi-line at the cap

The field grows to its cap and then scrolls; the toolbar row never leaves the bottom of the bar, and the attachment bar stays attached beneath it.

Flag anything off-market in the fee terms
Web Deep research GPT-5.5
Sending

The field is inert but still legible, the mic is gone, and the only live control is Stop.

Flag anything off-market in the fee terms
Web Deep research GPT-5.5

Could not send. Check your connection and try again.

Send failed

The message stays in the field, the reason sits below the bar rather than in a toast, and send is live for the retry.

Ask anything or type /
GPT-5.5
Inert

The whole composer drops back and nothing inside it takes focus. Used while a run owns the surface.

Attachments

The bar under the composer is the only place an attached thing appears. Four of its five states were unbuilt, and the overflow rule was not decided at all.

Compare the fee terms
Web Deep research GPT-5.5
Meridian Growth IV
One attached

A single badge sits on a bar that shares the composer border and rounds off the bottom.

Compare the fee terms
Web Deep research GPT-5.5
Meridian Growth IV Ashford Ridge Capital Management LLC. Q2 fact sheet.pdf +4
Overflow

Past the bar width the remainder collapses into one count that opens the full list. The badge reads +N with no trailing word.

Compare the fee terms
Web Deep research GPT-5.5
Meridian Growth IV Ashford Ridge Capital Management LLC. Q2 fact sheet.pdf Northgate Credit Opportunities II +3
Overflow opened

Clicking the count opens the bar to a second row and no further. Whatever still does not fit stays behind a +N badge on that second row.

Compare the fee terms
Web Deep research GPT-5.5
Meridian Growth IV Q2 fact sheet.pdf
Uploading

The uploading file takes the muted badge with a spinner in the leading slot; send stays live and queues behind the upload.

Compare the fee terms
Web Deep research GPT-5.5
Meridian Growth IV board-pack-final.pdf

board-pack-final.pdf could not be read. Remove it or try a different file.

Upload failed

The failed badge is destructive and keeps its ×, and the reason is spelled out below the bar rather than in a toast.

Pickers

The design-system Picker already had these states. They were missing here because nothing had been drawn with anything other than a full list.

Workspaces@
MeetingsMissing today
Files & URLsOpens your files
Skills/
Web accessOn
Deep researchOff
Plus menu, in place

The + opens the attach menu in the same slot the picker later occupies — bottom-left, 8px above the composer edge, 360px wide. Escape closes it and focus returns to the field.

Search context…
Funds
Brightwater Global Equity Fund
Divisadero Street Partners, L.P.
Northwind Ventures Fund III, L.P.
Deals
Aurora Logistics Co-Invest
Where it opens

Choosing Workspaces swaps the attach menu for the picker in the same anchored slot, so nothing jumps. Multi-select keeps it open so several can be attached.

bri
Funds
Brightwater Global Equity Fund
Companies
Bridgewater Associates
Searching

Typing narrows both groups live. A group with no surviving row disappears rather than showing an empty heading.

Blackstone

No matches for “Blackstone”

No results

The empty case quotes the term back and the search field keeps focus, so the user can correct it without reaching for the mouse.

Search context…

No workspaces yet. Create one to give the assistant something to read from.

First run — nothing to pick

Distinct from no results: nothing exists rather than nothing matched. The route out needs an action the Picker does not have, so either the component gains one or this panel is composed by hand.

Voice

Five phases in the machine, a 120-second cap, and a countdown that appears with fifteen seconds left. The board drew the settings popover and nothing else.

Ask anything or type /
Web Deep research GPT-5.5

Voice transcription is starting…

Starting

The control takes a wash and a spinner, is disabled, and reads that transcription is starting.

0:12
Web Deep research GPT-5.5
Recording

The field gives way to the waveform — 44 bars, 2px minimum — with elapsed time on the right. The mic is a filled square.

1:47
Web Deep research GPT-5.5

Transcription stops in 0:13

Last fifteen seconds

The countdown appears at 105 seconds elapsed and not before; the announcement fires at fifteen, ten and five seconds to screen readers only.

Ask anything or type /
Web Deep research GPT-5.5

Transcribing audio…

Transcribing

Same wash as starting. The mic cannot be pressed again and the settings chevron is disabled with it.

Ask anything or type /
Web Deep research GPT-5.5

No microphone detected

Unavailable

One of five reasons shows, in order: unsupported browser, no microphone, another composer already transcribing, starting, transcribing. The control is inert, not hidden.

Source

The Source dropdown is not going away — its job moved inside the plus, and the move is not as clean as the removal list implied. Source is exclusive today, attachments are additive, and one of its options has no row in the new menu at all.

Workspaces@
MeetingsMissing from the menu today
Files & URLsOpens your files
Skills/
Web accessOn
Deep researchOff
Plus menu with Meetings

Meetings appears as an attachable source alongside Workspaces. Today the menu has no row for it, so a user who could ask across their meetings before cannot after the change.

Modes and model

Modes moved into the bar in this proposal, so their off state had never been drawn — and off is the state a user sees first. The model menu had been drawn from memory and was wrong on three counts: a deprecated model, one that is not in the registry, and the wrong default.

Summarise exposure by manager
GPT-5.5
Both modes off

With no mode on, the toolbar is the plus, the model read-out, the mic and send. Nothing occupies the space the badges would take.

Summarise exposure by manager
Web GPT-5.5
One mode on

A mode reads as one badge with an × that turns it off. The plus-menu switch and the badge are the same state seen from two places.

OpenAI
GPT-5.6 Luna
GPT-5.6 Sol
GPT-5.5
GPT-5.4
Anthropic
Opus 4.8
Sonnet 5
xAI
Grok 4.5
Google
Gemini 3.6 Flash
Model menu — multi-model on

Ten active models across four providers, deprecated ones filtered out, and the default is GPT-5.5 rather than a 5.6 variant. Open question: whether the menu groups by provider as drawn, or runs flat as the component does today.

GPT-5.6 Luna
GPT-5.6 Sol
GPT-5.6 Terra
GPT-5.5
GPT-5.4
Model menu — flag off

With multi-model off the list is the OpenAI subset and nothing else. No provider headings, because there is only one provider.

Summarise exposure by manager
Web Deep research
Model control hidden

The selector returns nothing when the flag is off for a surface, so the read-out is absent and the mic sits directly beside send. The composer must not leave a gap where it was.

A target-state board is only half a spec. Eight parts of the composer exist today, and each one carries a disposition. Two of them are marked decide because they are genuinely open: whether the plus keeps sources mutually exclusive the way the old dropdown did, and what happens to the two sources that are written into the spec but have no endpoint behind them.

Part todayActionReplaced by
Workspace context chips rowRemoveThe attachment bar beneath the composer
Source dropdownMoveWorkspaces, Meetings and Files & URLs, inside the plus menu
Source exclusivityDecideSource picks one endpoint today; attachments are additive. Either the plus keeps sources mutually exclusive, or the backend takes several at once
Marketplace and Web sourcesDecideBoth are written into the source spec and commented out for want of an endpoint. Either they stay out of the menu until it lands, or they appear inert with the reason
Text-labelled Research / Web rowRemoveMode switches in the plus menu, badges in the bar
Model selector dropdownMoveA read-out beside the mic, with the menu opening above it
Shortcuts dropdownKeepUnchanged — @ and / still open the same two pickers
Voice input controlKeepUnchanged behaviour, new position, and a hover-only chevron

06 — Impact

The composer is in build, so what can be claimed today is the specification itself.

Where the gain shows up
The spec covers what comes out of the composer as well as what goes in: eight existing parts, each marked remove, move, keep or decide. The two nobody had settled are written down as open questions rather than discovered in code. An upload that fails, a picker with nothing in it, a microphone that is not there — each has a frame and an acceptance line, so none of them arrives as a bug report after launch.
What was specified
26composer frames
6state families
8existing parts, each with a disposition
7keyboard bindings

Adoption and time-to-answer are being measured as the composer rolls out. I would rather publish those once than estimate them here.

07 — What I learned

Every setting has to be covered, and so does every result of choosing it: the upload that fails, the picker with nothing in it, the microphone that is not there, the control that disappears behind a flag. Each one needs a line that can pass or fail, written against the stress cases rather than the happy path. Drawing what the composer should become says nothing about what has to come out of it. The removal list was the part engineering used most, and it was the part nobody had asked for. Specifying in working prototypes removed the ambiguity a static screen leaves behind. It does not follow that I should have built this one — streaming, agent handoff and versioning carry real complexity, and that build belonged to engineering.

08 — What this case doesn't cover

The composer is live and unfinished. Four things are outside what is shown here.

Adoption and time-to-answer are still being measured. The counts above are scope — what was specified — not evidence that it worked. Retrieval, accuracy and prompt behaviour are not covered. This case is about the interaction around the model, not the model. What the composer had to do was decided on client feedback reaching me through product. That research itself — who was spoken to, how many, and what they said — is not mine to publish. Where the AI belongs, and how it behaves inside reports, documents and meeting notes, is a separate case.
AI product design

Let’s build AI into a product with the structure to grow it.

AI changes how a product behaves, not just how it looks. I design the surfaces, specify the states behind them, and leave a structure the team can extend rather than rebuild.

Let’s talk