Evolution of a React Native app across 6 months and 4 complete UI overhauls.
Phase 1: The foundation (chaos)
Standard Expo setup. NativeWind for styling. Zustand for state. react-native-reanimated for animations.
First mistakes:
- Zustand broke in Expo Go (
import.metaerror) - react-native-reanimated crashed randomly in SDK 53+
- NativeWind className strings felt wrong for native
- expo-notifications crashed the dev client
Fixed by:
- Replacing Reanimated with RN's built-in
AnimatedAPI - Dropping NativeWind for pure
StyleSheet - Ignoring notifications until stable
Phase 2: Feature bloat (the trough)
Added everything. Streaks. Gamification. Science insight cards. Evening reminders. Dashboard with stats. Onboarding flows.
Felt like every other productivity app. Dopamine loops. Guilt when missing days. Charts showing "consistency."
Users (me) felt stressed opening it.
Phase 3: The strip (liberation)
Deleted more than added:
- Removed streaks entirely
- Killed gamification (badges, points)
- Dropped "productivity" language
- Removed charts and analytics
- Deleted the dashboard
Replaced with:
- One full-screen text input
- Swipe gestures (up to commit, right to reflect)
- Immersive mode (no nav, no chrome)
- "Honored / Progress / Not today" instead of checkmarks
Technical debt paid:
- Gesture handler tuning (280ms ease-in-out, no bounce)
- Swipe detection getting stuck on commit pages
- Safe area fixes for full-screen mode
Phase 4: The ritual (current)
Not a task app. A space you enter.
The gestures work:
- Swipe up: commit (soft haptic, scale animation)
- Swipe left: edit
- Swipe right: reflect (panel slides 280ms)
- Swipe down: history (minimal scroll, no dates screaming at you)
The visual calm:
- Paper background
#F6F4EF - Muted indigo
#4F46E5 - Sage success
#6BAF92 - No red. Failure is gray. Neutral. Okay.
Microcopy as therapy: "Set today's anchor" → "Commit" "Not checked in" → "No reflection yet" "You failed" → (deleted entirely)
Documentation debt
Added style guides. Product context docs. Design enforcement rules.
Realized the code was changing faster than the docs. Now docs lead implementation.
Current state
Gesture-first. Intention-only. Zero judgment.
The app makes me breathe slower. Success.
$ git log --oneline | wc -l 47 commits to find calm