Exa App
A self-custodial wallet with a Visa card, on iOS, Android and the web. I lead its frontend team.
- Volume processed by Exa
- US$17M+
- My commits on main
- 1,294
- My merged pull requests
- 74
- Mobile releases since November 2024
- 110




Context
Exa App is a self-custodial wallet with a Visa card. People deposit crypto and earn yield on it, then spend with the card: they pay now from their balance, or split a purchase into up to nine fixed-rate installments borrowed against their own crypto, with no bank account or credit score. Exa Labs never holds their funds, and it neither issues the card nor lends: a licensed issuer issues the card under Visa, and the credit comes from the open-source lending markets of Exactly Protocol. The wallet is a smart contract account, so people sign in with a passkey instead of a seed phrase and the app pays their gas. It runs on OP Mainnet and on Base. One Expo codebase ships iOS, Android and the web, and a Hono server sits behind them. The monorepo is public on GitHub.
Since June 2026 I have led its frontend team. I joined in July 2024 as a senior frontend developer.
Problem
Money in a self-custodial wallet lives across networks and assets. Every feature has to work for someone who never thinks about chains, gas or bridges, on a phone and in a browser, from the same code.
Constraints
- The keys stay with the user, in their passkey, so the app has to prevent mistakes that nobody can undo afterwards.
- One codebase serves iOS, Android and the web.
Approach
- Core flows: onboarding, card management, payments and portfolio, integrated with Exactly Protocol’s on-chain markets for deposits, borrows and installment payments.
- Server: integrated identity verification through Persona with card issuance and card freezing, and fixed a stale web HTML cache that served outdated pages.
- Base launch: shipped the app side of the Base network launch (token integration, bridging, swaps and funding flows) with the backend and smart contract teams.
- Multi-chain swaps: implemented multi-chain swaps, on top of recovering assets sent on other networks and batched calls with
sendCalls. - Send to any network: sending any asset to any network, Bitcoin and Solana included, with the swap or bridge routed through LI.FI, and a gas policy that pays bridge fees with the tokens already on that network.
- Tokenized stocks: a distinct interface for tokenized stocks, the Coinbase-issued tokens on Base that track US shares and trade through swaps.
- App shell: app routing, deep link entry and support chat from any route.
- Quality: extended the Maestro end-to-end tests for payment flows on iOS and Android and traced release blockers to their root cause, including bugs in third-party libraries. I reported some of them upstream.
Outcome
- Three languages: the app ships in English, Spanish and Portuguese since I set up its localization in May 2025.
- Releases: about one mobile release a week, since the first in November 2024.