Trading UX Implementation Guidelines

Practical rules distilled from the design philosophy.

1.

Quote Presentation

Requirements:

Show exact values returned from GET /trades/quote:

inputAmount, outputAmount, rate, fee, expiresAt

Display countdown timer (expiresAt - now) prominently

Format monetary values:

USDT → $100.00

BTC → 225,000 sats

Rate → 2,250 sats per $0.01

UI Examples:

“You’re converting: $100.00”

“You’ll receive: 225,000 sats

“Rate: 2,250 sats per cent

“Fee: $0.80”

“Quote valid for: 29 seconds”

2.

Expiration Logic

Requirements: Disable “Confirm” button as soon as expiresAt < now

Show a non-blocking notification:

“Quote expired. Please refresh for a new price.”

Optionally provide:

Auto-refresh quote after expiration

Manual “Get New Quote” button

3.

Trade Confirmation Feedback

Requirements: After user confirms:

Show progress indicator (modal or inline stepper)

Reflect each step of backend trade lifecycle:

Quote validation

Balance verification

Execution

Wallet credit

Confirm only after trade.completed webhook or GET /trades/:id status = completed

Suggested UI:

[✓] Quote locked

[✓] Balance available

[✓] Trade executed

[✓] Funds credited

4.

Input Field Logic

Requirements: Input field must:

Accept only valid numbers

Internally normalize:

USDTcents (10000 = $100.00)

BTCsats (225000 = 0.00225 BTC)

Display labels:

“Enter amount in USD

“Enter amount in Bitcoin (BTC)

Show live preview of converted value

5.

Post-Trade Success Page

Must Display:

inputAmount, outputAmount

rate used Destination wallet label

Trade reference Timestamp (optional)

Example:

Trade Successful

You converted: $100.00

You received: 225,000 sats Rate: 2,250 sats per cent

Wallet: BTC Wallet

Reference: trade_4837ABC

6.

Failure Handling

Required Error States:

ConditionUX Message
Quote expired“This quote has expired. Please request a new quote.”
Insufficient balance“You do not have enough balance to complete this trade.”
Duplicate reference“This trade has already been submitted.”
Execution failure“Trade failed. No funds were moved. Try again later.”

Provide a dismissible alert and log internally with full context.

7.

Visual Hierarchy

Priorities:

Input/output clarity

Rate integrity

Quote expiry countdown

Confirmation status

Success/Failure state

Use consistent typography and spacing to reinforce the idea that every number is important and intentional.

8.

Visual Language

Do not use animations that introduce uncertainty

Avoid color-coding outcomes (e.g., green for BTC, red for USDT) unless backed by semantics

Use iconography sparingly — prioritize text

Confirm actions with checkmarks, not emojis or confetti