Why I built it
I am terrible at remembering birthdays. Calendar reminders never stuck because the friction isn't in the reminder — it's in the next step: actually composing a message. I wanted an app that would remind me and draft something I'd actually send, in one tap.
The stack
Flutter for the app, Firebase for auth and config, and on-device contact reading so address books never leave the phone. The hardest call was the privacy one: keeping data local meant I couldn't do server-side scheduling tricks, but it also meant I could promise — and prove — that contact data never gets uploaded. For a consumer app dealing with someone's friends list, that's the only acceptable answer.
AI without the AI tax
Message suggestions are AI-generated, but I wanted the free tier to stay genuinely free. The trick: batch generation for common templates, cache aggressively, and only hit the model on demand for personalized variants. Most users never touch a paid path.
The freemium line
- Free: reminders, contact sync, basic message templates.
- Paid: AI-personalized messages, smart scheduling, multi-message campaigns.
Drawing that line took longer than building either tier. The wrong split makes free feel useless or paid feel pointless — and you only find out once people start downloading.
What surprised me
The Play Store review process was far more about consent and disclosure copy than about the code itself. I rewrote the contacts permission prompt four times before approval. If you're shipping a consumer app, budget time for store-listing iteration, not just engineering.
What's next
iOS. Group reminders for shared friends. And an import path that doesn't require manually adding every contact.
Available now on the Google Play Store, or learn more at birthdaynudge.com.