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:
- Started with MVP focusing on core reminders and notifications
- Built custom snooze system with user-defined presets (completed ahead of schedule)
- Implemented OAuth (Google/Apple Sign-In) for seamless onboarding
- Built complete device sync system with 98%+ test coverage
- Integrated RevenueCat for freemium monetization
- 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

Log in or sign up for Devpost to join the conversation.