PizzaBox is a full-stack pizza ordering mobile application built with React Native and Expo. It provides separate Customer and Admin experiences with authentication, pizza management, cart, orders, Stripe payments, and a Supabase backend.
PizzaBox uses Supabase Authentication with role-based navigation.
Authentication Flow:
🔐 Authentication
│
Login / Sign Up
│
┌──────┴──────┐
│ │
👨💼 Admin 👤 Customer
│ │
▼ ▼
Admin Tabs Check Location
│
┌────────┴────────┐
│ │
📍 Location 📍 Location
Exists Missing
│ │
▼ ▼
Customer Tabs Location Setup
│
▼
Customer Tabs
- 👨💼 Admin → Login → Admin Tabs
- 👤 Existing Customer → Login → Location already saved → Customer Tabs
- 👤 New Customer → Sign Up → Location Setup → Customer Tabs
- 📍 Customer without Location → Login → Location Setup → Customer Tabs
After authentication, customers can:
- 🍕 Browse Pizzas — View pizzas with categories, sizes, prices, and images
- 🛒 Shopping Cart — Add pizzas, select sizes, update quantities, and remove items
- 💳 Payments — Pay securely with Stripe or choose Cash on Delivery
- 📦 Place Orders — Create and view orders
- 🚚 Order Tracking — Track the current status of orders
- ❌ Cancel Orders — Cancel eligible pending orders
- 👤 Profile — View and manage customer profile information
Admins have a dedicated admin panel for managing the application:
- 🍕 Pizza Management — Add, edit, and manage pizzas
- 🏷️ Category Management — Manage pizza categories
- 💰 Price Management — Set prices for different pizza sizes
- 🖼️ Image Management — Upload and manage pizza images
- 📦 Order Management — View customer orders
- 🔄 Order Status Management — Update customer order status
| Category | Technologies |
|---|---|
| Frontend | React Native · Expo · Expo Router · Zustand |
| Backend | Supabase · PostgreSQL · Supabase Auth · Storage · Edge Functions |
| Payments | Stripe |
| Local Storage | AsyncStorage |
Flow: Login / Sign Up → Role Check → Admin or Customer
Flow: Admin Login → Admin Tabs → Manage Pizzas, Categories & Orders
Flow: Login / Sign Up → Location Check → Location Setup if required → Customer Tabs
Create a .env file in the project root and add your Supabase and Stripe keys.
EXPO_PUBLIC_SUPABASE_URL=your_supabase_url
EXPO_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your_supabase_publishable_key
EXPO_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key
⚠️ Never commit your.envfile or secret API keys to GitHub.


