Build a Full-Stack Food Ordering App
Explore a comprehensive microservices-based food ordering application. This tutorial series covers Docker, MongoDB, PostgreSQL, Redis, RabbitMQ, nginx, Node.js, React, and more, demonstrating how to build a scalable, containerized system with independent services for user management, menu handling, order processing, and notifications.
We’re going to build a food ordering application called Muchies.
By the end of this project you will have hands on experience with a full stack of technologies.
- Node.js
- JWT authentication
- React
- MongoDB
- PostgreSQL
- Redis
- RabbitMQ
- Docker, Docker Compose, K3s (Kubernetes for mere mortals)
The main components of the system include:
- User Service (Node.js, express, mongoose)
- Menu Service (Node.js, express, sequelize)
- Order Service (Node.js, express, mongoose, redis)
- Notification Service (Node.js, express, rabbitmq)
- API Gateway (nginx)
- Frontend (React)
If you are looking for a typical “CRUD” app I am sorry to disappoint.
Why Microservices?
The entire system is containerized. We will first start Docker + Docker Compose. Later on we will deploy to K3s (Kubernetes for mere mortals). Each service is designed to be independent and scalable.
The API gateway is the secret sauce.
It’s going to handle a few things for us:
- abstract the underlying complexity of the system
- provide a single entry point for all requests
- gives us optionality toturn one a service from Node.js to another framework like Python, Go, etc.
Project Overview
This is the backend we will be building out.
Menu Service
GET /api/menu
POST /api/menu
PUT /api/menu/:id
DELETE /api/menu/:id
Order Service
GET /api/orders/:userId
POST /api/orders
User Service
POST /api/users/register
POST /api/users/login
GET /api/users/
Notification Service
POST /api/notifications
GET /api/notifications/:userId