CanTho

CanTho

An online ordering system for a fast food restaurant
Business process automation

Business process automation

Our client’s request

Damien Toulouse image
Client's location: Belgium, Brussels

Recently, we worked on an app for Belgian restaurateur and CEO Damien Toulouse. Damien wanted to create a restaurant with an innovative user experience, taking a waiter- and cash-free approach. This was designed to attract customers and grow brand loyalty.

Damien asked us to build an application for the kiosks that would automate business processes at their restaurant. These kiosks would offer self-service ordering and a point of sale system.

On-demand Food Onlineordering POS Restaurant
Relevance

Relevance

Restaurants worldwide want to make meaningful investments in technology and business process automation to be major winners in the industry. Convenience for customers and resource efficiency for restaurateurs are the main aims driving restaurateurs to develop mobile apps and automate business processes. Famous chains such as McDonald’s, KFC, and Wendy’s have recognized the importance of technology and user demand for it, implementing mobile tech and self-order kiosks. This technology can deliver customer orders to the kitchen, reduce wait times via online ordering, and improve the overall customer experience with a brand. 

User Roles

icon
Customer

Customers can view the menu and place orders using the app. They can also create custom dishes or make changes to the ingredients in dishes. Customers can pay for their orders and get a receipt that confirms their orders. If customers have a hard time interacting with the app, they can get help by pressing the Get Help button on the home screen.

icon
Administrator

The admin can confirm orders, resolve returns, and add dishes and ingredients through the admin dashboard. They can also set prices and indicate the VAT percentage for eat-in and takeaway.

Results

Duration:
May 2018 – November 2018
Team:
Backend - 1 Android - 1 UX - 1 QA - 1 PM - 1
Created the UX

Our client came with a user interface design, and our task was to come up with a dynamic and engaging user experience. We spent some time discussing core features and the flow in order to develop a prototype. This prototype served as the starting point for our design.
 

Developed an Android application

We developed CanTho using Clean Architecture principles, which allowed us to separate business logic and price calculations into independent modules. By doing so, we simultaneously increased maintainability and reliability.

With CanTho, one of the main challenges was to implement a payment terminal and provide a smooth payment flow for customers. Since we needed a modern solution to satisfy even the pickiest customers, we went with the Valina terminal, which lets users pay both by card and with contactless methods.

We also implemented logic for price calculations that handles value-added tax (VAT).

As a result, we developed stable software that automates all work that’s otherwise done by waiters.
 

Developed the backend

We had the non-trivial task of implementing the backend for this Belgian waiter-free restaurant. The backend needed to let customers create their own dishes from suggested ingredients and add-ons. We chose the Django framework for the service base with a PostgreSQL database and the Django REST framework to let the backend communicate with the kiosks.

We needed to make sure we kept all information about transactions and value-added taxes as required by Belgian law. So we decided to integrate a point of sale (POS) system since developing and licensing similar functionality on our own would have taken a lot of time. Lightspeed had an API and the certifications required for use in Belgium.

Integrating Lightspeed led to a simple and clear order flow. Through the Lightspeed admin dashboard, restaurant staff can fill in information such as the price of dishes and all ingredients along with the VAT percentage. This information is synchronized with the CanTho database with the help of a web API, representing the server-to-server communication. To mitigate all possible discrepancies on the backend, all financial information is in a read-only format. After a user places their order, the backend transmits the data to the Lightspeed server, which checks the accuracy of calculations and keeps the tax information.

The backend for the CanTho app has extensive capabilities for editing menus. Seeing as CanTho’s key feature is creating custom dishes, we developed a multi-layer system for customizing orders as well as ingredients and add-ons. Everything can be set via the admin dashboard.

CanTho supports three languages: English, French, and Dutch. To make the app multilingual, building a mere Django admin site wasn’t enough, so we added the Django JET plugin.

We developed a backend application that synchronizes with the Lightspeed POS, provides an API for the kiosks, and allows staff to fine-tune the CanTho ecosystem that includes the menu, Lightspeed integration, smart light bulbs, kiosks, and printers via the admin dashboard.  
 

Integrations

When integrating the Lightspeed POS, we needed to implement server-to-server communication through a web API. We developed the Lightspeed API client library using Requests.

We chose to divide the business logic for deserialization and synchronization using Marshmallow schema classes for deserialization. We used Marshmallow schemas instead of DRF serializers due to their simplicity, dynamic fields, and the absence of direct interaction with models, which was exactly what we needed.

Synchronization is done by synchronizer classes with the help of our client library and Marshmallow classes to serialize or deserialize data. This data is saved in the case of incoming synchronization or sent to Lightspeed in the case of outgoing synchronization.  

Taking into account that menu information changes rarely, instead of periodically syncing with Celery beat tasks, we implemented on-demand synchronization by adding a synchronize button in the admin dashboard. What’s more, the admin can see the synchronization status and the number of items created and deleted during the last sync.  

In the future, we plan to integrate with Uber Eats and Deliveroo.

Implemented features

For customer convenience, we integrated the app with a Xiaomi smart light bulb that lights up whenever customers press the Get Help button on the kiosk screen.
 

Customers, bartenders, and chefs each get different receipts. Customers get receipts that confirm their orders. Chefs get receipts printed in the kitchen showing what dish a customer has ordered and what ingredients are in it. Bartenders get official receipts with VAT and receipts with drinks a customer has ordered.
 

Customers can pay via a terminal provided by the Worldline company using cards or contactless payment methods.
 

Customers can create custom dishes and add ingredients the app suggests.

Customers can place orders with CanTho and choose three options: eat in, order takeaway, or eat in and order takeaway.

Technology Stack

Backend

Python
Python
Django
Django
Gunicorn
Gunicorn
S
Supervisor
Nginx
Nginx
Ansible
Ansible
PostgreSQL
PostgreSQL
Sentry
Sentry
M
Marshmallow
R
Requests
D
Django JET
R
Raven

Android

M
MVP
R
RxAndroid
P
Paper DB
J
Joda Time
Calligraphy
Calligraphy
D
Dagger 2
R
RxJava
Crashlytics
Crashlytics
Hawk
Hawk
Timber
Timber
Retrofit
Retrofit
Picasso
Picasso
Kotlin
Kotlin

See more case studies

Building a promotional app with ERP features for small and midsize businesses

Building a promotional app with ERP features for small and midsize businesses

A marketplace that connects businesses with clients and equips them with effective management tools

  • Mobile
  • Qatar
  • Kuwait
  • Booking
Social media platform for sharing your favorite travelling experiences

Social media platform for sharing your favorite travelling experiences

A Facebook-based platform for sharing pictures and locations of travel destinations

  • iOS
  • Travel
  • Lifestyle
  • Mobileapp