Tired of visiting the same restaurants and cafes? Struggling to decide what and where to eat next?
SAVOUR is here to fix that with a mobile application that utilises a powerful recommendation engine to take the guesswork out of choosing where to eat. Whether you're hunting for a hidden gem, the latest foodie hotspot, or an Insta-worthy café, SAVOUR effortlessly discovers and recommends your next favorite spot based on your budget, dietary needs, and location.
-
Personalized Restaurant Recommendation
Get recommended restaurants based on your proximity and preferences with matching and analysis algorithms -
Unravel Top Rated & Trendy Spots
Quickly unearth the highest-rated restaurants and the trendiest new openings in town. -
Comprehensive Filters
Narrow down options by vegan, vegetarian, gluten-free, or any custom dietary restriction, and stay within your budget.
- React Native with Expo - Mobile development
- Expo Router - File-based routing for React Native
- NativeWind - Tailwind CSS for React Native
- React Native Maps - Map integration with OpenStreetMap
- LangGraph - Agent orchestration framework
- Google Gemini - Advanced language model
- FastAPI - High-performance web framework
- Redis - Caching and session management
- Supabase Edge Functions + OpenAI API - For vector embeddings under recsys
- Supabase - Backend-as-a-Service (PostgreSQL + Auth + Real-time)
- PostgreSQL - Primary database with Row Level Security (RLS)
- Supabase Auth - Authentication and user management
Follow these steps to set up SAVOUR on your local machine:
-
Clone the Repository
git clone https://github.com/lhurr/SAVOUR.git cd SAVOUR -
Fetch API Keys Get the following API keys:
- Supabase credentials
- GEMINI_API_KEY (Gemini API key)
-
Set Up Environment Variables
- Copy the
.env.examplefile to create a new.envfile
cp .env.example .env
- Open the
.envfile and fill in the Supabase API keys
- Copy the
-
To Run (ensure Docker is installed)
docker-compose up
-
Requirements
- Node
- Python 3.11
-
Start the Development Server This will open the Expo development server where you can:
- Press
ito open iOS simulator - Press
ato open Android emulator - Scan the QR code with your phone (requires Expo Go app)
- Press
wto open in web browser
- Press
The backend uses pytest with comprehensive mocking for external dependencies.
# Navigate to backend directory
cd backend
# Install test dependencies
pip install -e ".[dev]"
# Set environment variable
export GEMINI_API_KEY="your-api-key-here"
# Run all tests
python3 -m pytest tests/ -v
Backend Test Coverage:
- FastAPI endpoints
- Utility functions
- State management
- Integration tests
The frontend uses Jest with React Native Testing Library for component and hook testing.
# Navigate to mobile app directory
cd mobile-app
# Install test dependencies
npm install
# Run all tests
npm testFrontend Test Coverage:
- React Native components
- Custom hooks (location, API calls)
- Database operations
- API service functions
- Screen navigation
Backend Configuration:
pytest.ini- Test discovery and markersconftest.py- Shared fixtures and mocks.env.test- Test environment variables
Frontend Configuration:
jest.config.js- Jest configurationjest.setup.js- Global test setup and mocks
SAVOUR - Making restaurant discovery effortless through intelligent recommendations.



