Joao Alves

Engineering Manager at IndeedFlex

Prompt-Driven Product - From Idea to Plan

Posted at — Jul 3, 2025

image

In my previous article, we saw how I put Gemini Pro through its paces, essentially “interviewing” it to see if it could be my AI partner for this project. With its capabilities validated (mostly! 😅), it was time to start the real work: transforming my raw idea of an app into a more concrete product vision and plan. This article will cover how we fleshed out the “what” and “why” of our Water Reminder App.

Explaining my Vision to Gemini Pro

Every product starts with an idea, right? For me, as mentioned before, it was a personal need for better hydration, aligned with my interest in building something with AI. So, the first step was to articulate this vision to Gemini Pro.

I started by explaining the core problem I wanted to solve and my high-level vision for the app with an initial list of features: a simple way to log water; the ability to set drinking reminders; analytics features to see progress, historical data, and for motivational reasons.

Beyond My Own Thoughts

But this wasn’t just about me dictating the way. I wanted Gemini Pro to engage, challenge, and contribute to this vision like a human product or engineering partner would. After some prompting to set up rules of engagement, it didn’t just passively accept my initial ideas. It refined them and suggested new ones. Here are some of the features that we spent time discussing and how Gemini Pro elevated them:

Daily Hydration Goal:

Water Intake Logging:

Basic and Smart Reminders:

Local Notifications:

Personalisation:

This collaborative process was very interesting and contributed to enhance what I had initially envisioned for a simple water reminder.

Tech Stack & Data Flow Decisions

While we touched upon the high-level tech stack (Flutter and Firebase Firestore) in the first article, this phase was about going a bit deeper to see how these pieces would fit together for our specific features. With the overall idea for the app and upcoming features defined, we had good chats around the data models needed to support them and how to use them in the most efficient way possible.

Why efficient? Because during this phase, Gemini Pro helped me understand the impact of these technology choices on aspects like scalability and cost. Firebase is virtually free if you don’t have users. Altough, if your product scales and you get many active users, those costs can also scale considerably depending on how you use the technology.

We won’t dive into the details here as we will have a dedicated article for this. But Gemini’s projections on potential costs, based on the number of active users and different syncing model implementations, was crucial to make some decisions at this point.

Visualizing the Experience

A really fun and useful part of this experience was Gemini’s ability to generate really nice wireframes for all the UX I initially described. It did this unprompted the first time, so I made it a rule for every feature review, and it has been super useful. I had a bunch of small UX ideas for different features, and going through them with simple wireframes allowed me to discard many and move with a more refined approach before any coding. Some examples below:

+-------------------------------------------+
|                                           |
|           [ Animated Droplet Visual ]     |
|                                           |
|       Stay Hydrated, Live Better          |
|                                           |
|  Drinking enough water is one of the      |
|  best things you can do for your body,    |
|  mind, and overall wellness.              |
|                                           |
|                                           |
|  ( ● ○ ○ ○ ○ ○ )                          |
|                                           |
|  [         CONTINUE          ]           |
+-------------------------------------------+
+-------------------------------------------+
|                                           |
|           [ Icon of a Target 🎯 ]          |
|                                           |
|    Let's Find Your Personal Target        |
|                                           |
|  To calculate a personalized daily        |
|  hydration goal, we'll ask a few quick    |
|  questions. Your data is always private.  |
|                                           |
|                                           |
|  ( ○ ● ○ ○ ○ ○ )                          |
|                                           |
|  [         CONTINUE          ]           |
+-------------------------------------------+
+-------------------------------------------+
|                                           |
|           [ Confetti / Star Icon ✨ ]       |
|                                           |
|       Your Personal Goal is Ready!        |
|                                           |
|                                           |
|                  2750 ml                  |
|                                           |
|  ---------------------------------------  |
|  | Base goal (from weight):   2250 ml |  |
|  | Activity bonus (Moderate): +500 ml  |  |
|  ---------------------------------------  |
|                                           |
|  This personalized target is your         |
|  foundation for a healthier life.         |
|                                           |
|                                           |
|  ( ○ ○ ○ ○ ○ ● )                          |
|                                           |
|  [           LET'S GO!           ]       |
+-------------------------------------------+
+-------------------------------------------+
| [History 📊]      Today       [Settings ⚙️] |
|-------------------------------------------|
|                                           |
|       Good morning! 👋                    |
|                                           |
|      /--------------------------\         |
|     |                            |        |
|     |      [ Animated Glass ]    |        |
|     |       (45% full)           |        |
|     |                            |        |
|     |        1250 / 2750 ml      |        |
|     |                            |        |
|     |            45%             |        |
|     |                            |        |
|      \--------------------------/         |
|                                           |
|                                           |
|           Quick Add:                      |
|                                           |
|   [+250ml]  [+500ml]  [+750ml]            |
|                                           |
|                                           |
|                   [ + ]                   |
+-------------------------------------------+
+-------------------------------------------+
|                                           |
|                                           |
|      /--------------------------\         |
|     (      1250 / 2750 ml      )         |
|      \--------------------------/         |
|===========================================|
|   ----- (Drag handle)                     |
|   Add Intake            [Edit List ✏️]    |
|  +---------------------------------------+  |
|  | [💧Glass]  [🍼Bottle]  [🟡Protein]     |
|  |  250ml      500ml       500ml         |
|  +---------------------------------------+  |
|                                           |
|   Or enter a custom amount:               |
|  +---------------------------------------+  |
|  |  [     425     ] ml                   |
|  +---------------------------------------+  |
|                                           |
|  [         ADD TO TOTAL          ]       |
+-------------------------------------------+
+-------------------------------------------+
|      [<]      Manage Containers           |
|-------------------------------------------|
|                                           |
|  YOUR FAVORITES                           |
|  These appear in the "Add Intake" sheet.  |
|  +---------------------------------------+  |
|  | 💧 Glass          [250 ml]    [★]    |
|  +---------------------------------------+  |
|  | ☕ Mug            [350 ml]    [★]    |
|  +---------------------------------------+  |
|  | 🍼 Bottle         [500 ml]    [★]    |
|  +---------------------------------------+  |
|                                           |
|  OTHER CONTAINERS                         |
|  +---------------------------------------+  |
|  | 🧪 Shaker         [750 ml]    [☆]    |
|  +---------------------------------------+  |
|                                           |
|                                           |
|                                           |
|                   [ + ]                   |
+-------------------------------------------+
+-------------------------------------------+
|                                           |
|         [ Notification Bell Icon 🔔 ]       |
|                                           |
|        Never Miss a Hydration Goal        |
|                                           |
|  To help you stay on track, our app can   |
|  send timely reminders throughout the day.|
|  We'll need your permission to do this.   |
|                                           |
|                                           |
|  ( ● ○ ○ ○ ○ )                            |
|                                           |
|  [    ENABLE NOTIFICATIONS     ]         |
+-------------------------------------------+

This process allowed me to refine the UX for various features without needing Gemini to generate any code, avoiding the extra complexity in its knowledge base.

💡 Pro tip: Keeping code generation for when it’s truly needed helps preventing LLMs to mix versions of code and contexts.

Monetisation & Feature Tiers

While the idea started with building something for myself and to improve my hydration habits, the goal was always to release it in the app stores. Given that, it made sense to explore scaling and monetisation possibilities. Gemini Pro did great reviewing the defined functionality and brainstorming ideas for what features could be restricted to a subscription level versus what could remain free.

We discussed the technology, where I mostly validated that Gemini Pro could integrate RevenueCat in the project as the gold standard tool for the job. Then we went through the different feature ideas and defined how they could be broken down into free vs paid functionality.

Gemini suggested features like the already mentioned smart reminders and “snooze” quick action for the notifications; more advanced analytics with deeper insights; ability to set a list of favourite containers, amongst others.

This has become an ongoing discussion for every new piece of functionality we build. It ensures the free tier offers enough value to attract users, while the premium tier provides that wow factor and compelling reasons to upgrade.

Time to Build!

This phase of product vision and feature definition was super interesting and really showed that an LLM can be much more than just a code generator. This is where I see the value of interacting directly with an LLM, versus leveraging only the built-in code assistants available in several IDEs.

We were able to transform a simple, rough idea into a more comprehensive plan of action. Complete with detailed feature requirements and high level technical decisions. We’re now ready to move into the actual building phase.

Stay tuned for the next article, where we’ll dive into how Gemini Pro and I started translating this plan into actual features in the app!

comments powered by Disqus