Skip to content

swarupecenits/Zest-India

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🍽️ Zest India - Food Delivery App

A modern, full-featured food delivery application built with React Native and Expo. Order your favorite food with an intuitive interface, real-time location tracking, and secure authentication powered by Appwrite.

Version React Native Expo License

πŸ“± Features

  • πŸ” User Authentication - Secure sign-up and sign-in with Appwrite backend
  • πŸ“ Location Services - Real-time location detection and delivery address selection
  • πŸ” Food Marketplace - Browse restaurants and menu items by category
  • πŸ›’ Shopping Cart - Add, remove, and manage orders with persistent cart state
  • πŸ‘€ User Profile - Update profile information and avatar with image upload
  • πŸ“¦ Order Management - Track order history and current orders
  • πŸ” Search & Filter - Find food items with advanced search and filters
  • πŸ’³ Secure Checkout - Complete payment flow with order confirmation
  • πŸŒ™ Dark Mode Ready - Automatic UI theme switching support
  • πŸ“Š Order QR Code - Generate QR codes for order tracking

πŸ› οΈ Tech Stack

Frontend

  • React Native - Cross-platform mobile development
  • Expo - Development platform and build tools
  • TypeScript - Type-safe code
  • Expo Router - File-based routing with deep linking
  • NativeWind - Tailwind CSS for React Native
  • Zustand - Lightweight state management

Backend & Services

  • Appwrite - Backend-as-a-Service (Authentication, Database, Storage)
  • Expo Location - Geolocation and reverse geocoding
  • Sentry - Error tracking and monitoring

UI Components & Libraries

  • React Native Gesture Handler - Touch gestures
  • React Native Reanimated - Smooth animations
  • React Native SVG - SVG rendering
  • Expo Image Picker - Image selection and upload
  • React Native QR Code - QR code generation

πŸ“‹ Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js (v20.19.4 or higher recommended)
  • npm or yarn package manager
  • Expo CLI - npm install -g expo-cli
  • Android Studio (for Android development)
  • Xcode (for iOS development, macOS only)
  • Appwrite Instance - Self-hosted or cloud instance

πŸš€ Getting Started

1. Clone the Repository

git clone https://github.com/swarupecenits/Zest-India.git
cd zest_india

2. Install Dependencies

npm install

3. Environment Setup

Create a .env file in the root directory:

EXPO_PUBLIC_APPWRITE_ENDPOINT=https://fra.cloud.appwrite.io/v1
EXPO_PUBLIC_APPWRITE_PROJECT_ID=your_project_id
EXPO_PUBLIC_APPWRITE_PROJECT_NAME=your_project_name
SENTRY_AUTH_TOKEN=your_sentry_token

Replace the values with your Appwrite and Sentry credentials.

4. Seed Database (Optional)

Populate your Appwrite database with sample data:

npm run seed

5. Start Development Server

npm start

This will open Expo DevTools. You can then:

  • Press a to open on Android emulator
  • Press i to open on iOS simulator
  • Scan QR code with Expo Go app on your physical device

πŸ“± Build for Production

Android

# Development build
npx expo run:android

# Production APK with EAS
eas build -p android --profile preview

iOS

# Development build
npx expo run:ios

# Production build with EAS
eas build -p ios --profile preview

πŸ“‚ Project Structure

