One Flutter codebase shipping to both Windows and Android. Habit tracking with per-habit schedules, streak monitoring, and reminders routed through platform-native notification channels so a desktop nudge and a phone nudge each feel at home.
Carries into the engineBuilding one interface system that adapts instead of branching per platform — the same discipline behind a UI that has to work on a monitor and a controller.
The problem
Most habit trackers either drown the user in gamification or feel like spreadsheets. I wanted one that does three things well — log the habit, show the streak, nudge at the right moment — and stays out of the way otherwise.
What I built
A single Dart codebase targeting two very different form factors. Each habit carries its own schedule; reminders fire through native notification channels per platform. The layout adapts from a phone column to a desktop dashboard without a separate set of screens.
Why it matters here
Responsiveness came from composing a small set of adaptive widgets rather than branching per platform, which kept one design language everywhere. That is the same argument for a component-driven UI system in a game rather than hand-placed widgets per screen.
What it taught me
Shipping identical code to two form factors forces real discipline around state ownership and layout constraints — where state lives, who is allowed to change it, and what happens when the container changes size underneath it.