
What it is
A delivery product with three sides. Customers order food from nearby restaurants. Drivers accept and deliver the orders. Restaurants manage their menu, orders and drivers from a web admin. All three run on one Django REST API.
The work was a contract with six milestones between June 2020 and May 2021.
Customer app

- Restaurant search, menu categories, and items with sizes, add-ons and reviews.
- A cart, then a three-step checkout: contact details, card, and place order.
- Card payments through Stripe. The app checks the card number, expiry and CVV before sending anything.
- Order history, a star rating and review after each order, chat, and push notifications.
Driver app

- New orders arrive by push. The driver accepts or rejects them, then marks them delivered.
- A map with the delivery location and the full order.
- Delivery history, chat with the customer, and a profile with vehicle, licence and bank details.
Restaurant admin

- React with CoreUI, Redux and redux-saga.
- Orders grouped as Pending, Chef Assigned, Ongoing and Delivered, with search. Drivers are assigned from here.
- Menu items with sizes and add-ons, with drag-and-drop images. Also driver accounts and monthly sales charts.
Backend
- Django and Django REST Framework, with separate apps for restaurants, orders, drivers and users.
- Stripe Connect: each restaurant has its own connected account and is paid out directly. Webhooks handle the payment events.
- PostGIS for restaurant and delivery locations.
- Order endpoints to add, accept, decline and mark orders delivered. FCM push to both apps.
- Google and Apple sign-in. Deployed with Docker on Heroku.
Names, addresses and prices shown are sample data.