Overview
A habit tracker that borrows its mechanics from role-playing games. Logging a session earns experience, each area of life is a track that levels independently, and a contribution heatmap in the style of a commit graph makes a broken streak impossible to ignore.
The design deliberately rewards consistency over intensity. Early levels arrive quickly so the habit forms; later ones take months of unbroken discipline, so the reward curve matches the behaviour it is trying to produce rather than the behaviour that feels good to ship.
What I own
The concept, the design document, three staged implementation plans, and the Flutter application itself.
Complexities tackled
Deciding what not to build into an existing product. This started as a feature idea for Sortive and was deliberately split out. Sortive is a frictionless productivity tool; a gamified system is the opposite of frictionless. Merging them would have made one app that was worse at both jobs. Separating them cost a second codebase and was still the right call.
Designing a reward curve rather than a reward. Points that arrive at a constant rate stop meaning anything within a fortnight. The progression is exponential, so the early levels hook and the later ones take real time, and side missions carry small awards so that a partial day still counts for something. Getting that curve wrong is the difference between an app someone opens for a week and one they open for a year.
Local first, then synced. State lives in Hive on the device so the app is instant and works with no connection, with Firebase behind it for accounts, cross-device state and the social comparison features. A tracker that stalls on a spinner when you have thirty seconds to log a session does not get used.
Stack
Flutter and Dart, Riverpod for state, Hive for local persistence, Firebase Authentication, Cloud Firestore and Cloud Functions, go_router for navigation, flex_color_scheme for theming.
Working on something similar?
Tell me what you are building and what is in the way. I will tell you honestly whether I am the right person for it.