Base App Redesign at Coinbase
2024In 2024 I rebuilt the Coinbase Wallet app around a home feed. I started on my own, and two junior engineers joined me later. Jeffrey Hinojosa (opens in a new tab) was the product manager and Alex Braica (opens in a new tab) designed it, and I worked with every team that owned a tab. The app is built in React Native, and it is now the Base app (opens in a new tab) on the App Store.
This was my first mobile project.
The problem
Coinbase Wallet is a self-custody crypto wallet, and in early 2024 it had five tabs: Assets, Explore, Browser, Transactions, and Settings.
Opening the app always landed you on Assets, a list of crypto you already own. It was a clear answer to "what do I have," and a bad place to find anything else. New features and the social platform lived in Explore instead: apps worth trying, tokens, and things happening onchain.
Settings took the fifth tab. People open it a few times, so it was not worth a slot on the tab bar. That was our hunch in early 2024.
The company wanted the app to be about discovery and engagement, without making assets harder to see. But the app was tuned for checking a balance and badly tuned for finding anything else, so the goal was to put discovery first and keep assets easy to reach.
What I built
A new tab bar and the screens around it, behind experiments and kill switches so any of it could be turned off in production without a release:
- Four tabs: Home, Browser, Transactions, Wallet. Explore's feed moved onto Home, Assets moved to Wallet, and Settings left the tab bar for a gear icon on the Wallet header. Browser stayed.
- A Home screen in the first position. Balance at the top, with Buy, Swap, Bridge, Send, and Receive. Below that, the old Explore content in a scrollable feed: header and search, then NFTs to mint, trending swaps, dapps, and inbox. Tapping the balance opens the Wallet tab.
- A Wallet screen with everything Assets used to have. Receive and Settings on the right of the header, a warning dot if the wallet was not backed up, and an activation state instead of an empty list for a zero balance.
- A stacked portfolio on Wallet: crypto, NFTs, and DeFi, each with its own screen behind a "see all". This ran as its own experiment.
- Sticky tabs, also its own experiment, with a toggle in display settings. The app opened on the last tab you used, even after a restart, so someone who only wanted their balance landed on Wallet instead of Home.
- Moving a tab broke deeplinks and crashed the app on some navigation paths, so I rewrote the deeplink map and audited every in-app redirect.
- Analytics on the new screens, so we could judge the rollout on numbers instead of opinions.
- Smaller pieces that shipped in the same work: theme colors, avatars and an avatar picker, a welcome Lottie, a long-press account switcher, and daily percentage change on assets.
What it took
Each tab had a different team and my work touched all of them, so a lot of the work was communication. I learned each team's codebase, told them what was changing, and got them to agree on one plan. I worked with Jeffrey on scope and with Alex on the screens, and gave feedback on the designs as they came. Two junior engineers joined me later, I guided their work, and we delivered it together.
Most of the rest was writing things down:
- A technical design doc, sent around for review.
- A plan with dates for each screen, so every team knew when their part was needed.
- A launch doc, a dogfooding doc, and a deeplink config doc.
- A live table of known and open issues, with an owner and a priority, run with product and design.
- A bug bash, a demo, and the analytics events for the new screens.
- A comparison of the old and new designs on two numbers: how long a screen took to finish rendering, and how long navigation was blocked while moving between screens.
- A learnings doc at the end.
Where it shipped
It went out on iOS and Android in App Store version 28.90, to every Coinbase employee first, for dogfooding, then to customers in steps: 1%, 5%, 25%, 50%, and 100% by May 2024. Guardrails were render and navigation speed, crashes, no high-severity bugs, and no drop in buys or transactions, which were the core things in the wallet.
Outcome
The new design won its experiment, and we deleted the old design's code. We compared the two directly: screens finished rendering faster on the new design, and after a tap the app spent less than half as long unresponsive. I do not have the engagement numbers to share.
The stacked portfolio lost its experiment and we did not keep it.
Later we removed sticky tabs and made Wallet the tab the app opens on, which is closer to the old assets-first app than the home-first design we launched with. That version ran in production until the middle of 2026, when Base was redesigned again.
What I learned
- Nested experiments are a nightmare.
- The mocks from design sometimes miss edge cases. Someone signing up for the first time has an empty wallet, so what does their screen look like after the change? What does it look like on an iPhone SE, or on the cover screen of a folded Galaxy Fold?
- Mobile is not web. On web you deploy and the change is live. On mobile the code ships inside an app version, and old versions stay on people's devices because not everyone updates.
- Mobile ships on a schedule and passes a QA gate. A release goes out every week, so a change has to land before the cutoff for QA to test it properly. QA are engineers, and they run full regressions. The work is slower than web.
- OTA (over-the-air) updates let you ship a fix without a store release. We used them for a few things that could not wait for the next version.
- Keep testing the old design when an API changes, because both designs were live in the same binary for months.