Ascend
A Flutter habit app built around identity, not streaks. Daily check-ins tied to who you want to be, with local Hive storage and RevenueCat subscriptions.
Overview
Ascend is a mobile habit app for iOS and Android. You pick an identity: runner, patient parent, whatever fits. You attach daily actions to it and check in against that person, not a streak counter.
Problem
Every habit app I tried treated a completed checkbox as the win. Miss a day and you’re back to zero. That never matched how I actually think about change. I care whether today’s behaviour lined up with the person I was trying to be, even when the task list looked messy.
Solution
I built it in Flutter with Riverpod for state, Hive for local storage, and RevenueCat for subscriptions. You create identities, hang habits off them, and log check-ins. A journey view tracks progress over time; a weekly reflection flow looks back at what worked. Home screen widgets and Health Connect can mark actions complete without opening the app.
The UI keeps coming back to one check: did I act like that person today?
Architecture
Flutter (Dart + Riverpod)
│
▼
Hive (local persistence)
│
├── Home widgets
├── Health Connect
└── RevenueCat (subscriptions)
│
▼
Check-ins → Journey → Reflection
Lessons learned
- The habit engine wasn’t the hard part. Deciding what question every screen should ask was.
- Identity labels need to be loose enough to stick (“healthy”) but tight enough to mean something in daily actions.
- I put the paywall after someone has a week of check-ins, not on first launch.
- I’m also exploring pre-app onboarding on the web: a plan before someone downloads the app.