SCROLL TO EXPLORE

Ready X: Making complex crypto interactions feel simple, safe & intuitive.

Senior Product Designer

Core Product Flows

Design Systems

Interaction & Motion

Animation

Mobile & Web

Ready X is a crypto wallet for managing assets, trading, staking and DeFi. I worked across the product to simplify complex flows, improve the mobile experience and create stronger, more consistent systems for interaction and motion.

9:41

Vibe coded a new onboarding flow using Claude.

The Challenge

Ready X had started life as a desktop-first product and was still evolving on mobile. It carried a lot of technical complexity, and some of the existing patterns did not translate cleanly to a smaller screen.

My focus was on making the experience feel simpler and more considered without stripping away the power experienced crypto users expected. That meant improving high-trust flows, creating more consistent patterns and making sure the mobile product felt designed for mobile, rather than adapted from desktop.

Tools

- Figma
- Rive

- Lottie
- Claude

- Adobe
- After Effects
- Webflow

9:41
🐟
Fab FishMainnet
Activity
In progress
2
Deposit
Vesu
+1 vETH-1 ETH
Swap
Jediswap
+1 DAI-0.05 ETH
Today
Send
To Account 1
-0.0002 ETH$34.82
Receive
From 0x1234...abcd
+50 DAI$50.16
Add liquidity
Jediswap
+0.0015 JEDI-P-2 assets
Withdraw
Vesu
+1 ETH-1 vETH
Send
To 0xd92e...44fa
-100 USDC-$100.00
Assets
Invest
Activity
Browser
9:41
Ethereum
ETH
$1792.98
-1.48%
 
1D
1W
1M
1Y
All
Buy
Swap
Stake
Send
Overview
Activity
Your balance
$2,034.78
Popularity
#2
FDV
$239.4B-1.48%
24hr volume
$18.8B
9:41
🐟
Fab FishMainnet
SpotPerps
$8,128.47
0x9f3ca...7e21b
Swap
Fund
Send
Portfolio
Trade Perps
Start trading Perpetual Futures with up to 40x leverage
CoinsNFTsDeFi
Ethereum
1.0213 ETH
$2,034.78+3.98%
Starknet
108 STRK
$108.06-3.98%
USD Coin
450 USDC
$451.33+0.01%
B
Wrapped Bitcoin
0.0380 WBTC
$2,011.10-1.24%
Lido wstETH
0.8105 WSTETH
$2,034.78+3.98%
Assets
Invest
Activity
Browser
9:41
🐟
Fab FishMainnet
Invest
₿
Bitcoin Staking
15.4% APY

Stake your Bitcoin, earn rewards, and secure Starknet.

Stake now
Stake STRK (Native)
🛡️ Ready Wallet
+15%$5M TVL
Stake STRK (Liquid)
✅ Endur
+15%$5M TVL
Stake ETH (Liquid)
🔵 Lido
+11.25%250k TVL
Assets
Invest
Activity
Browser

When I joined..

What I was asked to do

With my experience across mobile products and complex systems, I was asked to take a broad look at where design could have the most impact. I reviewed the existing mobile experience, competitor patterns and technical constraints, then turned those findings into clear priorities for the product.

What it led to

Clearer flows

Less ambiguity around high-trust actions.

More consistency

Shared patterns across key parts of the product.

Greater confidence

Clearer feedback at important interaction points.

More reuse

Systems and patterns that could be carried into new features.

Float like a butterfly, sting like a bee.

Ready was a fast-moving startup, so I looked for ways to improve the quality of the product without slowing the team down. I worked closely with engineering, using lightweight prototypes and code to test ideas quickly and make interaction decisions easier to discuss and implement.

One of the first opportunities I spotted was motion. Rather than treating each interaction as a one-off, I created a reusable micro-interaction system for the app’s core components, defining states, easing, spring behaviour and haptics.

Reusable by design

Patterns could be applied across navigation, transaction states and new features.

Clearer for engineering

Rive files, motion specs and implementation notes gave developers a shared reference.

More consistent product feel

Common behaviours and feedback made interactions across the app feel more cohesive.

Projects

