A recipe discovery and cooking companion app built with Flutter and Firebase. Browse thousands of recipes, save your favorites, plan your shopping, and keep a personal cook journal.
- Browse recipes by category with thumbnails and descriptions
- Full recipe detail with ingredients, measurements, and step-by-step instructions
- Search recipes by name, category, or ingredients
- Random recipe picker ("Surprise me")
- Recently viewed history
- Check off ingredients you have on hand
- Find recipes you can cook with what's in your pantry
- Exact matches (you have everything) and loose matches (partial ingredient overlap)
- Save recipes to your favorites with a single tap
- Synced across devices via Firebase
- Add individual ingredients or all ingredients from a recipe
- Check off items as you shop
- Clear checked or clear all
- Cloud-synced per account
- Write reviews with text, star ratings (1-5), and up to 3 photos
- Reviews go through admin moderation before appearing publicly
- Report inappropriate reviews
- Per-recipe average rating and review count
- Paginated review loading
- Write personal notes on any recipe (what you changed, what worked, what to try next)
- One editable note per recipe, fully private to your account
- View and manage all your notes from the profile screen
- Long notes collapse with "Show more" on the recipe page
- Google Sign-In authentication
- Customizable display name, avatar (via Cloudinary), and bio
- Public profile page showing approved reviews
- Profile tab view switching between reviews and notes
- Verified badge for admin users
- Live profile updates reflected across all review cards in real time
- Switch between multiple Google accounts without signing out
- Per-account data isolation (favorites, shopping list, pantry, notes)
- Same-account detection with feedback
- Dedicated review queue for pending and reported reviews
- Approve, reject, or delete reviews
- Dismiss reports
- Notification system for review status updates
- In-app notifications when your review is approved or rejected
- Unseen badge count
- Mark as seen
- Framework: Flutter (Dart)
- Auth: Firebase Authentication + Google Sign-In
- Database: Cloud Firestore with schema-validated security rules
- Image hosting: Cloudinary
- State management: Riverpod
- Routing: go_router
- Analytics: Firebase Analytics
- Crash reporting: Firebase Crashlytics
- App security: Firebase App Check
Android, iOS, Web, Windows, macOS, Linux
- User data (favorites, shopping list, pantry, notes, recently viewed) stored in private Firestore subcollections under
users/{uid}/ - Reviews stored in a global
reviewscollection with server-side moderation workflow - All subcollections have schema-validated Firestore security rules enforcing field types, size limits, and ownership
- Local SharedPreferences caching with UID-namespaced keys for offline support
- Clone the repo
- Run
flutter pub get - Set up Firebase (
flutterfire configure) and Cloudinary credentials - Run
flutter run
TheMealDB for recipe data.