| Name | GitHub ID |
|---|---|
| Ar-Raniry Ar-Rasyid | NiryXD |
| Tristan Lopez | tlopez7 |
| Jonathan Lange | jdlange3 |
| Noah Cash | ncash3 |
| Sidarth Santhosh Kumar | ssanthos |
VolBites is a comprehensive mobile recipe application built with React Native and Expo. It helps users discover, save, and create recipes while providing personalized food recommendations based on their mood, preferences, and dietary restrictions.
- 🔍 Recipe Search: Search thousands of recipes using the Spoonacular API with advanced filtering options (calories, protein, fat, carbs, cooking time)
- ❤️ Favorites: Save your favorite recipes for quick access
- 📝 Personal Recipes: Create and manage your own custom recipes
- 🤖 AI Chatbot: Get recipe recommendations and cooking advice from VolBot, your friendly nutritionist assistant
- 🗺️ Restaurant Finder: Discover nearby restaurants using location-based search
- 😊 Mood-Based Recommendations: Get food suggestions based on how you're feeling
- 📋 Recipe Notes: Add personal notes to community recipes to customize them your way
- ⭐ Recipe Ratings: Rate and view community ratings for recipes
- 🌙 Dark Mode: Comfortable viewing in light or dark theme
- 🔐 Secure Authentication: Puzzle captcha and secure login with Supabase
git clone https://github.com/utk-cs340-fall25/VolBites.git
cd VolBites/VolBitesnpm installor
yarn installCreate a .env file in the VolBites directory with the following API keys:
SPOONACULAR_API_KEY=your_spoonacular_api_key_here
OPENAI_API_KEY=your_openai_api_key_here
GEOAPIFY_API_KEY=your_geoapify_api_key_here
SUPABASE_URL=your_supabase_url_here
SUPABASE_ANON_KEY=your_supabase_anon_key_here- Spoonacular API: Sign up at spoonacular.com to get a free API key
- OpenAI API: Get your API key from platform.openai.com
- Geoapify API: Register at geoapify.com for geocoding services
- Supabase: Create a project at supabase.com and get your URL and anon key
Create the following tables in your Supabase database:
-
users table (handled by Supabase Auth)
-
saved_recipes table:
CREATE TABLE saved_recipes ( id SERIAL PRIMARY KEY, user_id UUID REFERENCES auth.users(id), recipe_id INTEGER, recipe_name TEXT, image TEXT, created_at TIMESTAMP DEFAULT NOW() );
-
recipe_ratings table:
CREATE TABLE recipe_ratings ( id SERIAL PRIMARY KEY, user_id UUID REFERENCES auth.users(id), recipe_id INTEGER, rating INTEGER CHECK (rating >= 1 AND rating <= 5), created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW(), UNIQUE(user_id, recipe_id) );
- Start the Expo development server:
npm startor
expo start- Choose how to run the app:
- Scan QR code: Open Expo Go on your phone and scan the QR code displayed in the terminal
- Press
i: Open iOS simulator (requires Xcode on Mac) - Press
a: Open Android emulator (requires Android Studio) - Press
w: Open in web browser
# iOS
npm run ios
# or
expo start --ios
# Android
npm run android
# or
expo start --android
# Web
npm run web
# or
expo start --webnpm run start:tunnel
# or
expo start --tunnel- Sign Up: Create a new account with your email and password
- Login: Use your credentials to log in (with puzzle captcha for security)
- Explore: Start searching for recipes or use the mood-based recommendation feature
- Use the search bar on the home screen to find recipes
- Click the filter icon to set nutrition filters (calories, protein, fat, carbs)
- Tap on any recipe to view detailed instructions, ingredients, and nutrition information
- Tap the heart icon on any recipe to save it to your favorites
- Access all your saved recipes from the "Favorites" button on the home screen
- Tap "My Recipes" on the home screen
- Click "Upload Recipe" to create a new recipe
- Fill in the recipe details, ingredients, instructions, and nutrition information
- Add a photo from your gallery
- Tap the floating chat button on the home screen
- Ask VolBot for recipe recommendations, cooking tips, or restaurant suggestions
- VolBot uses your dietary preferences to provide personalized suggestions
- Tap the floating map button on the home screen
- View nearby restaurants (default: Knoxville, TN)
- Change location by tapping the location icon and entering a city name
- Tap "I'm Feeling..." button on the home screen
- Enter your current mood (e.g., "ecstatic", "sad", "stressed", "energetic")
- Get personalized food recommendations based on your mood
- Quick-select from common moods or type your own
- View any community recipe
- Add personal notes to remember modifications or tips
- Edit or delete your notes anytime
- View any recipe and use the star rating system
- See average ratings from the community
- Your ratings help others discover great recipes
- Access settings from the gear icon on the home screen
- Toggle dark mode for comfortable viewing
- Set dietary preferences (vegetarian, vegan, keto, etc.)
- Add dietary restrictions and allergens
- Upload a profile picture
- Log out when finished
VolBites/
├── assets/ # Images, icons, and other static assets
├── App.js # Main app component with navigation
├── HomeScreen.js # Main home screen with search and navigation
├── LoginScreen.js # User authentication screen
├── SignUpScreen.js # User registration screen
├── RecipeDetailScreen.js # Detailed recipe view with notes and ratings
├── ChatBotScreen.js # AI chatbot interface
├── FavoritesScreen.js # Saved recipes screen
├── YourRecipesScreen.js # User-created recipes screen
├── UploadRecipeScreen.js # Recipe creation screen
├── RestaurantsScreen.js # Restaurant finder screen
├── SettingsScreen.js # User settings and preferences
├── spoonacular.js # Spoonacular API integration
├── geoapify.js # Geoapify API integration
├── supabaseClient.js # Supabase client configuration
├── supabaseConfig.js # Supabase configuration
├── recipeNotesStorage.js # Recipe notes storage utilities
├── favoritesStorage.js # Favorites storage utilities
├── userRecipesStorage.js # User recipes storage utilities
├── viewHistoryHelper.js # Recipe view history tracking
├── PuzzleCaptcha.js # Puzzle captcha component
├── StarRating.js # Star rating component
├── RememberMe.js # Remember me functionality
├── package.json # Project dependencies
├── app.json # Expo configuration
└── babel.config.js # Babel configuration
- React Native (0.81.5) - Mobile app framework
- Expo (~54.0.22) - Development platform and tooling
- React Navigation - Navigation library
- React Native AsyncStorage - Local data persistence
- Supabase - Authentication and database
- Spoonacular API - Recipe data and search
- OpenAI API - AI-powered chatbot and mood-to-food conversion
- Geoapify API - Geocoding and restaurant search
- Expo Vector Icons - Icon library
- Expo Image Picker - Image selection from gallery
- React Native Safe Area Context - Safe area handling
This project is licensed under the terms specified in LICENSE.txt. Please refer to the LICENSE.txt file for detailed license information.
This is a course project for COSC340 at the University of Tennessee, Knoxville. For questions or issues, please contact the team members listed above.
For issues, questions, or contributions, please reach out to any of the team members via their GitHub profiles listed above.