Skip to content

Final Year Project • Degree Year 3 Sem 1 & 2 • Nov 2024 - Aug 2025

Notifications You must be signed in to change notification settings

juwei-w/Degree-Y3-FYP-Restaurant-Recommendation-App

Repository files navigation

Restaurant Recommendation App

Video demo: https://youtu.be/jZIOe2IKxpY


Project Overview

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.


Motivation

  • 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.

Problem Statement

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.


Project Objectives

  1. Personalized Restaurant Recommendations:
    • Suggests restaurants tailored to user preferences, dietary needs, and location.
  2. Location-Based Suggestions:
    • Uses Google Maps API to recommend nearby restaurants and provide directions.
  3. Reservation Functionality:
    • Integrates WhatsApp for easy, pre-filled reservation messaging.
  4. AI-Driven Feedback Loop:
    • Continuously improves recommendations based on user feedback (like, unlike, skip, view).

Project Scope

  • 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.


Key Modules and Features

  • 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.

Tech Stack

  • Frontend: Flutter (Dart)
  • Backend: Django (Python)
  • Database / Authentication: Firebase
  • Maps & geolocation: Google Maps API
  • ML / Recommender: Python modules inside recommender/

Architecture

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.py and recommender/views.py).

Figma Design

User Interface Overview

Welcome Screen Login Screen Register Screen Select Preferences Food Restrictions Home Screen

Core Features

AI Recommendations Nearby Restaurants Restaurant Details Favorites List User Profile User Feedback

Admin Dashboard

Admin Menu Analytics Dashboard User Management Feedback Management

Setup Instructions

1. Python Environment (Backend)

  • 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
  • Install backend dependencies:
    pip install -r requirements.txt

2. Firebase Setup

  • 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).

3. Environment Variables

  • Create or edit the .env file 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_HOSTS as needed for your deployment.

4. Django Setup

  • 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:
    ngrok http 8000
    Use the HTTPS forwarding URL from ngrok as your API_BASE_URL and add it to DJANGO_ALLOWED_HOSTS in your .env file.

5. Flutter Setup (Frontend)

  • 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.

About

Final Year Project • Degree Year 3 Sem 1 & 2 • Nov 2024 - Aug 2025

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published