A closer look at some of the product, system and interaction work I led across Ready X.

The prototype below shows how those ideas came together in the product before I break down the individual decisions in more detail.

Clickable prototype of major screens

9:41
🐟
Fab FishMainnet
Spot
Perps
$8,128.47
0x9f3ca...7e21b
Swap
Fund
Send
Portfolio
Trade Perps
Start trading Perpetual Futures with up to 40x leverage
CoinsNFTsDeFi
Ethereum
1.0213 ETH
$2,034.78+3.98%
Starknet
108 STRK
$108.06-3.98%
USD Coin
450 USDC
$451.33+0.01%
B
Wrapped Bitcoin
0.0380 WBTC
$2,011.10-1.24%
Lido wstETH
0.8105 WSTETH
$2,034.78+3.98%

Private send

Designing trust into private sends & shielding

Private Send supported two related actions: sending private funds to someone else, and shielding funds into a private balance.

The challenge was making the privacy model clear without slowing down experienced users. I focused on creating the right checkpoints around intent, fees, recipients and confirmation so users could move quickly while still understanding exactly what would happen before they committed funds.

Hypotheses 🤔

  1. Explaining shielding at the moment it becomes relevant will reduce confusion.


  2. Showing available and shielded balances separately will improve comprehension.

  3. Presenting Shield as part of the Private Send journey will feel more coherent than exposing it as an unrelated feature.

  4. Showing fees and ETA before confirmation will increase confidence.

  5. Clear progress states will prevent users from assuming funds are lost.

  6. A first-time explanation will be useful, but repeat users should be able to move quickly.

Risks ⚠️

User understanding

  • Users understand the term “Shield.”

  • Users know why shielding is necessary.

  • Users understand the difference between shielded and available funds.

  • Users know when their money becomes private.

User behaviour

  • Users will read an explanation before proceeding.

  • Users will tolerate an additional step before sending.

  • Users will notice if their shielded balance is too low.

  • Users will review fees and estimated completion time.

Trust

  • Users believe the privacy claim.

  • Users understand what information remains visible.

  • Users feel safe confirming the transaction.

  • Users understand what happens after confirmation.

Technical and product risks

  • Transactions may take longer than expected.

  • Fees may change.

  • A shielding transaction may fail.

  • A user may leave during processing.

  • The balance may not refresh immediately.

  • Shielding may succeed but Private Send may fail.

01

Establish the privacy model

Before users took action, the flow needed to establish what changed when a transaction became private.

The experience clarified what was protected, what remained visible, and what tradeoffs users needed to understand before committing funds.

Asset context

Anchors the action in the correct asset, balance, and wallet state before introducing private transaction options.

Private Send intro

Frames privacy as a distinct transaction mode, setting expectations before setup begins.

Privacy model

Clarifies what metadata is protected, what remains visible, and what tradeoffs the user should understand before committing funds.

02

Support multiple transaction paths

Private Send was not one linear flow. The system needed to support sending to different destination types, shielding funds into a private balance, and unshielding funds back out.

Rather than treating each path as a separate product, I structured the experience around shared patterns: amount entry, fees, review states, confirmation, and transaction details.

Path decision

Routes users based on intent and balance state, avoiding dead ends when private funds are not yet available.

Recipient selection

Keeps outbound recipient choice explicit, reducing address ambiguity in the highest-risk input step.

Shield funds

Supports the self-shielding path, where funds move into the user’s private balance without an external recipient.

Amount entry

Surfaces balance, amount, fee, and total in one decision surface before the user reaches review.

03

Create confidence at commit

The final stages focused on control and verification. Review states gave users a clear checkpoint before action. Confirmation added deliberate friction. Success and transaction details gave users confidence after the transaction was complete.

Review send

Creates a pre-commit checkpoint for recipient, amount, fee, and Private Send status.

Review shield

Confirms source, destination, amount, and fee before funds move into a private balance.

Confirm

Adds deliberate friction at the final moment to prevent accidental sends or shielding actions.

Transaction details

Surfaces balance, amount, fee, and total in one decision surface before the user reaches review.

Explore the full flow

