notreally.work
$menu[+]
user@notreally:~$ cat /var/www/index.html
😌 Zen

One Thing: from todo app to digital ritual

#react-native#one-thing#gestures#expo#pivot

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.meta error)
  • 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 Animated API
  • 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

user@notreally:~$ _