In short
An investment platform comprising systematic managed strategies, on-chain vault programmes and token utility, accessed through a single mobile application on iOS and Android. The mandate was the client application: one Flutter codebase delivering a genuinely native product on both platforms, in a category where almost everything the customer experiences is interface, and where an interface that reads as provisional undermines the proposition it presents.
Mandate
- One mobile client serving iOS and Android at release quality
- Access to managed strategies, on-chain programmes and token utility from a single surface
- An experience carrying the credibility of the underlying product
Constraints
- Platforms
- iOS and Android
- Codebase
- Single
- Custody
- Independent of the app
- Release
- Both app stores
Architecture
One codebase across two platforms, without evidence of it
A cross-platform codebase is an economic decision that becomes a product decision the moment a customer can perceive it. Flutter earns its position where the team treats platform divergence as work to be performed rather than as a concern the framework absorbs: secure storage, biometrics, notification behaviour, and the review conventions of two stores that disagree on what a financial application may state.
Delivered on that basis the arithmetic is straightforward. One implementation of each screen, one location in which a defect exists, and two releases that do not diverge between them.
Interface as the product surface
A customer of an investment platform never observes the strategy, the execution or the custody arrangement. They observe a figure, and the application's behaviour while that figure is retrieved. Ordinary interface imprecision becomes disproportionately expensive in that context. A balance rendering zero before it loads, a value arriving in two stages, a state presenting differently on a second visit: each reads as a question about whether the assets are handled with more care than the screen.
The platform's own positioning sharpens the requirement further. Independent custody and on-chain transparency are what it offers, which makes the application's obligation the faithful representation of a truth existing outside it, and the display of nothing it cannot source.
Decisions, and what they displaced.
The build is the straightforward half to describe. Below are the points at which the architecture could reasonably have gone another way, each recorded with the option that was rejected and the reasoning that rejected it.
- 01
A single Flutter codebase
Instead ofSeparate native iOS and Android applications
Two native codebases double the implementation of every screen and guarantee behavioural divergence over time. The two clients ultimately answer the same question differently, and the discrepancy is identified by a customer rather than by a test.
- 02
Rendering only values that can be sourced
Instead ofOptimistic placeholders during load
A placeholder balance in an investment product is not a loading state. It is an incorrect figure presented with confidence. Customers do not distinguish between an interface that was wrong for four hundred milliseconds and one that was simply wrong.
Delivered
- Native iOS and Android clients from one codebase, released on both stores
- In-app access to ecosystem programmes, vault products and token utility
Stack
Client
- Flutter
- Dart
- iOS
- Android
Integration
- On-chain reads
- Wallet connectivity
Related capabilities
Related reading
Next case
Retail banking without custody
Freed Finance