The full Figma board includes the wider transaction system, edge cases, shielding and unshielding paths, recipient setup, review states, and first-time user education.

Why it mattered

By creating a consistent model for account types, setup and controls, the wallet could support more complexity without making the experience feel more complicated.

It also gave the product a clearer structure for adding new account types and capabilities over time.

Interaction behaviour

Raising the product feel, quickly.

Ready X had grown quickly, and interaction behaviour wasn’t always consistent across the app. Some actions felt responsive and polished, while others lacked the feedback you’d expect from a high-quality mobile experience.

Rather than improving these moments one by one, I created a lightweight motion system for core components and states. The aim was to make the product feel more responsive and intentional, while giving engineering a reusable set of patterns that could be applied as the product grew.

Motion, made reusable

I created reusable motion patterns for core interactions, then turned them into shared tokens and implementation guidance so the same behaviour could be applied consistently across the product.

Motion System

Motion Patterns

Interactive reference for every motion pattern. All values are live — press, tap, and trigger to preview the exact tokens used across the app.

motion.Timing token
ease.Easing token
spring.Spring token
haptic.Haptic token

How the handoff worked

① Designer names the intent
Durationmotion.base
Easingease.out.snappy
Haptichaptic.success
→
resolves to
② Token resolves to a value
Duration250ms
Easingcubic-bezier(0.16, 1, 0.3, 1)
Haptic.success
→
dev writes
③ Dev writes one line
let anim = UIViewPropertyAnimator
duration: Tokens.motion.base
curve: Tokens.ease.outSnappy

Self-documenting. No magic numbers. No guesswork.

Design → Dev

Motion and haptics added to an existing app — no rebuild, no disruption.

Rather than redlining every interaction individually, I defined the system as tokens. Developers received one reference doc — token name, resolved value, and usage rule. No ambiguity, no back-and-forth, no follow-up calls.

9
Motion patterns
fully specced
4
Token types
timing · easing · spring · haptic
1
Handoff doc
single source of truth
Zero
Follow-up questions
from engineering

Token Reference

⏱ Timing tokens
motion.fast150msTap feedback, small targets
motion.base250msToast enter, bottom sheet enter
motion.slow300msLarge surfaces, section expand
motion.springLong700msPress down spring
〜 Easing tokens
ease.out.standard
cubic-bezier(0.2, 0.8, 0.2, 1)
Expand, slide in, general entry
ease.out.snappy
cubic-bezier(0.16, 1, 0.3, 1)
Success toast, system level win
ease.in.standard
cubic-bezier(0.4, 0, 1, 1)
Dismiss, fade out
spring.press
stiffness 776.9, damping 17.14
Press down, button feedback

Pattern 1

Press Feedback

Live demo

Buy Bitcoin
Swap
Buy
Swap
Stake
Send
↑
Sent Bitcoin
Today · 9:41 AM
−$1,151.43
0.01 BTC
↓
Received ETH
Yesterday · 4:12 PM
+$892.00
0.312 ETH
⇄
Swapped BTC→ETH
Mon · 2:30 PM
$3,200.00
0.028 BTC

Press and hold any element — spring.press releases on finger up

What dev received

FieldSpec
When to use
Buttons, list rows, cards, pills, poll options
Trigger
While pressing
Transform
Scale 1.000 → 0.985, anchor center
Duration token
motion.springLong
Easing token
spring.press
Opacity
No change
Release
Spring back to 1.000 on finger up
Haptic default
haptic.light
Haptic confident
haptic.medium
Build notes
Animate transform only. No layout shift. No shadow change.

Pattern 2

Surface Entry

Live demo

Send 0.01 BTC
✓
Bitcoin sent
0.01 BTC · $1,151.43
View

Slides in from Y+24 · holds 1500ms · exits with ease.in.standard

What dev received

FieldSpec
When to use
Success feedback, toast, banners, confirmation sheets
Trigger
After success event
Enter position
Translate Y 24px → 0px
Enter opacity
0 → 1
Enter duration
motion.base
Enter easing
ease.out.snappy
Hold time
1500ms (toast)
Exit duration
motion.base
Exit easing
ease.in.standard
Haptic token
haptic.success
Build notes
Toast stays interactive. Promo banners do not auto-dismiss.

