Brilliant Move

A software product ecosystem for on-demand delivery that streamlines routine processes and customer communication

Brilliant Move

Business context

Jean Brillant, the founder of Brilliant Move, came to Yalantis to create a software solution for digitizing and optimizing order distribution and customer communication. When she came to us, these activities were based on Excel spreadsheets and phone calls.

Keep reading to learn how we created an ecosystem of mobile and web products that are equally useful for Brilliant Move customers, delivery crews, and managers.

Creating app user flows

We needed to build three distinct products to serve three groups of people: customers, delivery crews, and delivery managers.

Customer app

The customer app lets users book delivery of heavy and bulky household goods they have purchased from retailers and track delivery right to their door. It also allows users to pay for delivery directly in the app and to track the delivery process on a map. The user flow in the customer app looks like this:

1
Create a user account
2
Create new orders
3
View a list of orders
4
Track orders on the map
5
Confirm delivery
6
Rate delivery
7
Edit user information if required

Delivery team app user flow

Here’s the flow for the delivery team once added to the web interface:

Pick an order from the list to track it on the map
Reach the destination point
Get customer signature to confirm successful delivery
Mark the delivery as finished
RegistrationSideMenu

Elaborating a delivery-dedicated UX

We created screens with several states to represent all the described user flows:

Registration screens where users need to enter their email and password and add details for user profiles
Order creation screen where users enter order details: starting point, destination point, package size (number of items), and desired time of delivery
Checkout screen where users enter their credit card details for transactions
Order details screen, where users can track their delivery on a map and view delivery details and status
Delivery confirmation screen, where users confirm receipt of delivery and can leave feedback and rate the delivery team
Profile screen (similar to the registration screen), where users can update their personal details: phone number, name, and email

Order creation

To create a new delivery order, clients need to take the following steps:

1
Select the store they bought an item from as the starting point.
2
Enter the destination address by finding the location on the map or typing in the address.
3
Enter the desired delivery time.
4
Indicate the kpmgnumber of items in the delivery.
5
Upload a photo of the receipt to help the delivery crew identify the items to be delivered upon arrival at the store.

Once all details for a delivery order have been entered, the customer can review order details, correct any mistakes, and proceed to checkout, where they can enter their credit card details to pay for the order.

When an order is submitted, it becomes visible for the delivery crew, who can pick up the items at the store. At the same time, customers can track the delivery until the truck reaches its destination.

Order creation

Order tracking

All orders are stored in the History section, where they are divided into three groups: Waiting for Pick-up, In Progress, and Completed.

Customers can see all their orders in the Shipment History section. Specific orders can be selected for tracking by simply tapping on them. Tapping takes the customer to the next screen, displaying the delivery route. When the delivery crew is close to the destination, the customer will receive a push notification and the order will be marked as completed once the item(s) reach the destination and a signature is obtained.

Order tracking

Developing the application

The Brilliant Move app was developed for the iOS platform, and below you will find the list of technologies we used.

iOS technology stack

User Interface
Google Maps
Stripe
BlooDMagic
FastEasyMapping
Core Data(DB)
Fabric.io
api
xctest

Here are some more solutions we implemented during development:

Network requests

AFNetworking

Data storage

Core Data, ADVUserDefaults

Communication with Core Data

MagicalRecord

Data mapping

FastEasyMapping

Dependency Injection

BloodMagic

Test tools

XCTest, OCMock

Component for showing rating

EDStarRating

Date and time Picker

NTMonthYearPicker

Work with Keychain

SSKeychain

Image cache

SDWebImage

Navigation and location tracking

Google Maps

Fields for clients signature

PJRSignatureView

To properly handle different screens with different input methods, we developed our own single component with a flexible data source, data validation, and formatting. You can find this component, called YALField, on our GitHub page.

Algorithm for displaying delivery routes on the map

We had to work out the algorithm that would allow us to trace a delivery truck’s movements using data that included start of delivery time, presumed delivery duration, and delivery route calculated based on Google Maps information.

Each route was divided into a certain number of points (each point having its own coordinates). By treating delivery vehicle speed as a constant and knowing the exact number of points on the map, we calculated the frequency with which a map for each delivery should be refreshed.

For example, if the delivery is expected to take 20 minutes and the route has 40 points, the map should be refreshed every 30 seconds to correctly display the change of coordinates. This way, with every page refresh, the pin on the map that indicates the delivery vehicle’s location moves to the next point on the map.

Successful delivery confirmation and offline mode

A delivery team should be able to confirm an item’s delivery. To do that, they have to get their client’s signature and send it to the server. It should be possible to take a signature and complete an order even if there is no internet connection at the moment.

To enable this feature, we added two status fields — one that contains a value on the server and one that contains a local value. A delivery team sees the local delivery status value. If a request to the server by the mobile app to change the status value is successful, the server value is replaced with the local value. If the request fails, then the existing server value remains.

In the app, there is also a background service that monitors the internet connection status. When there is an active internet connection, the server queries the local database looking for delivery orders whose local and server values are different. If any are found, they are synchronized between the phone and the server.

#

Results

Brilliant Move

Software product ecosystem for on-demand delivery
Order tracking and order history
Customer app
Order management and navigation
Delivery crew app
Access management and order distribution
Web admin panel

Use our expertise to create an on-demand delivery solution

With a dedicated delivery and logistics development unit, we can create a perfectly tailored solution for your business needs.

Contact us