05 - Case Study
Freedom
Offline-first finance tracker - built, shipped, published
The Problem
I needed a budgeting app that worked without internet - most of the good ones require a server sync, which is useless on a bad connection. I also couldn't find one that felt fast with months of transaction history loaded.
What I Built
Built offline-first using Realm DB for local reads and writes - instant even with a year of transactions loaded. Category-based logging, budget goal tracking per category, and visual spending breakdowns that make the numbers actionable.
Realm DB as the local store - schema migrations in Realm are more fragile than SQL, so the model had to be right early. Designed around transaction-first entry: fast logging was the priority, analytics come second.
The entry screen needed to feel effortless - if logging a transaction takes more than 3 taps, people stop doing it. Optimised the flow down to amount, category, and confirm. No required notes, no mandatory fields.
Victory Charts for spending breakdowns by category and over time. The challenge was keeping renders fast on lower-end Android devices with 6+ months of data loaded - solved with pre-aggregation before passing data to the chart layer.
What Happened
Published on Android and maintained through iterative updates based on user feedback
Offline-first - no internet required, no data loss on connectivity interruptions
Chart rendering stays fast with large transaction datasets via optimised Victory Charts config
In the Wild
In Hindsight
Realm schema migrations are harder than they look - I hit a migration failure in an early update that wiped local data for users who hadn't backed up. SQLite with a proper migration library would have been more predictable.
