Illustration showing Orokai app

Building Orokai

A self-custodial DeFi interface where checking a price, staking, paying and tracking a transaction stop being four products. Five design decisions, what each one cost us, and what it took to hold them across two runtimes and two chain ecosystems.

Project Details

ROLE

Interface design & engineering

Surfaces

Web, iOS, Android

Ecosystems

EVM & Cosmos

Surfaces

Web, iOS, Android

Custody

Non-custodial

The brief

Friction that isn't the chain's fault

Checking a price. Staking a token. Paying for something in crypto. Tracking the transaction afterward. Four separate actions, and in most DeFi products, four separate apps. Nobody wakes up wanting to manage five browser tabs to do one thing.


Working on Orokai's interface, we kept running into the same question: is this friction actually necessary, or is it just what everyone's used to building? Five patterns came out of that process. Each maps to something researchers in behavioral design have understood for decades — the problems DeFi UX runs into aren't new or crypto-specific.


What follows is the design side of that work stated as decision records: the context, what shipped, and what each decision cost. The last part is usually the part that gets left out.

  • Orokai +++ self-custodial DeFi interface +++

  • Key Achievements

01

One hub instead of five apps

Apps in one workflow 5 → 1

Context

Every extra app isn't just extra time logging in and learning a layout. Each switch resets context: the user re-locates what they were doing and re-decides it's worth continuing. Four of those per workflow.

What shipped

Price checking, staking, payments and transaction tracking in one hub, with a single navigation model repeated identically on web and native.

What it cost

One surface now has to speak two chain ecosystems. EVM and Cosmos accounts share no address format, fee model, or signing flow. Consolidation moved that into @orokai/web3 — ours to maintain, instead of theirs to survive.

Workflow — check price, stake, pay, track
price feed
3,241.08ETH · USD

Live mid-price, refreshed every 4s.

→ to earn on this, open the staking portal

staking portal
4.1%APR

Pool open. Minimum deposit 0.01 ETH.

→ approve it in your wallet extension

payment page
0.75ETH due

Invoice expires in 14 minutes.

→ sign the transfer in your wallet

wallet extension
Sign1 request

Fee 0.00012 ETH. Cannot tell you what the contract does.

→ did it land? open the block explorer

block explorer
Pending3 conf.

Submitted 40s ago. Not pushed — reload to check.

→ check the price again, back to the feed

5 tabs open
4 layouts to learn
4 places to give up

Portfolio value
$12,480.22
Non-custodial

Do these first

Add fundsDone
Save an addressStep 2 of 3

Total rewards

+0.0412 ETH
last 30 days · paid daily

Passive income

4.1% APR
2.40 ETH staked

Activity

Sent 0.75 ETH · BaseConfirmed
Staked 1.00 ETHConfirmed
Reward credited+0.0031 ETH

1 interface

Context switches: 0 — every hand-off above is one you have to make yourself. Example data throughout.
02

Five steps into one

Taps to send a payment 5 → 1

Context

Confirm the amount, then the network, then the fee, then the destination, each on its own screen. Thorough from the builder's side; five chances to stop from the user's.

What shipped

One screen carrying a single intent through all five stages, with defaults derived from the route, the account's history and current fees — not from a blank form.

What it cost

Defaults have to be right, because nobody checks them. Every autofilled value needed its own validation path — the reason @orokai/web3-validation is a package and not a helper file. A wrong default is worse than an extra tap.

Send 0.75 ETH — try both
Step by steptaps 0
Step 1 of 5 — Amount
You send0.75 ETH≈ $2,430.81
Combinedtaps 0
Send — one screen
You send0.75 ETH≈ $2,430.81
ToExchange deposit0x8f…21b4
Base · Standard$0.41 · ~30 sec
Total with fee$2,431.22
Both flows submit the same transaction. The combined one answers the same four questions — it just does not make the user restate them.
03

Fewer options on the first screen

Hick's law · settings before the first tap 14 → 3

Context

Decision time rises with the number of choices. It isn't that people can't handle options — it's that each one adds a tax on decision speed, and the tax compounds once everything is visible at once.

What shipped

Three fields lead, filled from what the account already told us. The other eleven sit behind “more options” — reachable in one tap, never removed.

What it cost

Power users pay a tap they didn't pay before. We took that trade deliberately: the cost lands once, on the people best equipped to absorb it, and preferences persist per account so it isn't charged twice.

Send screen — settings visible before the first tapvisible settings 14

Send

Amount0.75 ETH
To0x8f…21b4
Network & feeBase · $0.41
Fee tierStandard
Slippage tolerance0.50%
Gas limitAuto
Priority fee0.02 gwei
Nonce184
Deadline20 min
MEV protectionOn
Approval amountExact
Custom RPCDefault
Memo / tagNone
Transaction typeEIP-1559
786ms to decide
RT = a + b · log2(n + 1)
a = 200 ms · b = 150 ms · n = 14
0.9s0.7s0.5s0.3s0.1s161116VISIBLE SETTINGS (n)

Illustrative curve using constants from the original Hick–Hyman studies — not a measurement of Orokai.

Drag to 3: the eleven advanced settings move behind More options. They do not disappear.
04

Warnings that teach instead of scare

Miller's law · alerts before confirming 6 → 1

Context

