Qian Zhao

Copper · Product Design Case Study

Designing complex financial states so users can act with confidence

I led product design across Copper’s Core Platform, iOS app, and Design System. This case study focuses on how I clarified waiting states, organised asset states, and turned those decisions into reusable rules for the team.

Legacy Copper platform interface New Legacy

Design challenge: the system knew what was happening; users only saw Pending

Copper provides institutional clients with digital asset custody, trading, and settlement services. The design was shaped by three constraints: real assets, multi-user permissions, and operations that move through several system stages.

While mapping the Staking, Approval, and ClearLoop flows, I found that the backend states were technically accurate but did not answer the questions users needed to make a decision: Who is handling this now? Do I need to act? Can these assets still be used? What happens next?

I therefore did not define the goal as reducing steps. Instead, I wanted to reduce the judgement required to understand the current state without hiding risk or responsibility.

My design framework: current state → responsibility for action → impact on assets → next step

Constraint

A single confirmation could transfer, lock, or reallocate real assets.

My role

Core Platform, iOS app, and building the Mobile Design System from scratch.

Design focus

Help users make the right decision without explaining every backend mechanism.

Design decision 01: separate waiting for the system from waiting for the user

In the mobile flows, Pending collapsed two very different responsibilities into one label. Sometimes the system was processing and the user only needed to wait. At other times, the system was waiting for an authorised approver. I made “who owns the next step?” the first layer of the status design.

Problem

The same Pending label could not tell users whether to wait or act.

Decision

A status must communicate the current stage, who is responsible, and the consequence of acting.

Trade-off

Keep more information after critical actions instead of mistaking the shortest flow for the best one.

I made Sign a step in the lifecycle, not the endpoint

Copper iOS Staking next steps screen showing the bonding period and asset restrictions

The original flow could easily stop at transaction completion: the user signs, the system shows Submitted, and the experience ends. But the Staking journey is not over. The assets still need to pass through a bonding period before they begin earning rewards.

Set up → Review → Sign → Transaction submitted

I redefined the endpoint of the flow and made the current stage answer three questions at once: Why am I waiting? How long will it take? What restrictions apply to my assets while I wait?

01Set up transactionDone
02Sign transactionDone
03Bonding periodEst. 2 weeks
04Stake and earn rewardsNext phase

The final screen shows completed steps, the current two-week bonding period, and the fact that assets cannot be traded or unstaked. The screen carries more information, but every detail affects availability and reward timing.

How the same principle reshaped Approval

Copper iOS asset dashboard Settlement review screen Withdrawal approval screen Signed transaction confirmation screen

Approval represents the opposite state: the system has stopped because it is waiting for an authorised person. I changed the information order from status plus button to decision context plus action.

Before users approve, the interface prioritises the initiator, account, asset, amount, and outcome of confirming. This does not reduce clicks, but removes the need to move between screens simply to verify responsibility.

I was not optimising how quickly someone could Approve. I was improving the basis for that decision.

Design decision 02: organise balances by whether assets can be used

ClearLoop only needs one line of context: assets remain in Copper custody, while the institution can allocate the corresponding balance to an exchange for trading. This means where assets are held and whether they can be used are no longer the same question.

Problem

Total balance alone could not show which assets were immediately available.

Decision

Organise the home screen around user actions, not the backend account structure.

Trade-off

Add top-level categories so users understand asset use before opening details.

01Assets remain at CopperNo need to pre-fund an exchange wallet
02Balance allocated to an exchangeA virtual balance becomes available for trading
03Trading results settle periodicallyProfit and loss is updated through ClearLoop
Copper platform balance overview distinguishing Available, Processing, ClearLoop, and Staked assets

I first listed the decisions users needed to make when reviewing a balance: How much can I use now? How much has been allocated for trading? How much is being processed? How much is locked?

I kept Total balance as an overview, then separated the balance into Available, ClearLoop, Processing, and Staked. Each category describes the asset’s current purpose and usability, not a backend service step.

Available: can be transferred or used now.

ClearLoop: allocated to an exchange for trading.

Processing: the system is completing a transfer or settlement.

Staked: committed to Staking and temporarily unavailable.

Design decision 03: act without leaving the data

Product analytics showed that users repeatedly left the home dashboard to open a transaction, then returned to check balances and account details. In user research, they explained that they preferred to keep detailed data visible while taking action—a workflow familiar from Bloomberg.

Copper platform showing portfolio data alongside a transfer transaction panel

I redesigned transactions as a side panel, allowing users to view balances, holdings, and recent activity while completing an action on the same screen.

A design system shaped by real product needs

When I joined Copper, the product was growing quickly but its design foundations had not kept pace. The Web Design System was incomplete, multiple versions existed in development, and Mobile had no shared component library. I helped rebuild the Web system and created the Mobile Design System from scratch.

I started with real product problems rather than an ideal component library in isolation. Staking, Approval, and ClearLoop repeatedly exposed the same questions around states, confirmations, permissions, and next steps.

Copper Design System cover

The problem I inherited was not simply visual

Similar controls were implemented differently. Some components had accessibility issues, and design and engineering discussed one-off pages rather than reusable behaviours. The result was repeated design, repeated development, and gradual divergence.

Inconsistencies and duplicated components in the early Copper Design System

How I structured the system

I used Atomic Design to create a clear dependency between foundational styles, reusable components, and complete business workflows. Typography, colour, spacing, semantic values, and icons became shared tokens across Web and iOS.

01Audit the current state

Identify duplication, divergence, and missing foundations.

02Build the foundations

Unify tokens, icons, and component states across Web and Mobile.

03Extract product patterns

Turn proven solutions into reusable rules.

04Connect design and code

Bring usage guidance, contribution workflows, and front-end references together.

Beyond components, I defined rules for use and contribution

I documented when to use each pattern, how to configure its states, and how to contribute a new component. For Approval, documentation specified which details must appear before confirmation, how permissions should be handled, and how to explain what happens next.

The guidance linked to development libraries where useful, keeping design intent and implementation in the same conversation.

I turned it into a shared workflow

Reusable components discovered in product work were reviewed and moved into the library. Approved versions were published to a Design System website bringing together specifications, usage rules, and front-end documentation.

The system formed a loop: the product exposed a problem, the team validated a pattern, the system preserved the rule, and future product work tested it again.

Outcome and reflection: the shortest flow is not always the clearest

This project did not leave behind quantitative results appropriate to share publicly, so I do not present invented efficiency metrics. What I can confirm is a change in how design and engineering discussed the work: around shared components, patterns, and documentation.

In a complex financial product, removing one step can remove critical decision-making information. Design cannot count clicks alone. It must consider the risk users carry, whether actions are reversible, and the cost of getting something wrong.

Across Staking, Approval, ClearLoop, and the Design System, I first identified the decision users needed to make, then decided what the interface should hide, what it must retain, and which step deserved to be deliberately slower.