Pattern 3

Expand / Collapse

Live demo

💼
Wallets3▼
Opulent Octopus · $12,340.00
Savings Vault · $8,900.00
DeFi Wallet · $3,210.00
🌀
DeFi Positions2▼
Uniswap LP BTC/ETH · $4,500.00
Aave Supply · $2,200.00
🖼
Collectibles4▼
Bored Ape #7823
CryptoPunk #4501
Azuki #2211
Doodle #8823

Only two states: collapsed or fully expanded — no mid states

What dev received

FieldSpec
When to use
Disclosure rows, account module, accordion lists
Trigger
On tap release
Transform
Inner content scale 1.000 → 0.985 on tap
Expand duration
motion.slow
Expand easing
ease.out.standard
Expand haptic
haptic.light
Collapse behavior
Reverse of expand
Collapse duration
motion.base
Collapse easing
ease.in.standard
Collapse haptic
haptic.none
Build notes
Child rows fade in. Only two legal states.

Pattern 4

Chart Data Reveal

Live demo

$115,143.47
↑+3.98% today
₿

Switch periods to re-trigger the draw animation

What dev received

FieldSpec
When to use
Token detail screen, portfolio chart, price history
Trigger
On screen mount or period change
Animation
Bezier path draw left → right
Duration
1100ms
Easing
Cubic ease-out (t³)
Area fill
Gradient, opacity 20% → 0%
End indicator
Dot with pulse halo
Period switch
Re-triggers full draw animation
Build notes
Canvas API. No SVG. quadraticCurveTo for smooth curves.

Pattern 5

Skeleton Loading

Live demo

Replay skeleton →

What dev received

FieldSpec
When to use
Any async data — balances, transactions, token prices
Trigger
Immediately on screen mount, before data resolves
Shimmer
Linear gradient sweep, 1.4s infinite
Duration token
motion.slow
Entry easing
ease.out.snappy
Stagger
60ms per row on data arrival
Haptic token
haptic.none
Build notes
Skeleton must match real layout exactly. Never flash empty state.

Pattern 6

Balance Count-up

Live demo

Portfolio value
$0
Bitcoin held
0 BTC
Staking APY
0%
24hr P&L
+0(0%)
Replay count-up →

What dev received

FieldSpec
When to use
Balance reveal on home screen, portfolio total, P&L
Trigger
On screen mount or data load complete
Duration
1200–1600ms (varies by value size)
Easing
Cubic ease-out (t³)
Start value
0
Stagger
120ms between multiple counters
Haptic token
haptic.none
Build notes
Use tabular-nums. Never animate negative values.

Pattern 7

Haptic Visualiser

Live demo

haptic.lightLight · Normal tap, row press
haptic.mediumMedium · Copy, confirm action
haptic.successSuccess · Transaction complete

Tap each to see the intensity difference — rings = haptic weight

What dev received

FieldSpec
When to use
Design review, documentation, handoff
haptic.light
1 ring — row press, button tap, accordion
haptic.medium
2 rings — copy address, poll confirm
haptic.success
3 rings — transaction complete, account funded
haptic.none
No rings — passive content, auto-dismiss
Build notes
Ring count maps to haptic intensity. Use to verify correct token selection during review.

Pattern 8

Success Particle Burst

Live demo

Send 0.5 BTC 🚀
✓
0.5 BTC sent!
$57,571.73 · Confirmed
View

Press fires particles + haptic.success, then toast enters

What dev received

FieldSpec
When to use
High-value success moments — large sends, first purchase
Trigger
On confirmed success event
Particles
48 canvas dots, mixed green + purple + white
Gravity
0.18–0.28px/frame downward pull
Duration
~1400ms fade to transparent
Sequence
Burst fires 180ms before toast enters
Haptic token
haptic.success
Build notes
Canvas overlay, pointer-events none. Only for money moments — never for passive events.

Pattern 9

Screen Navigation

Live demo

