ReservePlate is a full-stack web application designed to reduce food waste by connecting restaurants with customers interested in purchasing leftover food at a discounted price. The platform allows restaurants to publish their leftover food, and customers can browse and order based on their location and preferences. The system is built using modern web technologies to offer a seamless user experience.
-
Food Listing
- Restaurants can list their leftover food with details such as type, quantity, and price.
- Each listing includes a "reserve" button that allows customers to claim the food.
-
Location-based Search
- Customers can browse available food items by location, making it easy to find the nearest restaurants.
- Users can filter food by categories such as cuisine type, dietary restrictions, etc.
-
Real-Time Updates
- The platform provides real-time updates to show available inventory and food reservation status.
-
User Accounts
- Users (both restaurant owners and customers) can create accounts, manage their reservations, and keep track of their transaction history.
-
Admin Dashboard
- An admin panel allows the platform administrator to manage users, food listings, and view analytics on food distribution and waste.
- Technology Stack: React.js, HTML/CSS, Bootstrap.
- Customers can view available food, search by location, and reserve items.
- Restaurant owners can manage their food listings, mark items as reserved, and monitor orders.
- Technology Stack: Node.js, Express.js.
- The backend handles:
- User authentication and session management.
- CRUD operations for food listings and reservations.
- Location-based search and filtering of food items.
- Database: MongoDB for storing user data, food listings, and reservations.
- The application uses socket-based communication (via Socket.IO) to deliver real-time updates to users.
- As a food listing is updated or reserved, users who are browsing the site will instantly see the updated status.
- A payment gateway (such as Stripe or PayPal) will be integrated for handling transactions between customers and restaurants.
- React.js: Dynamic UI components for customer interaction and restaurant food listing management.
- Bootstrap: For responsive design and layout.
- Node.js: Server-side logic and API integrations.
- Express.js: Simplifies routing and middleware for RESTful API endpoints.
- MongoDB: Stores user data, food listings, and reservation details.
- Socket.IO: Enables real-time communication for immediate updates to users.
- Clone the Repository
git clone https://github.com/tanishpandey/ReservePlate.git cd ReservePlate - Install Dependencies
-
Ensure you have Node.js and npm installed. If not, download and install them from the Node.js official site.
-
Install the necessary packages by running the following command in the project root directory:
npm install
- Set Up Environment Variables
-
Create a .env file in the root directory of the project.
-
Add the following environment variables to configure your app:
MONGO_URI=your_mongodb_connection_string JWT_SECRET=your_jwt_secret_key
- Run the Application Locally
- To start the app, run the following command:
npm start
- The application will be available at http://localhost:3000. Open this URL in your browser to view the app.
- Test the Application
- Test the platform by registering as a customer or restaurant, adding food listings, reserving food, and confirming the reservation updates in real-time.
- Payment Integration: Add payment gateways (Stripe/PayPal) to handle transactions between customers and restaurants.
- Mobile App: Develop a mobile app for a better user experience and easier access to real-time food availability.
- Food Waste Awareness: Implement features that help restaurants track their food waste and generate reports.
- AI Recommendations: Use machine learning to recommend food items to customers based on their preferences and past behavior.
- Contributions to ReservePlate are welcome! If you have any ideas, suggestions, or improvements, feel free to fork the repository, submit a pull request, or open an issue for discussion.