A comprehensive Android application for meal planning, recipe management, and smart grocery shopping
Features โข Screenshots โข Architecture โข Installation โข Technologies
MealMate is a feature-rich Android application designed to simplify meal planning and recipe management. Built with modern Android development practices, it integrates Firebase for real-time data synchronization, Google Maps for location services, and follows Material Design 3 guidelines for an intuitive user experience.
The application addresses common challenges in meal preparation by providing tools for recipe discovery, weekly meal planning, automated shopping list generation, and grocery store location services - all in one seamless platform.
- Firebase Authentication with email/password and Google Sign-In
- Personalized User Profiles with customizable preferences
- Secure Session Management with automatic token refresh
- Profile Picture Support with cloud storage integration
- Browse & Search Recipes with advanced filtering options
- Detailed Recipe View with ingredients, instructions, and nutritional info
- Add Custom Recipes with image upload and categorization
- Edit & Delete Recipes with real-time synchronization
- Recipe Categories (Breakfast, Lunch, Dinner, Desserts, Snacks)
- Featured & Popular Recipes with dynamic recommendations
- Shake to Discover - Shake your device to get random recipe suggestions
- Weekly Meal Planner with calendar view
- Drag & Drop Interface for easy meal scheduling
- Meal Prep Reminders with customizable notifications
- Breakfast, Lunch & Dinner Slots for each day
- Quick Meal Assignment from saved recipes
- Meal History Tracking for repeat planning
- Auto-Generated Lists from planned meals
- Manual Item Addition with quantity and unit selection
- Swipe to Delete gesture for quick item removal
- Check-off Items as you shop
- Categorized Items (Produce, Dairy, Meat, etc.)
- Share Lists via SMS or messaging apps
- Persistent Storage with cloud backup
- Interactive Google Maps integration
- Find Nearby Stores using GPS location
- Store Details with address, phone, and hours
- Custom Store Markers with distance calculation
- Add/Edit Stores with location picker
- Store Favorites for quick access
- Navigation Integration with Google Maps app
- Meal Prep Alerts at scheduled times
- Shopping Reminders before grocery trips
- Recipe Suggestions based on meal plans
- Boot-Completed Receiver for persistent reminders
- Customizable Notification Sounds and vibration patterns
- Material Design 3 components and theming
- Smooth Animations with Lottie
- Responsive Layouts for all screen sizes
- Dark Mode Support (system-based)
- Intuitive Navigation with bottom navigation bar
- Swipe Gestures for common actions
- Loading States with skeleton screens
- Error Handling with user-friendly messages
- Splash Screen & Login
- Recipe Browser & Details
- Meal Planner Calendar
- Shopping List
- Store Locator Map
- User Profile
MealMate follows the Model-View-Controller (MVC) architecture pattern with a repository layer for data abstraction.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Presentation Layer โ
โ (Activities, Adapters, Dialogs, Custom Views) โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Business Logic Layer โ
โ (Helpers, Managers, Utilities) โ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Data Layer โ
โ (Repositories, Models, Firebase, Local Storage) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
app/src/main/java/com/raka/mealmate/
โ
โโโ ๐ฑ Activities/ # UI Screens
โ โโโ SplashScreen.java # App entry point
โ โโโ LoginActivity.java # User authentication
โ โโโ RegisterActivity.java # New user registration
โ โโโ MainActivity.java # Dashboard & navigation
โ โโโ RecipeBrowserActivity.java
โ โโโ RecipeDetailActivity.java
โ โโโ MealPlannerActivity.java
โ โโโ ShoppingListActivity.java
โ โโโ StoresMapActivity.java
โ โโโ AddRecipeActivity.java
โ โโโ AddEditStoreActivity.java
โ โโโ ProfileActivity.java
โ
โโโ ๐ adapters/ # RecyclerView Adapters
โ โโโ RecipeAdapter.java
โ โโโ MealAdapter.java
โ โโโ ShoppingListAdapter.java
โ โโโ StoreCardAdapter.java
โ โโโ IngredientAdapter.java
โ โโโ InstructionAdapter.java
โ โโโ CategoryAdapter.java
โ โโโ FeaturedRecipeAdapter.java
โ
โโโ ๐ฆ models/ # Data Models
โ โโโ Recipe.java
โ โโโ MealPlan.java
โ โโโ ShoppingItem.java
โ โโโ Store.java
โ โโโ UserProfile.java
โ โโโ Ingredient.java
โ โโโ Category.java
โ
โโโ ๐๏ธ repositories/ # Data Access Layer
โ โโโ MealPlanRepository.java
โ
โโโ ๐ ๏ธ helpers/ # Utility Classes
โ โโโ NotificationHelper.java
โ โโโ ShakeDetector.java
โ โโโ StoreManager.java
โ โโโ SwipeToGestureCallback.java
โ
โโโ ๐ฌ dialogs/ # Custom Dialogs
โ โโโ MealPlanDialog.java
โ
โโโ ๐ก receivers/ # Broadcast Receivers
โโโ MealPrepReceiver.java
- User Interaction โ Activity receives input
- Activity โ Calls repository or helper methods
- Repository โ Communicates with Firebase
- Firebase โ Returns data via callbacks
- Activity โ Updates UI through adapters
- Adapter โ Renders data in RecyclerView
- Authentication: Email/password and Google OAuth
- Realtime Database: Cloud data storage with offline persistence
- Database Structure:
mealmate/
โโโ users/
โ โโโ {userId}/
โ โโโ profile/
โ โ โโโ name
โ โ โโโ email
โ โ โโโ photoUrl
โ โโโ recipes/
โ โ โโโ {recipeId}/
โ โโโ mealPlans/
โ โ โโโ {planId}/
โ โโโ shoppingList/
โ โโโ {itemId}/
โโโ stores/
โโโ {storeId}/
- Android Studio Hedgehog (2023.1.1) or newer
- JDK 8 or higher
- Android SDK with API level 35
- Google Maps API Key (Get it here)
- Firebase Project (Create one here)
git clone https://github.com/RameshKadariya/Meal-Mate-Android-App.git
cd Meal-Mate-Android-AppCreate or edit local.properties in the root directory:
sdk.dir=/path/to/your/Android/Sdk
MAPS_API_KEY=your_google_maps_api_key_hereTo get your API key:
- Go to Google Cloud Console
- Create a new project or select existing
- Enable Maps SDK for Android
- Create credentials โ API Key
- Restrict the key to Android apps (recommended)
- Add your app's SHA-1 fingerprint
Step 1: Create Firebase Project
- Visit Firebase Console
- Click "Add project" and follow the wizard
- Add an Android app with package name:
com.raka.mealmate
Step 2: Download Configuration
- Download
google-services.json - Place it in the
app/directory
Step 3: Enable Services
-
Authentication:
- Go to Authentication โ Sign-in method
- Enable Email/Password
- Enable Google Sign-In
- Add your SHA-1 fingerprint for Google Sign-In
-
Realtime Database:
- Go to Realtime Database โ Create Database
- Start in test mode (configure rules later)
- Note your database URL
Step 4: Configure Security Rules (Important for production)
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"stores": {
".read": "auth != null",
".write": "auth != null"
}
}
}Debug SHA-1:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass androidRelease SHA-1:
keytool -list -v -keystore /path/to/your/keystore.jks -alias your_aliasAdd the SHA-1 to Firebase Console โ Project Settings โ Your App
Using Android Studio:
- Open the project in Android Studio
- Wait for Gradle sync to complete
- Click Run
โถ๏ธ or pressShift + F10
Using Command Line:
# Debug build
./gradlew assembleDebug
# Release build (requires signing configuration)
./gradlew assembleRelease
# Install on connected device
./gradlew installDebug- Connect an Android device or start an emulator
- Run the app from Android Studio
- Create an account or sign in with Google
- Grant necessary permissions (Location, Notifications)
| Technology | Version | Purpose |
|---|---|---|
| Java | 8 | Primary programming language |
| Android SDK | API 24-35 | Android framework |
| Gradle | 8.6.1 | Build automation |
| Material Design 3 | 1.12.0 | UI components |
| Service | Purpose |
|---|---|
| Firebase Authentication | User authentication & authorization |
| Firebase Realtime Database | Cloud data storage & sync |
| Firebase BOM | Dependency version management |
| Service | Purpose |
|---|---|
| Google Maps SDK | Interactive maps & location |
| Play Services Location | GPS & location services |
| Play Services Auth | Google Sign-In |
| Maps Utils | Map clustering & utilities |
| Library | Version | Purpose |
|---|---|---|
| Lottie | 6.3.0 | JSON-based animations |
| Glide | 4.16.0 | Image loading & caching |
| CircleImageView | 3.1.0 | Circular profile images |
| Blurry | 4.0.1 | Image blur effects |
| CardView | 1.0.0 | Card-based layouts |
| Library | Version | Purpose |
|---|---|---|
| Retrofit | 2.9.0 | HTTP client |
| Gson Converter | 2.9.0 | JSON serialization |
| Library | Purpose |
|---|---|
| JUnit | Unit testing |
| Espresso | UI testing |
| AndroidX Test | Testing framework |
minSdk: 24 (Android 7.0 Nougat)
targetSdk: 35 (Android 15)
compileSdk: 35
Java Version: 1.8
ViewBinding: Enabled
MultiDex: Enabled- API keys stored in
local.properties(gitignored) - Keys injected at build time via Gradle
- No hardcoded credentials in source code
- Authentication required for all database operations
- User-specific data isolated by UID
- Security rules enforce read/write permissions
- SSL/TLS encryption for all network traffic
The app requests the following permissions:
INTERNET- Network communicationACCESS_FINE_LOCATION- GPS for store locatorACCESS_COARSE_LOCATION- Approximate locationREAD_CONTACTS- Share recipes with contactsSEND_SMS- Share shopping lists via SMSSCHEDULE_EXACT_ALARM- Meal prep remindersRECEIVE_BOOT_COMPLETED- Restore reminders after reboot
Release builds use ProGuard for:
- Code obfuscation
- Unused code removal
- Optimization
./gradlew test./gradlew connectedAndroidTest./gradlew jacocoTestReportkeytool -genkey -v -keystore mealmate-release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias mealmateandroid {
signingConfigs {
create("release") {
storeFile = file("path/to/mealmate-release.jks")
storePassword = "your_store_password"
keyAlias = "mealmate"
keyPassword = "your_key_password"
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
}
}
}./gradlew assembleReleaseOutput: app/build/outputs/apk/release/app-release.apk
- Recipe images require internet connection
- Google Maps requires valid API key
- Notifications may not work on some custom ROMs
- Shake detection sensitivity varies by device
- Migration to Kotlin
- MVVM architecture with ViewModel
- Room database for offline support
- Jetpack Compose UI
- Barcode scanner for ingredients
- Nutrition tracking & calorie counter
- Recipe sharing with other users
- Voice-guided cooking mode
- Multi-language support
- Tablet optimization
- Wear OS companion app
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License - Copyright (c) 2026 Ramesh Kadariya
Ramesh Kadariya
- ๐ Website: https://www.rameshkadariya.com.np
- ๐ง Email: rameshkadariya4444@gmail.com
- ๐ผ GitHub: @RameshKadariya
- Recipe Data: TheMealDB API
- Icons & Illustrations: Material Design Icons
- Animations: LottieFiles community
- Inspiration: Modern meal planning applications
For questions, suggestions, or collaboration opportunities:
- Email: rameshkadariya4444@gmail.com
- Website: https://www.rameshkadariya.com.np
- GitHub Issues: Report a bug or request a feature
If you find this project helpful or interesting, please consider:
- โญ Starring the repository
- ๐ด Forking for your own projects
- ๐ข Sharing with others
- ๐ Reporting bugs or suggesting features
Built with โค๏ธ by Ramesh Kadariya
This is a portfolio project demonstrating Android development skills including Firebase integration, Google Maps SDK, Material Design, and modern Android architecture patterns.