FoodRush is a production-ready, full-stack food ordering web application. Users can browse the menu, filter by category, add items to their cart, and place orders — all with a clean, fast, and modern UI.
Built with the latest Next.js 14 App Router, fully typed with TypeScript, styled with Tailwind CSS, powered by Supabase for backend & auth, and managed with Zustand for global state.
This is not a tutorial clone. This is a real-world full-stack project — with authentication, database, file storage, admin panel, and order management.
- 🔐 Google OAuth — Sign in with one click via Google
- 🍔 Browse Menu — View all available dishes with images, descriptions & prices
- 🗂️ Category Filter — Filter dishes by category (Burgers, Pizza, Noodles, etc.)
- 🔍 Live Search — Search for dishes in real-time
- 🛒 Smart Cart — Add, remove, increase/decrease quantities with Zustand state
- ✅ Place Orders — Confirm orders which are saved directly to the database
- 📦 Order History — View all past orders with items, prices & status
- 🔒 Secure Access — Only accessible by the owner's email
- ➕ Add Products — Add new dishes with name, description, price, category & image
- ✏️ Edit Products — Update any product details or image
- 🗑️ Delete Products — Remove products instantly
- 📋 Manage Orders — View all customer orders and update their status (Pending → Preparing → Delivered)
- 🖼️ Image Upload — Upload product images directly to Supabase Storage
| Layer | Technology | Purpose |
|---|---|---|
| 🖥️ Frontend | Next.js 14 (App Router) | SSR, routing, API routes |
| 🟦 Language | TypeScript | Type safety across the entire app |
| 🎨 Styling | Tailwind CSS | Fast, responsive, utility-first styling |
| 🗄️ Database | Supabase (PostgreSQL) | Tables, RLS policies, real-time data |
| 🔐 Auth | Supabase Auth + Google OAuth | Secure sign-in with Google |
| 🗂️ Storage | Supabase Storage | Product image uploads & hosting |
| 🧠 State | Zustand | Lightweight global cart state |
| 🔣 Icons | Lucide React | Clean, consistent icon set |
profiles → stores user info synced from Google OAuth
categories → product categories (Burgers, Pizza, etc.)
products → menu items with name, price, image, category
orders → customer orders with status tracking
order_items → individual items within each order
src/
├── app/
│ ├── page.tsx ← Home page (menu + search + filter)
│ ├── login/
│ │ └── page.tsx ← Google OAuth login
│ ├── cart/
│ │ └── page.tsx ← Cart + place order
│ ├── orders/
│ │ └── page.tsx ← Order history
│ ├── admin/
│ │ └── page.tsx ← Admin panel
│ └── auth/
│ └── callback/
│ └── route.ts ← OAuth callback handler
├── components/
│ ├── Header.tsx
│ ├── Footer.tsx
│ ├── ProductCard.tsx
│ ├── CartDrawer.tsx
│ ├── AdminProducts.tsx
│ └── AdminOrders.tsx
├── lib/
│ ├── supabase/
│ │ ├── client.ts
│ │ ├── server.ts
│ │ └── middleware.ts
│ └── store/
│ └── cartStore.ts
└── types/
└── index.ts
</code>
git clone https://github.com/yourusername/foodrush.git
cd foodrushnpm installCreate a .env.local file in the root:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your_supabase_publishable_key
ADMIN_EMAIL=[email protected]
NEXT_PUBLIC_ADMIN_EMAIL=[email protected]- Create a new Supabase project
- Run the SQL migrations (tables + RLS policies) from
/supabase/schema.sql - Enable Google OAuth under Authentication → Providers → Google
- Create a Storage bucket named
products(public)
npm run dev- All database tables are protected with Row Level Security
- Users can only view and create their own orders
- Admin panel is restricted to a single authorized email
- Google OAuth handles all authentication — no passwords stored
Developed by: HamiParsa 💬 Full-Stack Developer | Building real-world projects with modern web technologies







