Video demo: https://youtu.be/jZIOe2IKxpY
With the explosion of information on the internet, users often face decision fatigue and information overload—especially when it comes to choosing where and what to eat. This project addresses these challenges by providing an AI-powered, location-based restaurant recommendation system that delivers fast, personalized, and context-aware suggestions to users. The app leverages both explicit (user ratings, preferences) and implicit (behavioral patterns) data, and integrates privacy-preserving mechanisms to ensure user trust and data security.
- Helps users make quick, informed, and healthy dining decisions, even with dietary restrictions or in unfamiliar locations.
- Reduces stress and time spent on food choices, and encourages healthier eating habits.
- Addresses common issues in recommendation systems such as the cold-start problem, data sparsity, and privacy concerns.
Choosing what and where to eat is often overwhelming due to the abundance of options, personal preferences, dietary restrictions, and privacy concerns. Many people experience decision fatigue, unhealthy eating, or dissatisfaction with their choices. Existing systems often lack true personalization, context-awareness, or privacy guarantees.
- Personalized Restaurant Recommendations:
- Suggests restaurants tailored to user preferences, dietary needs, and location.
- Location-Based Suggestions:
- Uses Google Maps API to recommend nearby restaurants and provide directions.
- Reservation Functionality:
- Integrates WhatsApp for easy, pre-filled reservation messaging.
- AI-Driven Feedback Loop:
- Continuously improves recommendations based on user feedback (like, unlike, skip, view).
- UI/UX: Figma-based, intuitive, and visually appealing design.
- Backend: Django for business logic, APIs, and secure data processing.
- AI Recommendations: Machine learning for dynamic, real-time, and personalized suggestions.
- Authentication & Data: Firebase for secure login and data storage.
- Location Services: Google Maps for real-time, location-based recommendations and navigation.
- Reservations: WhatsApp integration for direct, convenient bookings.
The app is designed for both end-users seeking dining options and administrators managing restaurant data and analytics.
- User Authentication: Secure login/registration using Firebase, with role-based access for users and admins.
- Restaurant Search & Listing: Retrieve, search, and display restaurant data, including favorites and detailed views.
- Recommendation Engine: Hybrid (content-based + collaborative filtering) with reinforcement learning for adaptive, personalized suggestions.
- Location-Based Services: Google Maps API for real-time suggestions and navigation.
- Admin Analytics: Insights into user activity, preferences, and system performance for admins.
- Reservation Module: WhatsApp integration for direct, pre-filled restaurant bookings.
- Frontend: Flutter (Dart)
- Backend: Django (Python)
- Database / Authentication: Firebase
- Maps & geolocation: Google Maps API
- ML / Recommender: Python modules inside
recommender/
High level:
Mobile App (Flutter)
↕ HTTPS / REST
Django API (manage.py, REST endpoints)
↕ Database (SQLite in repo / PostgreSQL recommended)
Recommender components (recommender/)
External: Firebase auth & storage, Google Maps API, WhatsApp link
Key notes:
- The recommender logic lives in
recommender/and is consumed by Django views/endpoints. - The mobile app calls the API defined by Django (see
urls.pyandrecommender/views.py).
- Requires Python 3.11
- In the project root, create a virtual environment:
py -3.11 -m venv venv
- Activate the virtual environment:
- On Windows:
.\venv\Scripts\activate
- On macOS/Linux:
source venv/bin/activate
- On Windows:
- Install backend dependencies:
pip install -r requirements.txt
- Go to the Firebase Console and select your project.
- Click the ⚙️ gear icon next to "Project Overview" and select Project settings.
- Go to the Service accounts tab.
- Click the Generate new private key button under the Firebase Admin SDK section.
- Confirm and download the JSON file.
- Rename the downloaded file to
firebase_key.json. - Place it in the project root directory as
firebase_key.json(this file is ignored by git for security).
- Create or edit the
.envfile in the project root with the following keys:GOOGLE_MAPS_API_KEY=your_google_maps_api_key API_BASE_URL=http://localhost:8000 (e.g. http://localhost:8000 or https://xxxx.ngrok-free.app) DJANGO_ALLOWED_HOSTS=localhost,your_ip_address_optional (e.g. localhost,127.0.0.1,xxxx.ngrok-free.app) SEARCH_RADIUS=5000 (5km)
- Make sure your API_BASE_URL matches your Django server's public URL (e.g., ngrok URL).
- You can add or remove hosts in
DJANGO_ALLOWED_HOSTSas needed for your deployment.
- Run migrations from the project root:
python manage.py migrate
- Start the Django server:
python manage.py runserver 0.0.0.0:8000
- (Optional, for public/mobile access) Start ngrok to expose your backend:
Use the HTTPS forwarding URL from ngrok as your
ngrok http 8000
API_BASE_URLand add it toDJANGO_ALLOWED_HOSTSin your.envfile.
- Connect your phone via USB and enable developer mode to run and debug the app on your device.
- Install Flutter dependencies:
flutter pub get
- Run the app (it will prompt you to select a device if more than one is connected):
flutter run
For more details, see the code comments and documentation in each folder.















