05 · Edge cases · Reconstructed wireframe board
Happy paths prove competence. Edge cases prove judgment. Five real-world constraints visible in the shipped product — each showing a specific design decision made under pressure.
Row 1 — transaction constraints
ec-1 · insufficient balance
← Send To Other Accounts
First Bank of Nigeria
0•••••••••• · ADA NWOSU
₦ 1,500
≈ 1.10 USD
EC-1 — Insufficient balance
Fails fast at amount entry, not at confirmation. The error names both the transaction amount AND fees as the constraint — not just "insufficient funds."
Fail early, name preciselyec-2 · rate expired
← Send To Other Accounts
First Bank of Nigeria
0•••••••••• · ADA NWOSU
₦ 55,000
≈ 40.21 USD
Conversion Fee: 0.40 USDT ⓘ
EC-2 — Rate expired
When the 30-second window expires, "Refresh Rate" replaces the countdown. Continue stays disabled. The user must consciously confirm the new rate — silent updates do not happen.
User confirms every rateec-3 · wrong network risk
Receive USDT
Network
Scan QR Code
Wallet Address: 0×6B675...a487 ⎘
EC-3 — Wrong network risk
Wrong network = irreversible fund loss. The warning is a permanent state element, not a one-time modal that gets dismissed. Always visible on the highest-stakes screen.
Passive warning, not dismissibleRow 2 — system states
ec-4 · bank delay state
← Transaction Details
⏳ Processing
₦55,000.00
Wednesday, June 03
12:53 PM
You initiated your transfer
12:53 PM
Transaction taken from USDT Wallet
12:53 PM
Converted to NGN
In progress
Sent to bank — processing
EC-4 — Bank delay
The product doesn't go silent when banks are slow. The state machine surfaces exactly where money is in the pipeline. "Sent to bank — processing" is a named state, not a void.
Delays are named, not hiddenec-5 · display edge case
Wallets
USDT
₦1,368.00 -0.59%
0.40 USDT
BTC
$60,500 -1.53%
0.00 BTC
ETH
$1,550 -100.00%
0.00 ETH
EC-5 — Data display anomaly
ETH showing -100.00% when balance is zero is mathematically correct (dividing by zero base) but reads as catastrophic. A zero-balance wallet should suppress the percentage change entirely.
What I'd fix: show "—" not -100%"The best crypto UX makes the crypto invisible. Mular's job is done when the user thinks they sent money — not when they think they used crypto."
Edge cases are where this principle is most tested. Each state above shows the product holding that promise under constraint.