A production-ready halal food delivery application built with modern technologies for the Indian market.
All restaurants on UmmahEats are halal verified. The platform focuses on trust, simplicity, and accessibility for Indian users.
| Layer | Technology |
|---|---|
| Mobile App | React Native (Expo) + TypeScript |
| Backend API | NestJS (Modular Architecture) |
| Database | PostgreSQL + Prisma ORM |
| Auth | OTP-based (phone) + JWT |
| Payments | Razorpay (UPI, Cards, Net Banking) |
| Real-time | Socket.io (order tracking) |
| Notifications | Firebase Cloud Messaging |
| API Docs | Swagger (auto-generated) |
khana/
├── apps/
│ ├── mobile/ # React Native Expo app
│ │ ├── app/ # Expo Router screens
│ │ └── src/ # Components, hooks, services, stores
│ └── server/ # NestJS backend
│ ├── src/ # Modules: auth, users, restaurants, menu, orders, payments, riders, admin, notifications
│ └── prisma/ # Schema + seed data
├── docker-compose.yml # PostgreSQL
└── package.json # Workspace root
- Node.js 18+
- PostgreSQL (via Docker or local install)
- Expo CLI:
npm install -g expo-cli
cd khana
# Install all dependencies (workspace)
npm installOption A: Docker (recommended)
docker-compose up -dOption B: Local PostgreSQL
Update apps/server/.env with your PostgreSQL connection string.
cd apps/server
# Generate Prisma client
npx prisma generate
# Run database migrations
npx prisma migrate dev --name init
# Seed sample data
npx prisma db seed
# Start dev server
npm run start:devThe API will be available at http://localhost:3000
Swagger docs: http://localhost:3000/api/docs
cd apps/mobile
# Install dependencies
npm install
# Start Expo dev server
npx expo startScan the QR code with Expo Go (iOS/Android) to run the app.
Note: Razorpay payment requires
npx expo prebuildand development builds. It won't work in Expo Go.
| Screen | Description |
|---|---|
| Splash | Animated brand splash with auto-redirect |
| Login | Phone + OTP authentication |
| Home | Restaurant listing with search |
| Restaurant Detail | Menu, reviews, halal badge |
| Cart | Item management, bill summary |
| Checkout | Address, payment method (COD/Razorpay) |
| Order Tracking | Real-time status with Socket.io |
| Orders | Order history |
| Profile | Settings & logout |
POST /auth/send-otp— Send OTP to phonePOST /auth/verify-otp— Verify & get JWT
GET /restaurants— List (with location filter)GET /restaurants/:id— Detail with menu
POST /orders— Create orderGET /orders/my— User historyGET /orders/:id— Order detailPATCH /orders/:id/status— Update status
POST /payments/create— Create Razorpay orderPOST /payments/verify— Verify signature
GET /admin/analytics— Dashboard statsPATCH /admin/restaurants/:id/verify— Toggle halal badge
| Role | Phone |
|---|---|
| Admin | 9999999999 |
| Restaurant Owner | 9000000001 |
| User | 9100000001 |
OTPs are logged to the server console in development mode.
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ummaheats
JWT_SECRET=your-secret-key
RAZORPAY_KEY_ID=rzp_test_xxxxx
RAZORPAY_KEY_SECRET=xxxxx
PORT=3000EXPO_PUBLIC_API_URL=http://localhost:3000
EXPO_PUBLIC_RAZORPAY_KEY_ID=rzp_test_xxxxx
EXPO_PUBLIC_SOCKET_URL=http://localhost:3000User • Restaurant • MenuItem • Order • OrderItem • Payment • Rider • Review • OtpRecord
- Fork the repository
- Create a feature branch
- Commit changes
- Push and open a PR
Built with ❤️ for the Ummah