<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WKXBVFF" height="0" width="0" style="display:none;visibility:hidden"></iframe>

    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:

    Create a user account
    Create new orders
    View a list of orders
    Track orders on the map
    Confirm delivery
    Rate delivery
    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

    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:

    Select the store they bought an item from as the starting point.
    Enter the destination address by finding the location on the map or typing in the address.
    Enter the desired delivery time.
    Indicate the kpmgnumber of items in the delivery.
    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 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.

    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
    Core Data(DB)

    Here are some more solutions we implemented during development:

    Network requests


    Data storage

    Core Data, ADVUserDefaults

    Communication with Core Data


    Data mapping


    Dependency Injection


    Test tools

    XCTest, OCMock

    Component for showing rating


    Date and time Picker


    Work with Keychain


    Image cache


    Navigation and location tracking

    Google Maps

    Fields for clients signature


    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.


    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