Inspiration

I’ve lost count of how many times I’ve said, "I need to remember that," only to have the thought vanish ten seconds later. I tried every reminder app on the market, but they all felt like data entry jobs.

The friction of tapping through date pickers and time wheels was the "tax" I had to pay just to keep a thought.

I wanted to build an app that felt like an extension of my brain—where capturing a task is as fast as thinking it.

What it does

The next time a task pops into your head, you don’t "fill out a form." You just type. Watch as Trunk highlights the date and frequency in real-time.

Natural Language Parsing: Type "Call the dentist next Tuesday at 2pm" and Trunk instantly extracts the intent.

Smart Actions: When a reminder hits, you don't even open the app. Custom notification buttons let you snooze for 15 minutes, an hour, or until tomorrow with a single tap.

Real-time Sync: Powered by Firebase, your tasks stay in lock-step across iOS and Android, ensuring you're nudged on the device that’s actually in your hand.

How I built it

Trunk is built on React Native and Expo (iOS and Android).

  • I used chrono-node combined with custom regex patterns to handle the complex natural language processing.
  • Google Firestore handles the real-time data layer, allowing for instant cross-device updates.
  • I built a hybrid notification system using Expo Notifications and Firebase Cloud Functions to ensure triggers are reliable and timely.
  • RevenueCat manages the subscription logic, allowing me to focus on the UX while they handle the complexities of the App Store and Play Store billing cycles.

Challenges I ran into

The biggest hurdle was easily Cross-Platform Push Notifications. While simple alerts are easy enough, Trunk relies on Interactive Notifications (Action Buttons) for snoozing reminders.

iOS and Android handle notification categories very differently. I had to architect a system where the backend (Cloud Functions) could send a single payload that both platforms understood, while the frontend had to pre-register "Snooze" buttons correctly. This comes with the caveat that only the device where the notification originates will show the snooze action buttons, but the resulting snoozing functionality should still work on any connected devices. (With more time I believe I could resolve this so that all devices sharing the same account would have the snoozing action buttons)

Accomplishments that I'm proud of

I’m incredibly proud of how fast the NLP (Natural Language Parsing) engine feels. There is zero lag between typing "tomorrow" and seeing the date update. Entering "Go to the gym every Monday, Wednesday and Friday at 8pm" instantly creates the scheduled reminders.

What I learned

This is the first time I've used agentic AI to lead my development, and it has been a game-changer. What would’ve probably been a six-month project just a year to two ago, I was able to build Trunk from scratch in just two weeks.

Because Cursor’s AI agents have my entire codebase as context, I could offload implement each feature using a prompt and then use my own expertise to polish. Instead of fighting syntax all day, I actually got to focus on the product and the vision.

What's next for Trunk: Reminders

Home Screen Widgets: A daily view for today's tasks without opening the app.

Live Activities: A dynamic island/lock-screen countdown for short-term "Snoozed" reminders.

Collaborative Trunk: Add friends or family to specific lists.

Vision Capture: Use AI to scan handwritten notes or sticky notes and instantly convert them into smart Trunk reminders.

Share this project:

Updates