An AI-powered food and restaurant recommendation app built with Flutter. "Momukji" (모먹지) is Korean for "What should I eat?"
- AI-powered restaurant recommendations using Google Gemini
- Location-based search with Google Maps & Places API
- Bilingual support (English & Korean)
- Quick Pick mode with mood and cuisine selection
- Advanced filtering options (cuisine type, food type, dietary restrictions, price range, etc.)
- Interactive chat interface for personalized recommendations
- Flutter/Dart - Cross-platform mobile framework
- Provider - State management
- Google Maps Flutter - Interactive map integration
- Custom Animations - AnimationController, CustomPainter for spin wheel
- Google Gemini AI - Natural language processing for personalized recommendations
- Google Places API - Restaurant data, ratings, and details
- Google Maps SDK - Geocoding and location services
| Package | Purpose |
|---|---|
google_generative_ai |
Gemini AI integration |
google_maps_flutter |
Map widget |
geolocator |
Device GPS location |
geocoding |
Address ↔ coordinates |
sensors_plus |
Accelerometer for shake detection |
flutter_dotenv |
Environment variable management |
shared_preferences |
Local storage for settings |
Coming soon
- Flutter SDK (3.10.4 or higher)
- Android Studio / Xcode
- Google Cloud Platform account (for API keys)
git clone https://github.com/yourusername/momukji.git
cd momukjiYou'll need two API keys from Google:
- Go to Google AI Studio
- Create a new API key
- Copy the key
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable the following APIs:
- Maps SDK for Android
- Maps SDK for iOS
- Places API
- Geocoding API
- Create an API key and copy it
# Copy the example environment file
cp .env.example .env
# Edit .env and add your actual API keys
nano .env # or use any text editorYour .env file should look like:
GEMINI_API_KEY=your_actual_gemini_key
GOOGLE_MAPS_API_KEY=your_actual_maps_key
Edit android/app/src/main/AndroidManifest.xml and replace the API key:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_GOOGLE_MAPS_API_KEY"/>Edit ios/Runner/AppDelegate.swift and replace the API key:
GMSServices.provideAPIKey("YOUR_GOOGLE_MAPS_API_KEY")flutter pub get# For Android
flutter run
# For iOS
cd ios && pod install && cd ..
flutter runlib/
├── main.dart # App entry point
├── models/ # Data models
│ ├── filter_options.dart
│ ├── restaurant.dart
│ └── chat_message.dart
├── providers/ # State management
│ └── app_provider.dart
├── screens/ # App screens
│ ├── home_screen.dart
│ └── map_screen.dart
├── services/ # API services
│ ├── gemini_service.dart
│ ├── places_service.dart
│ └── location_service.dart
├── widgets/ # Reusable widgets
│ ├── filter_sheet.dart
│ ├── chat_widget.dart
│ ├── restaurant_card.dart
│ └── location_bar.dart
└── l10n/ # Localization
- NEVER commit
.envor any file containing API keys - The
.gitignoreis configured to exclude sensitive files - Always use
.env.exampleas a template for others to set up their own keys - Consider restricting your API keys in Google Cloud Console (by app package name, bundle ID, or IP)
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Flutter
- AI powered by Google Gemini
- Maps by Google Maps Platform