A full-stack food delivery application clone inspired by Deliveroo, built with modern web technologies. This project features a React frontend with TypeScript and a Node.js backend with MongoDB.
- Modern UI/UX - Clean and responsive design using Material-UI components
- User Authentication - Complete auth flow with signup, login, password recovery, and account completion
- Restaurant Browsing - Browse all restaurants or filter by categories
- Menu Viewing - Detailed restaurant menus with dishes and meal deals
- Shopping Cart - Add items to cart and manage orders
- Search Functionality - Search for restaurants and dishes
- Location Services - Location-based restaurant discovery
- Responsive Design - Optimized for desktop and mobile devices
- Firebase Integration - Cloud services for authentication and storage
- State Management - Redux Toolkit for efficient state management
- Form Validation - React Hook Form with Zod schema validation
- Notifications - Toast notifications using Notistack
- Privacy & Data Policies - Privacy policy and data deletion pages
- RESTful API - Built with Node.js and Express
- MongoDB Database - NoSQL database for flexible data storage
- Authentication - JWT-based authentication system
- Restaurant Management - CRUD operations for restaurants
- Menu Management - Manage dishes and categories
- User Management - User profiles and order history
- Email Services - Email notifications and confirmations
- Framework: React 18.3.1
- Language: TypeScript 5.6.2
- Build Tool: Vite 6.0.1
- UI Library: Material-UI (MUI) 6.3.1
- State Management: Redux Toolkit 2.4.0
- Routing: React Router DOM 7.0.2
- Form Handling: React Hook Form 7.54.2
- Validation: Zod 3.24.2
- HTTP Client: Axios 1.7.9
- Authentication: Firebase 11.4.0, JWT
- Animations: Lottie animations
- Icons: Lucide React, MUI Icons
- Notifications: Notistack 3.0.2
- Runtime: Node.js
- Database: MongoDB
- Authentication: JWT (JSON Web Tokens)
deliveroo-clone-web/
βββ src/
β βββ assets/ # Images, SVGs, and animations
β βββ data/ # Static data and mock data
β βββ features/ # Feature-based modules
β β βββ menu/ # Menu feature
β β βββ components/ # UI components
β β βββ validations/ # Form validations
β β βββ views/ # Feature views
β βββ hocs/ # Higher-order components
β βββ layout/ # Layout components
β βββ pages/ # Page components
β βββ services/ # API services
β βββ store/ # Redux store
β βββ theme/ # Theme configuration
β βββ types/ # TypeScript type definitions
β βββ utils/ # Utility functions
βββ eslint.config.js # ESLint configuration
βββ vite.config.ts # Vite configuration
βββ tsconfig.json # TypeScript configuration
- Node.js (v16 or higher)
- npm or yarn
- MongoDB (local or cloud instance)
- Firebase account (for authentication)
-
Clone the repository
git clone https://github.com/DiluDevX/deliveroo-clone-web.git cd deliveroo-clone-web -
Install frontend dependencies
npm install
-
Set up environment variables
Create a
.envfile in the root directory:VITE_API_URL=http://localhost:4000 VITE_FIREBASE_API_KEY=your_firebase_api_key VITE_FIREBASE_AUTH_DOMAIN=your_firebase_auth_domain VITE_FIREBASE_PROJECT_ID=your_firebase_project_id VITE_FIREBASE_STORAGE_BUCKET=your_firebase_storage_bucket VITE_FIREBASE_MESSAGING_SENDER_ID=your_firebase_messaging_sender_id VITE_FIREBASE_APP_ID=your_firebase_app_id
-
Set up the backend
Navigate to your backend directory and follow backend setup instructions (install dependencies, configure MongoDB connection, etc.)
-
Start the development server
# Frontend (default port: 5173) npm run dev # Backend (default port: 3000) # Run this in your backend directory npm start
-
Open your browser
Navigate to
http://localhost:5173
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLintnpm run lint:fix- Fix ESLint errorsnpm run format:fix- Format code with Prettier
The frontend is configured to proxy API requests to the backend server. Check vite.config.ts:
server: {
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
secure: false,
},
},
}- Email/password signup and login
- Firebase authentication integration
- JWT token management
- Password recovery and reset
- Account completion flow
- Browse restaurants by category
- View detailed restaurant information
- Explore menu items and deals
- Add items to cart
- Category-based filtering
The app uses Redux Toolkit for centralized state management, handling:
- User authentication state
- Cart management
- Restaurant data
- Menu items
- UI state
The project uses:
- Material-UI for component library
- Emotion for CSS-in-JS styling
- Custom theme configuration in
src/theme/ - Responsive design patterns
- JWT-based authentication
- Firebase authentication integration
- Secure password handling
- Protected routes
- Token refresh mechanism
The application is fully responsive and optimized for:
- Desktop (1024px and above)
- Tablet (768px - 1023px)
- Mobile (320px - 767px)
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is created for educational purposes.
DiluDevX
- GitHub: @DiluDevX
- Inspired by Deliveroo
- Built with modern React and TypeScript best practices
- Uses Material-UI component library
For any questions or feedback, please reach out through GitHub issues.
Note: This is a clone project created for learning and portfolio purposes. It is not affiliated with or endorsed by Deliveroo.