Inspiration

Asides Sam's brief , we wanted to build the assistant we wished we had: one that doesn't care if you are on a laptop or a phone (The Brief spec) , and one that doesn't force you to scroll through endless date pickers just to set a reminder for "next Tuesday." We wanted to bridge the gap between Natural Language and Native System Utilities.

What it does

Rheminda is an intelligent, cross-platform assistant that turns unstructured voice or text into organized, actionable schedules.

  • ๐Ÿ—ฃ๏ธ Voice-to-Action: You can speak complex requests like "Remind me to take my antibiotics for 5 days, then skip 2, then repeat," and the AI handles the math, setting up the entire queue instantly.
  • ๐Ÿ“ฑ Native & Web Sync: Start a task on the web dashboard and get the notification on your Android phone. Dismissing it on one device clears it everywhere.
  • ๐Ÿ”” Smart Notifications: Notifications aren't just alerts; they are control centers. You can "Snooze" or "Mark Done" directly from the Android shade without opening the app.
  • ๐ŸŒ Timezone-Aware Intelligence: The app smartly calculates relative times (e.g., "in 20 mins") based on your device's actual location, preventing server-side timezone drift.

How we built it

We adopted a Hybrid Architecture to maximize code sharing while retaining native power:

  • The Core: We built the frontend with Next.js 16 (React). This allows us to deploy the exact same codebase to the Web and to Android (wrapped via Capacitor).
  • The Brain: The backend is a Python FastAPI service. When a user submits a voice note, we transcribe it and feed itโ€”along with the user's local time anchorโ€”into Google Gemini 2.0 Flash. The AI extracts structured JSON (title, iso_date, recurrence_rule) which is stored in MongoDB.
  • The Experience: For the hackathon, we prioritized Frictionless Onboarding. Instead of forcing judges to sign up with email/password immediately, we implemented a persistent Device-ID Auth strategy (user_ + random hash). This allows testers to install and start using the AI features instantly without a login wall.
  • Monetization: We integrated RevenueCat to manage our Freemium model, handling the complex handshake between Google Play Billing and our entitlement logic.

Challenges we ran into

  • The "Timezone Drift": Our biggest technical headache was that the server (UTC) and the user (Local Time) often disagreed on what "tomorrow" meant. If a user in Nigeria said "in 10 mins" at 11 PM, the server in the US might schedule it for yesterday. We solved this by injecting the client's ISO-8601 timestamp into the Gemini System Prompt, grounding the AI in the user's reality.
  • Google Play's Gatekeepers: Navigating the Google Play Console for the first time was a maze. We faced issues with "Merchant Accounts" blocking our ability to test subscriptions and strict policies regarding the RECORD_AUDIO permission. We had to rapidly build a privacy policy and configure a hybrid "Test Store / Real Store" offering in RevenueCat to debug locally while deploying for judges.

Accomplishments that we're proud of

  • "AI-Managed" Recurrence: Standard libraries (like rrule) couldn't handle "3 days on, 1 day off." We built a custom queueing logic where Gemini generates the specific future dates for these irregular patterns, something most major to-do apps can't do.
  • Seamless Native Feel: Despite being a "web" app at heart, the Capacitor integration feels completely native. The bottom sheets, vibrations, and status bar coloring make it indistinguishable from a Kotlin app.
  • Fixing the "Purchase Loop": We successfully debugged a critical RevenueCat configuration where the app was trying to buy a "Test" product in a "Production" environment. Fixing that handshake was a massive win.

What we learned

  • Deployment is 50% of the work: Building the feature is easy; getting a Signed AAB bundle accepted by the Play Store Internal Track with valid permissions and merchant profiles is the real challenge.
  • Prompt Engineering is Logic: We learned that AI models need "anchors." You can't just ask for a date; you have to tell the model what time it is right now for it to be accurate.

What's next for Rheminda

  • ๐Ÿ” True Cloud Auth: We will replace our current localStorage ID system with a robust solution (Clerk or Firebase Auth) to allow users to restore their data on new devices securely.
  • ๐ŸŽ iOS Support: Since the codebase is already in Capacitor, deploying to the Apple App Store is our immediate next step to fulfill the "Cross-Platform" promise.
  • ๐Ÿ“ Context Triggers: We plan to use Gemini to parse location-based intents (e.g., "Remind me when I leave work"), utilizing geofencing plugins.

Built With

Share this project:

Updates