Inspiration

We wanted a reminder app that actually feels good to use — no clutter, no subscription walls for basic features, and smart enough to understand natural language. Most reminder apps either lock everything behind a paywall or overwhelm you with features you don't need. We set out to build something that's powerful yet simple, with a generous free tier and a one-time premium unlock instead of yet another monthly subscription.

What it does

RemindPro is a smart reminder app for Android that lets you create and manage reminders using natural language input like "tomorrow at 3pm" or "in thirty minutes." It features a week-view calendar integration, voice input, recurring reminders (daily, weekly, monthly, custom), a Pomodoro timer, categories and filters, swipe-to-delete, customizable date formats, dark mode, and local push notifications. Premium users get unlimited reminders, one-tap snoozing, location-activated timers and advanced recurrence patterns. Cloud sync across devices including iOS is on the roadmap, as is voice snooze.

How we built it

React Native with TypeScript, targeting Android first. We used Hermes as the JS engine, Firebase Firestore for future cloud sync, RevenueCat for in-app purchases, and react-native-push-notification for local notifications. The natural language parser is a custom-built regex engine that handles relative times, word numbers ("twenty minutes"), and various date formats. The entire app runs offline-first with SQLite for local storage. We built and signed the release AAB using Gradle with a PKCS12 keystore, targeting arm64-v8a architecture.

Challenges we ran into

Android builds were a constant battle — CMake steps stalling at 56% for 20+ minutes, port conflicts with Metro, and Gradle daemon memory issues. We solved the CMake stall by limiting reactNativeArchitectures to arm64-v8a only. Google Play rejected our first AAB upload because of a malformed App Actions schema XML that was missing queryPatterns — we had to remove it entirely. Getting notifications to play sound required debugging the Android notification channel system, only to discover the phone was in silent mode the whole time. Setting up RevenueCat with Google Play required navigating service account permissions, API access pages that don't exist in newer Play Console UIs, and propagation delays for internal testing.

Accomplishments that we're proud of

We shipped a fully functional app to Google Play from zero in a remarkably short time. The natural language parser handles everything from "in 5 min" to "twenty three minutes from now." The UI is clean and compact — no wasted space, no unnecessary buttons. The freemium model is genuinely fair: 25 free reminders with no ads, ever. The FORCE_PREMIUM_FOR_TESTING flag tied to DEV means we never have to worry about accidentally shipping with test gates enabled.

What we learned

Android build tooling is fragile — small config changes (like ABI filters) can mean the difference between a 2-minute build and an infinite stall. Google Play Console has a steep learning curve, especially around service accounts, API access, and testing tracks. Notification channels on Android are immutable once created on a device — you can't update sound settings from code after the first install. And natural language date parsing is a rabbit hole that never ends — there's always another edge case.

What's next for RemindPro - Productivity, synced

Cloud sync across devices using Firebase Firestore, with conflict resolution and offline-first architecture. iOS support. Widgets for quick reminder creation from the home screen. Team/family shared reminder lists. And adding Voice Snooze once Google approves our App Actions.

Built With

Share this project:

Updates