Working memory holds only so much. Stack six warnings and people stop reading them individually — they pattern-match “lots of red text” to “confirm and move on”, which is the opposite of the point.

What shipped

Education moved earlier: an interactive academy and guidance woven through the steps a user is already taking. One alert survives at the moment of action — the one carrying real risk.

What it cost

Removing a warning is a liability decision as much as a design one. Every alert we cut had to be demonstrably answered earlier in the flow, and we had to be able to point at where. That review is slower than adding a banner.

Confirming a first transfer to a new address
!

This transaction cannot be reversed once submitted.

!

You are interacting with a contract Orokai has not verified.

!

Network fees may change between now and confirmation.

!

Token prices are volatile and may move during execution.

!

Ensure the destination address is correct before continuing.

!

Orokai does not take custody of your assets at any point.

Earlier
Academy · Sending your first transfer
A two-minute interactive walkthrough, completed long before this screen was reached.
In flow
Network fee · $0.41
Paid to the network, not to Orokai.
At risk
!

You have never sent to this address before. Send $1 first to check it?

Confirm
Try the alert stack honestly — confirm the way you actually would.
05

Onboarding without assumed vocabulary

Jakob's law · modules on day one 12 → 3

Context

People judge a new product against every other one they've used. Almost nothing in daily life prepares someone for a wallet, a network, or a KYC step — and DeFi products are mostly built by people who forgot that.

What shipped

Progressive disclosure: three modules on day one, the rest surfacing as the tasks that need them arrive. Interactive tutorials in place of static instructions.

What it cost

Progressive disclosure means state. What someone has unlocked, completed and already seen becomes data the API owns and three clients have to agree on — web, iOS and Android, without drifting out of sync.

What the dashboard offers, over time

Typical DeFi dashboard, day one

Portfolio
Swap
Bridge
Stake
Lending
Yield
Governance
Perps
Analytics
API keys
Vaults
Referrals

12 modules, no order of operations, no clue which one comes first.

Orokai

1

Next: add funds. We'll walk you through it, one step at a time.

Portfolio
Add funds
Activity
Prices
Stake
Pay
Academy
Lending
Yield
Bridge
Governance
API keys

3 of 12 modules shown. The rest unlock as they become relevant — nothing is taken away.

Progressive disclosure, not a reduced product. Every module stays reachable from search.
  • +++ Let's Talk

  • +++ Let's Talk

Contact

Let’s bring your business on-chain.

  • +++ Let's Talk

  • +++ Let's Talk

Contact

Let’s bring your business on-chain.

  • +++ Let's Talk

  • +++ Let's Talk

Contact

Let’s bring your business on-chain.

Implementation

Five decisions, four surfaces, one shared core

Each decision above is a UX statement that has to survive contact with two runtimes and two chain ecosystems. The only way that stays consistent is to implement the rule once, in a shared package, and bind it per platform — rather than writing it three times and hoping the three stay equal.

Monorepo

  • Bun 1.3 workspaces
  • Turborepo pipelines
  • Biome · lint-staged · Husky
  • Docker Compose

Web

  • React Router 7
  • Vite 8
  • Tailwind CSS 4
  • TanStack Query · Virtual

Mobile

  • Expo 56
  • expo-router
  • EAS build pipeline
  • iOS & Android from one tree

Chain

  • viem — EVM
  • CosmJS — Cosmos
  • chain-registry
  • zod validation schemas

Shared packages

  • @orokai/web3
  • web3-react · web3-react-native
  • web3-validation
  • translations — EN / PL

Backend

  • TypeORM migrations
  • Seeded dev environments
  • Onboarding & progress state
  • GitHub Actions CI
Where each decision has to hold
DecisionWebiOS / AndroidEVMCosmos
01 · One hubShared navigation modelSame model, native shellOne account abstraction over two address formats
02 · One stepDefaults resolved in shared logic, rendered per platformEIP-1559 fee estimationGas price & denom per chain
03 · Fewer optionsSame three leading fields; preferences persisted per accountAdvanced settings differ by ecosystem — the disclosure does not
04 · One alertRisk checks run before the UI, not inside itApproval & contract checksSigning-mode checks
05 · ProgressiveUnlock state owned by the API, mirrored by both clientsModule availability depends on the connected ecosystem
Outcome

Same four actions, one place to do them

Checking a price, staking, paying, tracking a transaction: still four actions. Now one hub, fewer decisions along the way, and warnings and onboarding built for the person actually using it — with the complexity moved into a codebase we maintain rather than a workflow they endure.

Why does DeFi feel more complicated than it needs to be?

Most of the complexity isn't in the underlying technology, it's in how products present it. Spreading one task across multiple apps, showing every option at once, and stacking warnings without context all add friction that has nothing to do with blockchains being inherently hard to use. That is a design problem, not a technical one.

Does consolidating tools mean users give up control of their funds?

No. Orokai is non-custodial. Bringing price tracking, staking and payments into one interface reduces how many places a person has to navigate; it does not route funds through a third party. Keys stay with the user — the platform builds and relays the transaction they sign.

How do these decisions stay consistent across web and mobile?

The rules live in shared packages rather than in each client. Account handling, validation and chain access are implemented once and bound per platform, so a change to a default or a risk check lands everywhere at the same time instead of being reimplemented three times.