Inspiration

Switching between Android and iOS devices for phone reviews was a nightmare—reminders wouldn't sync, I'd miss notifications, and every platform wanted to lock me in. Apple Reminders only works on iOS, Google Tasks is Android-focused, and third-party apps require too many taps to manage anything.

I built RemindFlow to solve this: instant cross-platform sync and zero-friction snoozing.

What it does

  • Instant Sync: Sub-2-second sync across all devices using Supabase Realtime
  • Zero-Friction Snoozing: Snooze from notifications with custom presets—no app opening
  • Advanced Recurrence: Complex patterns like "every 3rd Friday"
  • Offline-First: Full functionality offline, auto-sync when back online
  • Cross-Device Notifications: Complete/snooze on one device, disappears everywhere

How we built it

Tech Stack:

  • Compose Multiplatform for shared UI across Android and iOS
  • Kotlin Multiplatform for business logic
  • MVIKotlin for state management (MVVM + MVI pattern)
  • Decompose for navigation
  • Supabase for backend (auth, database, realtime sync)
  • Room for local database (offline-first architecture)
  • RevenueCat for subscription management
  • Firebase for analytics and crashlytics

Architecture Highlights:

Stack: Compose Multiplatform + Kotlin Multiplatform for shared code, MVIKotlin for state management, Supabase (auth + realtime sync), Room (local DB), RevenueCat (subscriptions).

Key Architecture:

  • Offline-first: saves locally first, syncs in background
  • Conflict resolution: Last-Write-Wins with timestamps
  • Background sync: WorkManager (Android), BGTaskScheduler (iOS)
  • 98%+ test coverage on sync system

Development Journey:

  1. Started with MVP focusing on core reminders and notifications
  2. Built custom snooze system with user-defined presets (completed ahead of schedule)
  3. Implemented OAuth (Google/Apple Sign-In) for seamless onboarding
  4. Built complete device sync system with 98%+ test coverage
  5. Integrated RevenueCat for freemium monetization
  6. Complete Material3 design system overhaul

Challenges we ran into

Cross-Platform Sync: Getting instant sync reliable across platforms was complex—offline conflicts, network edge cases, battery optimization. Solution: Robust sync queue with conflict resolution, achieved <2s latency.

Platform Limits: iOS caps notification actions at 4 buttons. Solution: Unified UX with 3 snooze presets + complete button, maintaining feature parity.

AGP 9.0 Migration: Broke 75 database tests (Room + Context issues). Solution: Maintained 90% coverage on business logic, documented restoration plan.

Accomplishments that we're proud of

  • 98% test coverage on sync with integration tests
  • 88% MVP completion—ahead of schedule
  • Complete OAuth (Google + Apple) on both platforms
  • Production-ready subscriptions with RevenueCat
  • Material3 design system with light/dark themes

What we learned

  • KMP is production-ready but requires careful expect/actual patterns
  • Offline-first is hard but critical—sync edge cases hide complexity
  • Testing is non-negotiable for sync—caught dozens of bugs pre-production
  • Platform constraints drive better UX—iOS limits forced cleaner design

What's next for Remind Flow

Instant notification dismissal (~1 week), dark mode toggle (~3 days)

Shared reminders/Circles, advanced recurrence UI, widgets, smart suggestions

Built With

  • compose
  • firebase
  • kotlin
  • revenuecat
  • supabase
  • supabase-auth
Share this project:

Updates