Project overview
CraveRush is a food delivery platform covering customer ordering, restaurant management, fleet dispatch and administration. It was designed so that ordering and payments keep working even when other parts of the system are under strain.
The challenge
Order volume in food delivery arrives in sharp peaks around meal times. In a single application, a slow menu search or recommendation query can exhaust resources shared by checkout. The platform needed clear fault boundaries and full visibility into requests moving across services.
The approach
We separated the system along business boundaries — orders, payments, menus, dispatch — and made services communicate through events rather than direct calls where possible. Each service owns its data and can fail or scale independently.
The architecture
- Java Spring Boot microservices for orders, payments, menus and dispatch
- Apache Kafka for asynchronous events between services
- PostgreSQL for orders and payments (ACID transactions)
- MongoDB for menu and catalogue documents
- React single-page app with React Query for server state
- Distributed tracing with Zipkin; Docker-based environment
- Stripe for payments
The product
Customers browse restaurants, order and pay. Restaurants manage menus and incoming orders. Dispatchers track the fleet on a live dashboard, and administrators oversee the whole platform.
Key features
- Customer ordering and checkout
- Restaurant menu and order management
- Fleet dashboard for dispatch
- Administrative dashboard across restaurants and orders
- Event-driven order state updates
- Distributed tracing across services
UX decisions
- Order status is driven by events, so customers see changes as they happen rather than on refresh.
- The fleet dashboard prioritises exceptions — late or unassigned orders — over a full list.
Technology
- Java
- Spring Boot
- Apache Kafka
- React
- PostgreSQL
- MongoDB
- Docker
- Stripe
Deployment
Containerised services with a Docker-based stack, per-service configuration and tracing enabled across environments.
Outcome
Checkout and payments are isolated from the rest of the platform, each service can be scaled on its own, and engineers can trace any order across every service it touched.









