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.
- π 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
- 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
- Appwrite - Backend-as-a-Service (Authentication, Database, Storage)
- Expo Location - Geolocation and reverse geocoding
- Sentry - Error tracking and monitoring
- 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
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
git clone https://github.com/swarupecenits/Zest-India.git
cd zest_indianpm installCreate 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_tokenReplace the values with your Appwrite and Sentry credentials.
Populate your Appwrite database with sample data:
npm run seednpm startThis 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
# Development build
npx expo run:android
# Production APK with EAS
eas build -p android --profile preview# Development build
npx expo run:ios
# Production build with EAS
eas build -p ios --profile previewzest_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
| 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 |
- 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
- users - User profiles
- firstName, lastName, username, email, avatar
- restaurants - Restaurant information
- menuItems - Food items
- orders - Order records
- cartItems - Shopping cart data
- avatars - User profile pictures
- menuImages - Food item images
- User signs up with email/password
- Appwrite creates account and session
- User profile automatically created in database
- Session persisted with Zustand store
- Protected routes check authentication state
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
This project is private and proprietary.
Swarup Chanda
- GitHub: @swarupecenits
Made with β€οΈ By Swarup Chanda