zest_india/
β”œβ”€β”€ app/                      # Main application code (Expo Router)
β”‚   β”œβ”€β”€ (auth)/              # Authentication screens
β”‚   β”‚   β”œβ”€β”€ sign-in.tsx
β”‚   β”‚   └── sign-up.tsx
β”‚   β”œβ”€β”€ (tabs)/              # Tab navigation screens
β”‚   β”‚   β”œβ”€β”€ index.tsx        # Home/Offers
β”‚   β”‚   β”œβ”€β”€ search.tsx       # Search
β”‚   β”‚   β”œβ”€β”€ cart.tsx         # Shopping cart
β”‚   β”‚   └── profile.tsx      # User profile
β”‚   β”œβ”€β”€ marketplace/         # Food marketplace
β”‚   β”‚   └── [category].tsx
β”‚   β”œβ”€β”€ menu/                # Restaurant menu
β”‚   β”‚   └── [id].tsx
β”‚   β”œβ”€β”€ orders/              # Order management
β”‚   β”‚   β”œβ”€β”€ [id].tsx
β”‚   β”‚   └── history.tsx
β”‚   β”œβ”€β”€ payment/             # Payment flow
β”‚   β”‚   └── checkout.tsx
β”‚   β”œβ”€β”€ _layout.tsx          # Root layout
β”‚   └── global.css           # Global styles
β”œβ”€β”€ assets/                   # Static assets
β”‚   β”œβ”€β”€ fonts/
β”‚   β”œβ”€β”€ icons/
β”‚   └── images/
β”œβ”€β”€ components/              # Reusable components
β”‚   β”œβ”€β”€ CartButton.tsx
β”‚   β”œβ”€β”€ CartItem.tsx
β”‚   β”œβ”€β”€ CustomButton.tsx
β”‚   β”œβ”€β”€ CustomHeader.tsx
β”‚   β”œβ”€β”€ CustomInput.tsx
β”‚   β”œβ”€β”€ Filter.tsx
β”‚   β”œβ”€β”€ MenuCard.tsx
β”‚   └── SearchBar.tsx
β”œβ”€β”€ constants/               # App constants and data
β”‚   └── index.ts
β”œβ”€β”€ lib/                     # Utilities and services
β”‚   β”œβ”€β”€ appwrite.ts          # Appwrite configuration
β”‚   β”œβ”€β”€ data.ts              # Static data
β”‚   β”œβ”€β”€ seed.ts              # Database seeding
β”‚   └── useAppwrite.ts       # Appwrite custom hook
β”œβ”€β”€ store/                   # State management
β”‚   β”œβ”€β”€ auth.store.ts        # Authentication state
β”‚   └── cart.store.ts        # Cart state
β”œβ”€β”€ scripts/                 # Build and utility scripts
β”‚   └── runSeed.js
└── android/                 # Native Android code

🎨 Available Scripts

Command Description
npm start Start Expo development server
npm run android Run on Android device/emulator
npm run ios Run on iOS device/simulator
npm run web Run in web browser
npm run seed Seed Appwrite database with sample data
npm run lint Run ESLint for code quality
npm run reset-project Reset project to starter template

πŸ”§ Configuration Files

  • app.json - Expo configuration
  • tailwind.config.js - Tailwind CSS configuration
  • tsconfig.json - TypeScript configuration
  • metro.config.js - Metro bundler configuration
  • eas.json - EAS Build configuration
  • babel.config.js - Babel transpiler configuration

🌐 Appwrite Setup

Collections Required

  1. users - User profiles
    • firstName, lastName, username, email, avatar
  2. restaurants - Restaurant information
  3. menuItems - Food items
  4. orders - Order records
  5. cartItems - Shopping cart data

Storage Buckets

  • avatars - User profile pictures
  • menuImages - Food item images

πŸ”’ Authentication Flow

  1. User signs up with email/password
  2. Appwrite creates account and session
  3. User profile automatically created in database
  4. Session persisted with Zustand store
  5. Protected routes check authentication state

πŸ› Troubleshooting

Common Issues

Build Errors with New Architecture:

  • Disable New Architecture in app.json: "newArchEnabled": false

Location Not Working:

  • Grant location permissions in device settings
  • Ensure Expo Location is properly installed

Images Not Loading:

  • Check Appwrite storage bucket permissions
  • Verify file IDs are correct

Metro Bundler Errors:

  • Clear cache: npx expo start -c
  • Reinstall dependencies: rm -rf node_modules && npm install

πŸ“„ License

This project is private and proprietary.

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

Swarup Chanda

πŸ™ Acknowledgments


Made with ❀️ By Swarup Chanda

About

Food Delivery app made using React Native

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors