A beautifully designed React Native mobile app for discovering and following delicious recipes
Features β’ Screenshots β’ Installation β’ Tech Stack β’ API
Recipe Spoon is a feature-rich mobile application built with React Native and Expo that transforms how you discover, save, and cook delicious recipes. Whether you're a beginner or a seasoned chef, Recipe Spoon provides an intuitive interface with step-by-step cooking instructions, embedded video tutorials, and powerful search capabilities.
The backend is fully deployed and live on Render, making it a seamless experience across devices.
- π Search Recipes: Instantly find recipes by food name, ingredients, or cuisine type
- π₯ Video Recipes: Watch cooking steps via integrated video player
- π Step-by-Step Instructions: Clear directions for each cooking phase
- β€οΈ Save Favorites: Bookmark and manage your favorite recipes
- π€ User Authentication: Secure sign-up and sign-in functionality
- π± Clean & Responsive UI: Built using React Native and Expo
- π Real-time Data: Backend API hosted on Render for seamless data delivery
- π Cross-Platform: Works on both iOS and Android devices
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher) - Download
- npm or yarn package manager
- Expo CLI - Install globally:
npm install -g expo-cli
- Expo Go app on your mobile device (iOS | Android)
-
Clone the Repository
git clone https://github.com/Bisha18/recipie_spoon.git cd recipie_spoon -
Install Dependencies
npm install # or yarn install -
Configure Environment Variables
Create a
.envfile in the root directory:API_BASE_URL=https://recepie-api.onrender.com/api ENVIRONMENT=production
-
Start the Development Server
npx expo start # or npm start -
Run on Your Device
- Scan the QR code with Expo Go (Android)
- Scan the QR code with your Camera app (iOS)
Or run on an emulator:
# iOS Simulator (macOS only) npm run ios # Android Emulator npm run android
| Technology | Purpose |
|---|---|
| React Native | Mobile app framework |
| Expo | Development platform and toolchain |
| TypeScript | Type-safe JavaScript |
| React Navigation | Navigation library |
| Axios | HTTP client for API calls |
- Node.js + Express.js - RESTful API
- PostgreSQL - Database
- Drizzle ORM - TypeScript ORM
- Hosted on Render
https://recepie-api.onrender.com/api
| Method | Endpoint | Description |
|---|---|---|
POST |
/auth/register |
Register new user |
POST |
/auth/login |
User login |
GET |
/recipes |
Get all recipes |
GET |
/recipes/:id |
Get recipe by ID |
GET |
/recipes/search?q= |
Search recipes |
POST |
/recipes |
Create recipe (auth required) |
PUT |
/recipes/:id |
Update recipe (auth required) |
DELETE |
/recipes/:id |
Delete recipe (auth required) |
POST |
/favorites/:id |
Add to favorites (auth required) |
GET |
/favorites |
Get user favorites (auth required) |
import axios from 'axios';
const API_BASE_URL = 'https://recepie-api.onrender.com/api';
// Search for recipes
const searchRecipes = async (query) => {
try {
const response = await axios.get(`${API_BASE_URL}/recipes/search`, {
params: { q: query }
});
return response.data;
} catch (error) {
console.error('Error searching recipes:', error);
throw error;
}
};
// Get recipe details
const getRecipeById = async (id) => {
try {
const response = await axios.get(`${API_BASE_URL}/recipes/${id}`);
return response.data;
} catch (error) {
console.error('Error fetching recipe:', error);
throw error;
}
};For complete API documentation, see the Backend Repository.
recipie_spoon/
βββ .vscode/ # VSCode configuration
βββ app/ # Main app screens (Expo Router)
β βββ (tabs)/ # Tab navigation screens
β βββ auth/ # Authentication screens
β βββ recipe/ # Recipe detail screens
βββ assets/ # Images, fonts, icons
β βββ images/ # App screenshots and images
βββ components/ # Reusable UI components
β βββ RecipeCard/ # Recipe card component
β βββ SearchBar/ # Search input component
β βββ VideoPlayer/ # Video player component
βββ constants/ # App constants and themes
β βββ Colors.ts # Color definitions
β βββ Config.ts # App configuration
βββ hooks/ # Custom React hooks
β βββ useAuth.ts # Authentication hook
β βββ useRecipes.ts # Recipe data hook
βββ services/ # API services
β βββ api.ts # Axios configuration
β βββ auth.ts # Auth service
β βββ recipes.ts # Recipe service
βββ .gitignore # Git ignore rules
βββ app.json # Expo configuration
βββ eas.json # EAS Build configuration
βββ eslint.config.js # ESLint configuration
βββ package.json # Dependencies
βββ tsconfig.json # TypeScript config
βββ README.md # This file
The app uses JWT (JSON Web Tokens) for secure authentication:
- Sign Up: Users create an account with name, email, and password
- Sign In: Credentials are verified and a JWT token is issued
- Token Storage: Token is securely stored using AsyncStorage
- Authenticated Requests: Token is included in API request headers
- Auto-Logout: Token expiration triggers automatic logout
// Sign up
const signUp = async (name, email, password) => {
const response = await axios.post(`${API_URL}/auth/register`, {
name,
email,
password
});
const { token } = response.data;
await AsyncStorage.setItem('authToken', token);
return response.data;
};
// Sign in
const signIn = async (email, password) => {
const response = await axios.post(`${API_URL}/auth/login`, {
email,
password
});
const { token } = response.data;
await AsyncStorage.setItem('authToken', token);
return response.data;
};- Browse trending and popular recipes
- View recipes by category
- Infinite scroll for seamless browsing
- Beautiful recipe cards with images
- Real-time search results
- Search by recipe name
- Search by ingredients
- Search by cuisine type
- Filter and sort options
- High-quality recipe images
- Video tutorials
- Ingredient lists with quantities
- Step-by-step cooking instructions
- Prep time and cook time
- Serving size information
- Difficulty level
- Save favorite recipes
- View all favorites in one place
- User profile management
- Personal recipe collections
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Run E2E tests
npm run test:e2e# Install EAS CLI
npm install -g eas-cli
# Login to Expo
eas login
# Build APK
eas build --platform android --profile preview
# Build AAB for Play Store
eas build --platform android --profile production# Build for TestFlight
eas build --platform ios --profile productionContributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m 'Add amazing feature' - Push to your branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow TypeScript best practices
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Follow the existing code style
- Use ESLint for code quality
- Video playback may be slow on older devices
- Search autocomplete could be faster
- Some UI elements need optimization for tablets
See the Issues page for a complete list.
- Social Features: Share recipes with friends
- Meal Planning: Weekly meal planner
- Shopping List: Auto-generate shopping lists from recipes
- Recipe Ratings: Rate and review recipes
- Voice Commands: Hands-free cooking mode
- Offline Mode: Access saved recipes offline
- Multi-language Support: Support for multiple languages
- Recipe Upload: Allow users to upload their own recipes
- Cooking Timer: Built-in timers for each cooking step
- Nutritional Info: Detailed nutritional information
- Performance optimization for older devices
- Enhanced search with filters
- Better tablet support
- Dark mode theme
- Push notifications
- Recipe categories and tags
Bisha18
- GitHub: @Bisha18
- Frontend Repository: recipie_spoon
- Backend Repository: recepie_api
- Expo Team for the amazing development platform
- React Native Community for continuous support
- Backend hosted on Render
- Icons from Expo Vector Icons
- UI inspiration from modern recipe apps
If you have any questions or need help:
- Open an Issue
- Check the Discussions
If you like this project, please give it a β on GitHub!




