An AI-powered recipe assistant that turns the ingredients you have on hand into recipes you can actually make β powered by Google Gemini vision and Firebase.
Demo Flow β’ Features β’ Architecture β’ Quick Start β’ Documentation
You stare into your fridge. You have stuff. You don't know what to make. You scroll Pinterest for 20 minutes, give up, and order takeout.
Ingridio fixes that loop. Open the camera, point at your ingredients, and within seconds you have:
- A precise list of what was detected
- A ranked feed of recipes you can actually cook β sorted by how much of the dish you already own
- A guided cooking mode that walks you through each step with auto-detected timers
No more "I have 90% of the ingredients" frustration. Ingridio tells you upfront.
|
Snap your fridge or pantry β Google Gemini 2.0 Flash identifies every visible ingredient and suggests recipes that fit. Substring-tolerant matcher ranks recipes by how much of the dish you already own. No surprise "missing ingredients" mid-recipe. Step-by-step instructions with auto-detected inline timers ("Simmer for 20 mins" β tap to start a 20-min timer right there). Pakistani biryani, kebabs, nihari alongside Italian pasta, Mediterranean bowls, and healthy meal-prep classics. |
Email/password signup with JWT-based ID tokens (RSA-signed, verifiable on jwt.io). Persistent sessions across app launches. Saved recipes, pantry items, and preferences sync to Cloud Firestore. Log out on one device, log back in elsewhere β everything's still there. English (US), Urdu, and Arabic support baked into the preferences. Glass-morphism HUDs, bento-grid layouts, warm orange palette, Plus Jakarta Sans + Be Vietnam Pro typography β built for the eye. |
| 1. Onboarding | 2. Sign Up | 3. Scan | 4. Match | 5. Cook |
|---|---|---|---|---|
| Beautiful 4-page intro | Firebase email/password | Camera + Gemini vision | Ranked by match % | Guided steps + timers |
![]() |
π Email + JWT | ![]() |
![]() |
![]() |
ββββββββββββββββββββββββββββββ
β Flutter App β
β (Android Β· Web target) β
ββββββ¬ββββββββββββββββββ¬βββββββ
β β
ββββββββββ ββββββββββ
βΌ βΌ
βββββββββββββββββββββββ βββββββββββββββββββββββ
β GeminiService β β Firebase Services β
β google_generative β β βββββββββββββββββββ β
β _ai β β Auth (JWT tokens) β
β β β Firestore (NoSQL) β
β Vision β JSON β β β
β Ingredients + β β users/{uid}/ β
β Recipe suggestions β β β pantry/ β
βββββββββββ¬ββββββββββββ β β savedRecipes/ β
β βββββββββββββββββββββββ
βΌ β²
βββββββββββββββββ β
β RecipeMatcher β β
β (% match) β β
βββββββββ¬ββββββββ β
β β
βΌ β
βββββββββββββββββββββββββββββββββββββββ β
β In-app State Stores (singletons) β β
β βββββββββββββββββββββββββββββββββ β βββββββββ
β PantryManager Β· SavedRecipesStore β
β CookedRecipesStore Β· RatingStore β
β UserPreferencesStore β
βββββββββββββββββββββββββββββββββββββββ
Zero backend code shipped by us. Firebase handles persistence + auth. Gemini handles vision. The Flutter app is the only thing we maintain.
|
|
|
- Flutter SDK 3.x+
- Android Studio (with Android SDK + emulator)
- A Firebase project (free tier works)
- A Google AI Studio Gemini API key β free tier OK
# 1. Clone
git clone https://github.com/saadhtiwana/Ingridio.git
cd Ingridio
# 2. Install Flutter dependencies
flutter pub get
# 3. Add your Gemini API key (gitignored automatically)
echo "GEMINI_API_KEY=your_actual_key_here" > assets/.env
# 4. Drop your Firebase config (downloaded from Firebase Console)
# β android/app/google-services.json
# 5. Boot an Android emulator (or plug in a phone with USB debugging)
flutter emulators --launch <emulator_id>
# 6. Run!
flutter runThat's it. The app will sign you up, sync to Firestore, and you're cooking. See DOCUMENTATION.md Β§15-17 for the full setup walk-through.
Click to expand step-by-step
- Create Firebase project at console.firebase.google.com β name it whatever you want.
- Add Android app with package name
com.ingridio.ingridio. - Download
google-services.jsonβ drop intoandroid/app/. - Enable Email/Password auth: Build β Authentication β Sign-in method β Email/Password β Enable.
- Create Firestore database: Build β Firestore Database β Create β Start in test mode β pick closest region.
- Run
flutter runβ sign up, your data appears in Firestore Console in real time.
For production, tighten the Firestore rules:
match /users/{userId}/{document=**} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}| Step | What you do | What it proves |
|---|---|---|
| 1 | Sign up with email + password | Firebase Auth working β check Authentication β Users in console |
| 2 | Pick cuisines on Personalize β Save | Preferences write to Firestore β check users/{uid} doc |
| 3 | Save any recipe (heart icon) | Real-time Firestore write β check savedRecipes sub-collection |
| 4 | Profile β "View Auth Token (JWT)" β Copy β paste at jwt.io | JWT auth with decoded iss, email, exp etc. |
| 5 | Logout β log back in | Persistence across sessions |
| 6 | Tap scan FAB β take a photo of food | Gemini AI detection in action |
lib/
βββ data/ Mock pantry + curated recipe catalogue
βββ logic/ Stores, matcher, design system, timer parser
βββ models/ Recipe, Ingredient, UserPreferences, ...
βββ screens/ 13 screens β onboarding, auth, home, scan, cook, profile, ...
βββ services/ AuthService (Firebase) Β· GeminiService Β· FoodDetectionService
See DOCUMENTATION.md Β§4 for the complete tree.
flutter test00:00 +7: All tests passed!
Unit tests cover the recipe matching algorithm and the step-timer regex parser.
For deep technical detail β every store, every screen, every Firestore document shape, build pipelines, security considerations β see:
π DOCUMENTATION.md
(22 sections, table-of-contents driven, fully indexed.)
This project is licensed under the MIT License β see LICENSE for details.
Built with π§‘ in Flutter + Firebase
If you found this useful, drop a β on the repo.



