DEX · 0 → 1 product design

Design a perpetual DEX that pro traders trust in the first thirty seconds

Screen recording of a BTC trade on Margin Trade: picking a market, setting leverage, confirming the order, and the fill landing in the positions table
Margin Trade is a perpetuals exchange you trade straight from your own wallet: no account, no KYC. One screen covers crypto (BTC, ETH, SOL at up to 20×), commodities (gold, silver, oil) and 24/7 synthetic perps on stocks like NVDA and TSLA, all margined in USDC and matched on a central limit order book. Built by Solayer on Solana.
Role
Founding product designer
Team
Founder · 1 PM · 5 engineers
Scope
0 → 1, five iterations
Chapter 1 · The problem

Traders tried it once and went back.

The exchange worked. Pro traders opened it, placed one order, and returned to the centralized exchange they already knew. Nothing was broken enough to report, and nothing was good enough to stay for.

Who we were designing for
Pros, not first-timers.

People who keep three venues open, read a book at a glance and size a position by muscle memory. Switching to us cost them nothing, and switching back cost them nothing either.

What was actually broken
The screen made them guess.

A marketing-site grid that wasted a wide monitor. An order button that greyed out without saying why. Risk settings hidden in a table after the trade. An explorer that was rows of raw data with no hierarchy.

How our design is different
Built for the three moments a pro decides to stay.

Most perp DEXs copy a CEX screen. We designed for depth: a packed layout you read without moving your eyes, an order form that never fails silently, and risk set before you commit. One layout for crypto and equities, from your own wallet.

Don’t make it prettier. Make it faster to be right.

Evidence · my audit in Figma

The notes I left on the file: “make the interface more packed,” and on the explorer, “flat data misleads relationships; false mapping; no hierarchy; data, not insight.”

Evidence · what others do

Kraken’s redesign expands one order ticket from beginner to pro; Hyperliquid mirrors a CEX and lets you drag orders on the chart. Both solve breadth. We had one audience, so we solved depth.

The rule for every round

Two tests: can a trader see what they need without moving their eyes, and does the product ever fail silently? If a change didn’t pass both, it didn’t ship.

What the founder asked for

A book liquid enough that serious traders come back, on a product that works beyond one region and one asset class. Those two became the numbers we measured at the end.

1Read the market
Iteration 1
One trade page

Perps and spot on one layout.

Iteration 2
Pack the interface

Chart, book and form side by side.

2Size the trade
Iteration 3
A form that explains itself

Staged states, no silent disable.

3Manage the risk
Iteration 4
Risk in the form

TP/SL, mark price, liquidation before commit.

4Trust the venue
Iteration 5
Trust layers and launch

API wallet, explorer, brand, QA.

Chapter 2 · Iteration 1

One trade page for perps and spot.

The first thing a pro noticed was that we had two screens for one job.

Switching markets
Before
Perps pageDifferent layoutSpot page
Two layouts to learn
Iteration 1
Pick a marketSame chart, book, formControls change, not the page
One layout
Margin Trade market header: BTC 20x, mark, oracle, 24h change, 24h volume, open interest and funding countdown
One market header for every market: mark, oracle, 24h, open interest, funding.
Evidence

The Figma page “Trade (perp + spot)” is where this round lives. Traders held both kinds of positions, and the first build made them relearn the screen each time they switched.

Decision

One trade layout. The market picker changes the data and the controls, never the position of the chart, the book or the form.

Trade-off

Spot traders see leverage controls they never touch. Why I accepted it: we hide them per market type rather than split the page, because a stable layout is worth more to a pro than a tidier one.

Why the next iteration

Once perps and spot shared a page, the loose grid was the obvious problem: the book showed too few levels and positions sat below the fold.

Iteration 2

Pack the interface.

Pros sit at wide monitors. The first build spent that width on margins.

The packed trade layout: chart on the left, order book in the middle, order form on the right, positions below
Chart, book and form side by side at 1440. Positions and orders below, no scroll.
Evidence

My audit notes: “make the interface more packed” and “redesign page dimensions.” The order book showed a handful of levels and positions needed a scroll.

Decision

A 1440 grid with the chart, the order book and the order form in one row, the account tabs underneath. Twenty book levels, the spread in the middle, every number in a tabular digit style so columns line up.

Trade-off

Density costs new traders: smaller targets, more on screen at once. Why I accepted it: the audience was pros, and a pro reads a packed screen faster than a spaced one.

Why the next iteration

The layout was now right. The order form still failed silently.

Iteration 3

An order form that explains itself.

A rejected order is the moment a pro closes the tab. Ours rejected without a word.

Placing an order
Before
AmountButton greyed outGuess
Silent disable
Iteration 3
Long or ShortOrder typePrice · MIDAmount · MAXPlace order
Each state says why
Evidence

The round is a set of Figma frames named for each state: “Disable before entering amount,” “Limit price,” “Take Profit price,” “Place Order button, currently disabled,” and a note that error states had to match across screens.

Decision

Stage the form. Before an amount, the button is disabled and the field says so; MID fills the limit price, MAX fills the amount. Liquidation price, order value, margin and fees appear before you commit, not after.

Trade-off

More states means more to build for five engineers, and the form got taller. Why I accepted it: guardrails that explain themselves are cheaper than a lost trader.

Why the next iteration

Orders went through. The next question was what happens after: how a trader protects the position.

Iteration 4

Risk where the decision happens.

Pros set their exits when they enter. We made them do it afterwards, from a table.

The price chart with the mark price plotted as a yellow line next to the last traded price
Mark price on the chart, next to last price, so liquidation risk is visible where traders look.
Protecting a position
Before
Open positionFind it in a tableSet TP/SL later
Risk after the fact
Iteration 4
Take profit + stop loss in the formMark price on the chartEst. liquidation before commit
Risk in the order
Evidence

Figma frames “Add Mark Price Line” and the “Position TP/SL” series. A form that made traders set exits afterwards was a form they didn’t trust.

Decision

Take profit and stop loss live inside the order form, with a Take Profit + Stop Loss toggle. The mark price is drawn on the chart in yellow, and the estimated liquidation price is shown with the order cost.

Trade-off

Two more fields on an already dense form, and a chart line that competes with the candles. Why I accepted it: liquidation is the one surprise a trader never forgives, so the information earns its space.

Why the next iteration

Trading worked. What was left were the reasons a pro wouldn’t move size to a new venue: can I automate it, and can I verify it?

Iteration 5

Trust layers, then launch.

Size follows trust. The last round was the parts of the product that prove it is telling the truth.

Two flows that earn trust
API wallet
GenerateName the walletAuthorizeSign
Friction on purpose
Explorer
Block = containerTransactions inside itUser = the actor
Hierarchy, not rows
Margin Trade NVDA perpetual, an equities market on the same layout as crypto
Launch build: equities perps on the same layout as crypto. Same header, book and form.
Evidence

The explorer audit note in the file: rows aligned left and right read as one-to-one pairs when they weren’t, and blocks and transactions sat on one plane. The API wallet flow has its own annotated frames.

Decision

The explorer got a hierarchy: a block contains its transactions, a user is the actor. The API wallet flow only enables Authorize after the wallet is named, so nobody signs for something they can’t identify.

Trade-off

The authorize step adds a screen; hierarchy costs horizontal space. Why I accepted it: both are places where speed would cost trust, and for size, trust wins.

Launch

The last pages of the file are the launch: the Margin Trade name and logo, the brand color pass, a Day 1 page, a QA issues page, and a mobile trade view with a second designer. Mobile shipped as a trimmed trade screen, not parity. Why: the date mattered more than a second full layout.

Chapter 3 · Design system

Dark, dense, one green.

Near-black surfaces, tabular digits, and color used only to mean something: green for long and bids, red for short and asks, yellow for mark price.

Core tokens, sampled from the live product
page
#11151B
Background
surface
#273035
Inputs, inactive buttons
ink
#FFFFFF
Numbers, labels
muted
#9AA3AD
Secondary text
long
#29AB87
Long, bids, gains
short
#FF5252
Short, asks, losses
mark
#FFD700
Mark price
Decision

A Digits text style with tabular figures for every number, so price columns stay aligned as they tick. Color never decorates: if it’s green it’s long or a bid, if it’s red it’s short or an ask.

Trade-off

A dark, three-color system leaves little room for emphasis. Hierarchy has to come from size, weight and position, which is slower to design but faster to read.

Chapter 4 · Outcome

A venue traders moved size to.

The founder asked for two things: a liquid book, and a product that works beyond one region. Both landed.

A first trade, first build to final
First build
ConnectFind marketAmountGreyed outWhy?
Guess, retry
Final
Pick marketLong · Limit · MID · MAXTP/SL + liquidation shownPlace order
Risk set before commit
$1M+
Daily volume

Perps and spot, crypto and equities, on one layout.

14+
Countries

Traders beyond one region, on a product built by seven people.

0 → 1
Template to live product

Five design rounds, each one closing the biggest reason a pro would leave.

Chapter 5 · Looking back

What I learned, and what I’d do next.

Learned
Experts want less, placed better

Every round that worked removed a page, a scroll or a guess. None added a feature.

Learned
States are the product

In a trading UI, the disabled button and the error are where trust is won or lost.

Learned
Friction can be a feature

The authorize step slows people down on purpose. Pros read that as care, not cost.

Next
Instrument every round

Order-fail rate and time-to-first-order per release, so each iteration has its own before and after instead of one outcome at the end.

Next
Watch five traders trade for real

Session recordings on the order form and the book under live market conditions, to find the eye movements the layout still costs.

Next
Mobile parity

The launch mobile view is a trimmed trade screen. A real second layout for positions and risk is the next design problem.