FIGR AI • AI-NATIVE CANVAS

Turning a fixed gallery into shared working memory for people and AI increasing attachment adoption from 51% to 73%

My role

Product Designer

Years

May 2026

Platform

Web Application

Scope

Interaction strategy, functional prototyping, production UX/UI and validation

Interaction strategy, functional prototyping, production UX/UI and validation

Team

4 Engineers & CTO

TL;DR

The Canvas became shared working memory for teams and AI

Figr’s post-launch Canvas displayed AI outputs but gave people little direct control. Slack requests, Mixpanel recordings and query-box workarounds showed the same mismatch: people saw a canvas and expected to work spatially. I built a functional prototype connected to our live agent to test direct manipulation and canvas-state changes before engineering committed to the larger interaction model.

43%

increase in attachment adoption

4.6×

queries from visual-context users

3.8×

upgrade rate among visual-context users

Why now

We improved the output before investing in a much larger interaction model

We had deliberately prioritised the quality of Figr’s AI output before expanding Canvas interactions. There was little value in making weak output more editable.

After public launch, the constraint shifted. Teams were bringing existing screens and generated work into the Canvas, then trying to move, resize, organise and reference it. The output had become useful enough to work with; the interaction model was now getting in the way.

problem discovery

Users wanted to compare and organise. The product only accumulated.

The interface borrowed the visual language of a whiteboard without the direct manipulation people expected. Three signals kept pointing to the same gap:

Slack requests: teams asked to organise screens, connect flows, add headings and mark exact regions.

Mixpanel recordings: People repeatedly tried to drag and resize artifacts even though those interactions did not exist.

Query-box workarounds: Users asked the agent to delete, move or resize objects because conversation was their only way to control the Canvas.

This was more than a missing-feature list. People saw a canvas and expected to think spatially, but the product made them translate basic visual actions back into words.

Decision 1

Validate the system before detailing every screen: A Figma prototype could show the layout. It could not test whether direct edits would become useful agent context.

The product hypothesis crossed two systems. People needed familiar Canvas interactions, while the agent needed a structured record of what had changed. Mocked screens could communicate the interface, but not whether the loop held together.

Using Claude Code, I built a functional POC connected to Figr’s live agent. It supported movable nodes, text, sticky notes, connectors, sections and marked areas. The agent received the starting Canvas as structured JSON; each subsequent change travelled with the next query as a diff.

That prototype gave product engineering and AI/ML one shared artifact to test and scope. We could evaluate direct manipulation, state changes and agent responses together before committing to the larger production change.

Human-Canvas-AI Interaction Loop

Annotations as Sticky notes in POC

POC Testing - Chat, Agent Inputs and Canvas Activity

Decision 2

Compare context combinations instead of trusting one successful output. I built a blind comparison UI to isolate which context actually improved the agent’s answer

The functional POC proved that the system could work. It did not tell us whether Canvas, chat, activity—or a particular combination—was responsible for a better response.

I built an evaluation view that ran the same prompt against four configurations: chat only, chat + activity, chat + Canvas, and chat + Canvas + activity. Responses appeared as A–D options without revealing their configurations, so we could select the strongest answer before knowing which mode produced it.

The comparison clarified each layer’s role. Chat carried intent. Activity could tell the agent that images had been added, but not interpret them. Canvas state let it understand the actual screens and spatial work. This helped validate the Canvas as current working state, with activity as supporting history.

POC Compare - With/Without Canvas and Activity

Decision 3

Keep the conventions people understood; remove the complexity they did not need. The POC validated familiar Canvas behaviour and exposed two collisions before production

On calls, users needed little guidance to move, resize, connect and arrange objects. Familiar conventions reduced the learning burden. The important findings came from the places where those conventions collided with Figr’s agent and annotation model.

What broke in the POC

What shipped

Why

Every marked region created a floating sticky note that had to stay anchored, avoid overlaps and resize with its attachment.

A persistent marker opened a lightweight annotation. Standalone sticky notes remained; team comments stayed collaboration-only

Preserved precise context for the agent without introducing an unstable layout system

A bottom toolbar became unstable as tools grew and competed with chat.

Familiar Canvas tools moved left, work stayed central and the agent moved right

Created a clearer spatial hierarchy that could scale with more tools

Simplifying these ideas reduced implementation scope without weakening the product model. Chat carried the conversation; the Canvas carried the evolving work.

Decision 4

Treat every direct edit as context. Every Canvas change became a diff, so users could show the agent what changed instead of explaining it again

The full Canvas preserved the current state of the work. Moving a screen, writing a note, connecting nodes or marking a region created a smaller structured update for the next query.

Spatial changes helped people think; diffs made those changes legible to the agent. Direct manipulation was no longer only a UI convenience—it became a way to add product context naturally while keeping that context visible and controllable. Users who sent Canvas edits back to the agent did so 3.2 times on average.

Final interaction and craft

The final model gave each surface a clear job

Tools on the left. Work in the centre. Agent on the right. Selection established scope, contextual actions appeared only when relevant, and every imported or generated artifact remained available as visible product context.

Canvas Final

impact

After the 28 May release, use became deeper; not broader

We compared four complete weeks before the release with four complete weeks after it, excluding rollout week.

9%

30%

63%

73%

51%

34%

5%

1.3%

Added attachments

Acted on an artifact

Artifact full-screen

Used Select & Edit

% active users

0%

20%

40%

60%

80%

Canvas engagement deepened after launch

Reflection

I used code to test the product hypothesis; design judgment decided what should ship

AI-assisted coding let me test the complete interaction model before detailing every state or asking engineering to commit. It surfaced system-level edge cases—annotation overlap, toolbar growth and Canvas-state changes—that a Figma prototype would have hidden.

The most important learning was not that the Canvas needed more tools. It needed a clearer contract: people directly shape the work, the Canvas keeps that state visible, and the agent reads those changes as context. The prototype expanded what we could test. Judgment kept the shipped product focused.