Inspiration
When working out, constantly planning meals that fit my daily protein and carbohydrate goals was a tedious process. The meal planner apps on the market either limited me to choosing from fixed, pre-made recipes or didn’t allow for flexible portion adjustments based on individual needs. Based on my own needs, I decided to create an app that uses AI to generate an endless variety of meals—with no repeats— tailored exactly to my macro goals.
What it does
Chefy : AI Meal Planner: Calculates the user’s daily macro goals based on their objective (muscle building, weight loss, healthy eating) and uses AI to generate meal suggestions that perfectly align with those goals. If a user gets tired of a meal, they can select “swap” to replace it while maintaining the same macros. The app creates a weekly plan and an automatic shopping list.
How we built it
I developed it using Flutter and used the BLoC pattern for state management. On the backend, I used Firebase (Firestore, Cloud Functions) and the Google Gemini API for macro calculations—but instead of having the AI by the AI, I calculated them in my own code and had the AI generate only creative meal ideas (this eliminated the risk of hallucinations). I set up RevenueCati for monetization
Challenges we ran into
One of the biggest technical challenges I faced was AI output diversity. Early on, when I asked Gemini to generate a meal that matched a specific macro target (e.g., 40g protein, 30g carbs), it kept returning the same 2-3 meal ideas over and over — even when the user tapped "give me something different." This completely broke the core promise of the app: never getting stuck eating the same thing repeatedly.
The root cause was that I was sending the AI a fairly generic, static prompt each time, so given the same macro inputs, the model naturally converged on the same "safe" answers it had seen most often during training — things like grilled chicken with rice, every single time.
To fix this, I had to make each generation request meaningfully different from the previous one, even when the underlying macro targets stayed the same. Instead of leaving the meal composition entirely up to the AI, I moved that randomness into my own code: I built lists of categories — protein sources, cuisine styles, and cooking methods (frying, baking, boiling, etc.) — and randomly selected a combination from these lists on the code side before every generation request. I then passed this randomized combination to the AI along with the user's profile data and macro targets, and had it generate a meal that fit all of these constraints together.
This turned out to be one of the most important fixes in the whole project — without it, the AI-generated variety that's central to the app's value proposition simply wouldn't have worked in practice.
Accomplishments that we're proud of
I’m proud that the app never runs out of meal ideas; unlike most meal planners that draw from a static recipe database, my app generates truly new suggestions every time while maintaining the exact same macro goals.
What we learned
Whenever I set out to build an app, I used to spend months on it and thought it took a long time, but through the excitement and enthusiasm of the competition, I learned just how quickly you can decide on a project, get started, and release a product.
What's next for Chefy: AI Meal Planner
My next plan is to make the app even more customizable by allowing users to choose supplements based on their preferences; they’ll be able to add supplements that align with their diet or workout routine to their meal plan.
Built With
- ai
- api
- cloudfunctions
- cursor
- dart
- firebase
- flutter
- gemini
- revenucat
- typescript

Log in or sign up for Devpost to join the conversation.