Skip to content

Bisha18/recipie_spoon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🍽️ Recipe Spoon

A beautifully designed React Native mobile app for discovering and following delicious recipes

Made with Expo React Native PRs Welcome

Features β€’ Screenshots β€’ Installation β€’ Tech Stack β€’ API


πŸ“– Overview

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.


✨ Features

  • πŸ” 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

πŸ“Έ App Screenshots

Sign In Sign Up Recipe Home
Sign In Sign Up Recipe Page
Search Recipe Detail
Search Recipe Detail

πŸš€ Installation

Prerequisites

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)

Step-by-Step Setup

  1. Clone the Repository

    git clone https://github.com/Bisha18/recipie_spoon.git
    cd recipie_spoon
  2. Install Dependencies

    npm install
    # or
    yarn install
  3. Configure Environment Variables

    Create a .env file in the root directory:

    API_BASE_URL=https://recepie-api.onrender.com/api
    ENVIRONMENT=production
  4. Start the Development Server

    npx expo start
    # or
    npm start
  5. 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

🧰 Tech Stack

Frontend Technologies

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

Backend

  • Node.js + Express.js - RESTful API
  • PostgreSQL - Database
  • Drizzle ORM - TypeScript ORM
  • Hosted on Render

πŸ”— API Integration

Base URL

https://recepie-api.onrender.com/api

Key Endpoints

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)

Example API Call

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.


πŸ“ Project Structure

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

πŸ” Authentication

The app uses JWT (JSON Web Tokens) for secure authentication:

  1. Sign Up: Users create an account with name, email, and password
  2. Sign In: Credentials are verified and a JWT token is issued
  3. Token Storage: Token is securely stored using AsyncStorage
  4. Authenticated Requests: Token is included in API request headers
  5. Auto-Logout: Token expiration triggers automatic logout

Authentication Flow

// 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;
};

🎨 Features Breakdown

Recipe Discovery

  • Browse trending and popular recipes
  • View recipes by category
  • Infinite scroll for seamless browsing
  • Beautiful recipe cards with images

Search Functionality

  • Real-time search results
  • Search by recipe name
  • Search by ingredients
  • Search by cuisine type
  • Filter and sort options

Recipe Details

  • 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

User Features

  • Save favorite recipes
  • View all favorites in one place
  • User profile management
  • Personal recipe collections

πŸ§ͺ Testing

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

# Run E2E tests
npm run test:e2e

πŸ“¦ Building for Production

Android (APK)

# 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

iOS (IPA)

# Build for TestFlight
eas build --platform ios --profile production

🀝 Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a feature branch
    git checkout -b feature/amazing-feature
  3. Commit your changes
    git commit -m 'Add amazing feature'
  4. Push to your branch
    git push origin feature/amazing-feature
  5. Open a Pull Request

Coding Guidelines

  • 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

πŸ› Known Issues

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


πŸ—ΊοΈ Roadmap

Upcoming Features

  • 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

Planned Improvements

  • Performance optimization for older devices
  • Enhanced search with filters
  • Better tablet support
  • Dark mode theme
  • Push notifications
  • Recipe categories and tags

πŸ‘¨β€πŸ’» Author

Bisha18


πŸ™ Acknowledgments


πŸ“ž Support

If you have any questions or need help:


⭐ Show Your Support

If you like this project, please give it a ⭐ on GitHub!


Made with ❀️ and React Native

Backend API: https://recepie-api.onrender.com

⬆ Back to Top

About

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.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors