Whizzy — Logistic App for Items Shipping
Whizzy is an items’ delivery service operating in the Middle East countries. Stfalcon’s task was to build IOS and Android mobile apps from scratch in two languages: Arabic and English.
The platform comprises two applications: one is for clients and one is for drivers. The clients create orders and choose drivers who will carry the order out. The drivers look for the necessary items and fulfill the orders.
- Android and iOS app for a client
- Android and iOS app for a driver
- Admin Panel
Carrying out the project for Whizzy, Stfalcon provided:
- Discovery phase
- UX/UI design
- Backend development
- Frontend development
- iOS and Android development
- Manual testing
Stfalcon started the work with a discovery phase to find out the needs of both types of users, to understand the context of the solution usage, and as a result to create user flow, user stories, and product vision. It was necessary for the project’s overall vision, estimation, and providing the client with the timeline for the solution development.
Based on the user stories we’ve got during the discovery phase; we divided the application into two versions. The first version should become a Minimum Viable Product (MVP), and the second version with the additional features should be developed after the product launch.
MVP customer app
Customers are people who need help with moving, or transportation of small items or even food. For this category of people it’s important to set the time and date of delivery, to contact drivers whenever it’s necessary, to track their items in real-time, and to be sure their items are safe.
Based on the customers’ needs we highlight the most important features for MVP:
- Fast registration with a phone number,
- Simple order creation: a user should choose the necessary location, indicate the necessary date and time, add the recipient’s info, upload the parcel’s photo, select the type of vehicle and request additional help with manpower if it’s necessary.
- List with drivers who respond to choose driver with the best price,
- Payment option
- Live tracking
- Active order’s list,
Native TimePicker—is a simple solution, quick in development with a minimalistic and clean interface, but we decided to go further. In the given project it would be more convenient for the users to see the most popular hours, so we switched night hours off and left the period from 8:00 am till 8:00 pm. It allowed us to make the number of actions less. While the standard TimePicker requires 5 ations, timeslots implemented by us—only one. We improved the time selection screen and sped the process of time selection up 5 times.
Drivers are people who have a pickup, semi truck or even a refrigerator vehicle and want to earn some extra cash managing their own availability and setting their own reasonable price for every delivery. Based on their needs we highlight the most important features for MVP:
- Registration with documents’ verification,
- Simple profile with personal info,
- Order search,
- Sending request with price suggestion and waiting for approval,
- Order fulfillment routine with different statuses,
- Active order’s list.
We created a simple and strong symbol of a road in the form of the letter «Z», and arrows which stand for different ways of delivery. The symbol is easy to understand and remember, suitable for both printed media and digital advertising. The symbol is readable in any format, it can be a big billboard or a small digital banner on Instagram.
- Backend for the app
- Backend for the Admin panel
Backend for the application
Backend for mobile apps is realized with the help of RESTful API service. The major backend technologies were PHP 7.4 and Symfony 5.1. We used the latest versions of both PHP and Symfony, which were available for the moment of development. It provided us with a better backend architecture and allowed to use wider opportunities during development. We also used Postgres, Redis, and RabbitMQ, we know these tools quite well, and they allow us to solve the necessary tasks. Whizzy application environment is related to the transition between the order statuses. Each order has 10 statuses and the transit to each new one comes with different logic and actions (sending notifications out, checking of the possibilities of transit, asynchronous background tasks, bookkeeping, and so on.)
On the backend, we implemented this with the help of the Symfony Workflow component, which allows you to describe all the possible statuses and transitions between them. Besides, you can make scripts to the transition from one status to another, and indicate the business logic that must be executed for the situation. The constant order status changes require transferring updates from the server to the client. We used Centrifugo web socket server for the purpose.
The users of Whizzy mobile app have the opportunity to pay for delivery with a payment card. To make it possible, the Tap payment system, which operates in the Middle East region, was integrated into the solution. Automatic tests are also an important part of the backend. API-calls and all internal services are covered with modular tests, the functionality of the admin panel is covered by functional tests, the combination of these test types results in 100% test coverage of the code.
Backend for the Admin panel
For the administrators of the app we have implemented a personal account in which they can manage the service, make the necessary settings, and view reports. The personal account is also implemented on Symfony with EasyAdminBundle usage. A new version of Bundle 3.0 was released during the project development, and we used it. EasyAdminBundle allows you to quickly and easily configure basic operations on entities. Additionally, due to the Symfony-approaches in its architecture, the bundle allows convenient customization for the needs of the project.
Mobile app development was based on a modular architecture that complies with the principles of Clean Architecture. We also used MVVM architecture for Presentation modules and the Dependency Injection library for dependency management. It allowed us to avoid business logic duplication in the driver and client app versions. More than that, it will greatly facilitate new features development and maintenance in the future.
For the Android platform, we used Kotlin and Coroutines, today they are the leading-edge technologies in the Android Native solutions development. Application data is updated in real-time by implementing a WebSocket connection based on the Centrifuge library. Since the Centrifuge-Android library is not yet stable, we have developed our own implementation of connecting to Centrifugo using the Scarlet library.
Since the Centrifuge-Android library is not yet stable, we have developed our own implementation of connecting to Centrifugo using the Scarlet library. iOS application uses the SwiftCentrifuge library to connect to the socket, however, in a slightly modified form. Mobile applications support the right-to-left interface as the solution has Arabic localization. We followed the Material Design guidelines and used the best practices of UI development, which allowed us to add support for LTR, RTL, and BiDirectional interfaces without any problems and time waste.
Stfalcon developed an MVP version for iOS and Android mobile apps, which exceeded the initial expectation of the client. It became possible, because we presented our vision and propositions to the client and agreed on the best solutions. Besides, we took care of the landing page to attract traffic to the service and our product.
Back End Developer