← work

05 - Case Study

Freedom

Offline-first finance tracker - built, shipped, published

Freedom
Timeline2022
RoleFull-Stack Engineer
StackReact Native, Realm DB, JavaScript, Victory Charts
StatusIn development

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.

01 - Data Model

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.

02 - Logging Flow

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.

03 - Visual Reports

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

01

Published on Android and maintained through iterative updates based on user feedback

02

Offline-first - no internet required, no data loss on connectivity interruptions

03

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.