3weeks Dev Log #7 — Four Years Later, Rebuilding in Flutter

The Rebuild Decision
When I decided to rebuild 3weeks, the first question was: keep the existing code, or start from scratch?
The existing code was Swift + UIKit + Realm Swift. iOS only. Written in 2019. Still functional, but with plenty of parts I'd want to do differently now.
After the SMART LOTTO Flutter rebuild, the path for 3weeks felt natural.
Why Flutter
One reason: I wanted Android support.
The 21-day habit formation idea isn't exclusive to iPhone users. People on Android want to build habits too.
Swift UIKit can't target Android. React Native was an option, but Flutter had worked well for SMART LOTTO and I wanted to stay on a familiar stack.
Flutter builds for iOS and Android from a single codebase. UI customization is flexible. Dart shares enough syntax with Swift that the learning curve was manageable.
What to Keep, Improve, and Add
Before writing any code, I mapped out what the rebuild would contain:
Keep:
- 21-day consecutive check system
- Reset on any missed day
- Per-habit notifications
- Reward text field
Improve:
- Voice memo (structural redesign)
- Complete UI/UX redesign
Add new:
- Badge collection system
- Per-habit statistics
- Aggregate statistics across all habits
- Android support
With that scope defined, the rebuild had a clear shape.
The Advantage of Rebuilding an Established App
Rebuilding is different from building something new.
Four years of reviews told me exactly what worked and what was missing. The first version was "the app I wanted to use." This version would be closer to "the app users actually want to use."
That's a meaningful difference in starting point.
Flutter's Learning Curve Was Low
Asked how hard the transition from Swift UIKit to Flutter was: easier than expected.
Having already built SMART LOTTO in Flutter, the basic patterns were familiar — widget trees, state management, routing. Dart is syntactically similar enough to Swift to read comfortably.
3weeks is simpler than SMART LOTTO, so I expected the development pace to be faster. That turned out to be true.