9:41
Total balance
$12,340.04
↑ +$487.21 today
B
Bitcoin
BTC
$115,143
+3.98%
›
E
Ethereum
ETH
$3,812
+1.24%
S
Solana
SOL
$186.40
−0.87%
Tap Bitcoin to navigate →
9:41
‹Back
Bitcoin
₿
BTC
$115,143.47
↑ +3.98%
Buy
Swap
Send
Popularity#1
Market cap$2.3T
24hr vol$18.8B
entry: ease.out.snappy
·
exit: ease.in.standard

Tap Bitcoin row to navigate · Back to return

What dev received

FieldSpec
When to use
All push navigation between screens
Trigger
On list row tap (asset → token detail)
Entry transform
Translate X 100% → 0
Entry easing
ease.out.snappy
Exit transform
Translate X 0 → −100%
Exit easing
ease.in.standard
Duration token
motion.slow
Back gesture
Reverse — entry easing on return
Build notes
Never scale during nav. Translate only. Both screens animate simultaneously.

What this unlocked

The motion system did more than add polish. It gave Ready X a more consistent interaction language, especially around navigation and transaction feedback, while giving engineering reusable patterns they could carry into new features.

More consistency

Common interactions behaved in predictable ways across the product.

More reuse

New features could build on existing motion patterns instead of starting from scratch.

Clearer handoff

Engineering had defined behaviour and implementation guidance rather than relying on interpretation.

Adding moments of delight

Not every interaction needed to be purely functional. I also used Rive to add small moments of personality and feedback throughout the product, helping Ready X feel more distinctive without distracting from the task at hand.

Clickable icons

Experimentation in Rive for animation style.

Differentiating Ready X without slowing delivery

Visual differentiation through colour

Ready X needed to feel distinct from the main Ready app while still using the same underlying component system.

The challenge was to create a stronger product identity without slowing development or rebuilding the interface from scratch.

What I did

I created a new colour system that could shift the personality of Ready X across both design and development. Rather than redesigning individual screens, I used colour as a system-level tool for separation, hierarchy and state, while keeping the existing component structure intact.

The palette also had to work hard functionally, supporting accessibility, interaction states, data-heavy screens and high-trust financial actions.

Why it mattered

This gave Ready X a distinct visual identity without fragmenting the underlying system.

By solving the problem at the system level, we improved hierarchy across complex screens, kept mobile and web aligned, and gave design and engineering a stronger foundation for future features.

Check out this presentation to see the new colour system in action!

Wallet architecture.

Designing for a multi-account wallet

Ready X needed to support several account types, each with different levels of access, visibility and risk. My job was to make that complexity feel simple, so users could understand what they were using, add or import accounts safely, and manage them with confidence.

Check out the full flow here

System complexity

Rather than exposing the underlying account logic to users, I grouped the experience around a small set of consistent rules for setup, permissions and control. This created a clearer model for users and a more scalable structure for the product as new account types were added.

01

Account model

What kind of account is this?

Different account types came with different permissions and capabilities. I created a shared model that surfaced only what users needed to know: what kind of account they were using, what it could do, and any limitations that affected how it could be used.

Account list

See all accounts, balances, and types in one place. Gradient appears to allow the user to easily see which account is currently current.

Account type selection

Choose the right account type before setup begins.

Account state & capability

Clear visibility into account capabilities and settings at a glance.

Import method

Support for address entry and QR import.

Validation states

Catch errors early and explain what went wrong.

Setup feedback

Clear feedback and progress throughout the setup.

02

Setup and import

How do I add or import it safely?

Adding an account is a high-trust moment. I designed the flow to make it clear what users were importing, what level of access it would have, and whether the account could take actions or was view-only.

03

Settings and risk controls

What can I change, hide, connect, or remove?

Once an account existed, the challenge shifted from setup to control. I designed the settings around clear permissions and consequences, so users could understand what they were changing and where actions had higher risk or were irreversible.

Settings overview

Grouped by intent and risk for better clarity.

Visibility and control

Control how and where your account appears.

Sensitive actions

High-risk actions are separated and clearly communicated.

Related projects

Taken from the archives, screenshots and animation completed on similar based projects.

Ready: Making crypto feel clearer, safer, and easier to use