Food Trucks are gaining popularity, but the clients often have to queue up. We wanted to simplify the life of our clients and to create a mobile app, which will allow the users to make an order and pay for it online, getting it later from a food truck in a matter of minutes.
Anya Taggart, COO, Food Teck
The Stfalcon’s task was iOS and Android applications development, which will allow the users to place orders online and pay for them, while our client will be able to manage certain aspects via a web-based admin panel.
We managed to create an app, which exceeded the client’s expectations in the first iteration already.
Svetlana Bolgar, Project Manager
In this application we followed the principles of Clean Architecture as we do in all our current Android-based projects. Using common Domain and Data modules for the client and vendor applications allowed us to avoid business logic duplication. It resulted in a significant development time saving and simplified the process of making changes in the future.
Since the Centrifuge-Android library is not yet stable, we wrote our own realization for a socket connection to Centrifugo using the Scarlet library. Vendor position tracking is realized with the help of HyperTrack library, this ensures high accuracy and uninterrupted transmission of coordinates to the server.
IOS version architecture is realized like the one on Android. It comprises 4 modules: Vendor Presentation and Customer Presentation, Domain, and Data. RxSwift was used for data binding, since MVVM architecture was applied for Presentation Layer. We used Swinject, a Dependency Injection library, for new modules initiating. It simplifies their creation and re-usage. HyperTrack is used in the app to track user location, which in its turn utilizes CoreMotion framework for more accuracy.
CentrifugeIOS library was used fоr connection with socket, but it was slightly modified in a private repository. Lottie was used for animation integration in the app.
The backend is implemented on the Symfony PHP framework 4.4, the latest version for the time of development. Since the present application is more like a startup, the further extension of the scope of the features is presupposed in the next versions. However, for the initial version creation, we took a half-ready solution for the Admin panel realization - EasyAdminBundle. It’s easily configured to meet the user’s requirements and though it has a simple interface it works well enough as a plain, clear and intuitive admin panel. We implemented easy registration and authorization for the users - they can do it via email or Facebook account.
We also used Google places and GPS tracking features to allow the customers to find and choose the food truck in the necessary locale. More than that a client has the option of filtering his search by cuisine types or vendor name.
For full-text search Elasticsearch is used. To ensure the server’s communication with the mobile application, the Centrifugo web-socket server was used. It is lightweight and fast to develop, providing at the same time good performance. For making payments Payzang payment system was integrated into the app.
The code on the backend was checked by unit tests, and the added part of the admin panel - by functional tests. The project also uses various code analyzers that allow to identify the problem at the time of development and to make the code better.
Though the app development is going on and the payment system is being tested, the initial version has already exceeded the client’s expectations from the UX point of view. A present a new phase is being planned to add additional features.
Team Lead Mobile , Android Developer
QA Team Lead