Build example · in-house
A portfolio tracker for Android
Four asset classes, five data providers, one watchlist. Built to answer a question a lot of free apps answer badly: what is everything I hold actually worth right now, without an account, an ad, or a subscription.
This is our own product, not client work. We are saying so plainly because a build example and a case study are different things, and dressing one up as the other is the sort of thing you would rightly hold against us. What it does show is how we build: the decisions, the failure handling, and what happens when a free API misbehaves.


The watchlist, and one holding at intraday resolution. Candles and volume are drawn on Canvas rather than pulled in from a charting library — which is why the app carries no chart dependency at all.
What it does
- One list, four asset classes. Crypto, equities, currency pairs and precious metals side by side, each routed to whichever provider actually covers it well.
- Live prices from five free sources — CoinGecko, Finnhub, Frankfurter, gold-api and Yahoo Finance. No paid data feed, no key the user has to supply.
- Candlestick and line charts over 1D, 1W, 1M and year-to-date.
- A detail screen per holding: day range, volume, market cap, company profile, fundamentals and recent headlines.
- Drag to reorder, swipe to delete, with undo — because a delete one gesture away from a mistake has to be reversible.
- No account, no tracking, no ads. Nothing leaves the phone except the price requests themselves.
The interesting part is what goes wrong
Anyone can call a price API. The engineering is in what happens when one of five free providers is slow, rate-limited, or quietly returns the wrong shape of data — which, on free tiers, is often.
How it is built
Stack
- Kotlin and Jetpack Compose, Material 3, light and dark
- Room for the watchlist and the price cache, with real schema migrations
- Retrofit and OkHttp with kotlinx.serialization
- Coroutines throughout; each provider fetched concurrently
- Charts drawn on Canvas — no charting dependency
- Android 8.0 and up
Around 27 Kotlin files. Small enough that one person holds all of it in their head, which is deliberate: the same property is what makes a handover to your team realistic rather than theoretical.
What this says about a build for you
The same approach applies to work we do for clients: fixed scope agreed up front, running on your own accounts and keys, source and documentation handed over, and honest handling of the cases where a dependency lets you down — because it will.
Want something like this built? Tell us what it needs to do. You will get a straight answer on whether it is worth building — and a rough number — usually within one business day.
Get your free review