See more case studies

Makani – My Place

LY / makani.ly

A revolutionary GPS navigation app set to change the lives of millions in Libya for the better

We were responsible for:
iOS app development | Android app development | UX/UI Design | Backend development

Registered addresses

Cities

Postal dividers

Why Makani app is a revolutionary solution changing the lives of Libyans for the better

Background: The lack of addressing in Libya

Libya was facing an ever-growing problem – a lack of official addresses paralyzed the economy and stalled innovation. Our client Lamah decided to respond to this problem by creating Makani – a revolutionary GPS navigation app to change the lives of millions in Libya for the better. How?

They divided the biggest Libyan cities into multiple zones and designated each one an alphanumeric postal code. Then, they ascribed a unique number to each home and business. And that was just the beginning of the mapping revolution in Libya.

Lamah’s goal is to accelerate the digital development of Libyan society by providing incomparable innovative solutions. We’re happy that we can participate in this process by delivering digital products that bring our client’s ideas to life.

Our client’s goals:

  • To enable Libyans to accurately search and locate places using a digital map app.
  • Free installation and accessibility of the Makani app on mobile devices (Android and iOS).
  • Providing individual, digital codes instead of geographically descriptive addresses.
  • To make it easier for Libyan businesses to grow and connect, thanks to their presence on the digital map and being easily accessible for clients.

The idea behind the Makani app is one of a kind and unprecedented in Libya, where postal codes barely existed. To be in line with the common concept of addresses in other countries, our app provides individual/digital codes instead of geographically descriptive addresses.

Makani is a mapping revolution in Libya.

Solution: GPS navigation app that gives users detailed and clear addresses for places in Libya

We developed a GPS navigation app that gives users detailed and clear addresses for buildings in Libya, whether they are houses, governmental or private institutions, or even shops, markets, restaurants, and others. The first version of the app was publicly launched in December 2019.

Makani moves Libyans from the use of difficult descriptive addressing to smooth digital addressing and enables the navigation of geographical locations within the country. It helps users to locate places within their region through a digital map that allocates specific postal codes to almost all locations.

This is vital to this society, as they’ve been deprived of such amenity.

The app is available for free on any iOS or Android smartphone, making it finger-tip accessible. Makani is positively rated by its users – in the Apple store at 4.5, on Google 4.2.

In 3 months after launch, the map contains more than 430,000 addresses from nearly 180 cities in Libya. We are constantly developing new features. What’s more, the app’s users are adding new addresses. All in all, the Makani app is growing.

It’s worth stating that Makani brings many opportunities and benefits to businesses in Libya. By providing their addresses, companies are easily accessible to customers. Moreover, various government agencies can access and use their information in the e-government system.

The app does not exclude foreigners from having access to the app or making use of it. With businesses growing and thriving in many parts of the country, connectivity is essential.

We’re in the process of developing another navigation app for our client Lamah.

The scope of the project

UX/UI Design

According to our client’s guidelines, Makani looks the same on both Android and iOS platform. The app supports both dark and light modes, which makes the app user friendly.

What’s more, we’ve created many custom elements that gave the navigation app a unique character. Each category of icons has its own palette of colors that harmonize with each other.

We’re currently implementing a Shimmer skeleton to indicate a loading status.

Android & iOS app

We developed a revolutionary GPS navigation app that gives users detailed and clear addresses for places within Libya through a digital map that allocates specific postal codes to almost all locations.

Makani was publicly launched in December 2019. Now, we are improving the app by implementing new features.

4 months after launch, the map contains more than 430,000 addresses, from nearly 180 cities in Libya, and is positively rated by its users.

Backend

When it came to the API, our scope mainly focused on integrating the mobile apps with Lamah’s addressing data. Doing so was vital for synchronizing data and optimizing address data, which was used for API-based features such as search functionality and points of interest, as well as user-related features, like registrations and address suggestions.

The goal was to design scalable architecture which will allow us to work efficiently on new features, as well as to be prepared for the changes on our client’s addressing data system.

Key features

How we did it

Process from the inside & technologies that we used

We used Google Maps for adding addresses and Mapbox as the main map – its what users will primarily interact with.

One of the client’s requirements was that the app should work offline. To this end, we used a local application server, thanks to which Mapbox uses a map that is locally stitched into the app. For this solution, we used the GCDWebServer library.

Before the start of app development, we chose the technology stack and architecture. Because we had a tight deadline, we chose the well-known and well-proven MVP architecture.

At the beginning, we used our own Observable implementation to introduce reactive programming. However, as the app was growing and new functions were added, our implementation needed more and more improvements.

So, we decided to use RxSwift, which gave us all this out of the box. It facilitates asynchronous work, but also helps set the view state based on the data we have – which is easier and faster, without using a standard pattern.

What’s more, we decided to use a state machine for communication between the map and its subsequent screens. Based on the user’s actions, the next screen to be displayed is already decided, and whether a given screen needs to change something on the map or not.

Language

Swift 5.1

Security

Keychain, CocoapodsKeys

Analytics

Firebase

Push Notifications

Firebase

Crash reporting

Firebase Crashlytics

Networking

Moya

LayoutSDK

SnapKit

Maps

MapBox, Google Maps

Database Toolkit

GRDB

Local map server

GCDWebServer

Continuous Integration

Bitrise

Architecture

MVP+Coordinators

Unit Tests

Quick, Nimble, Snapshot Testing

Process from the inside & technologies that we used

The Android app needed to be very custom. We had to reconcile two things – firstly, all elements of the app must communicate efficiently with the map. Secondly, the code must be clear and of high quality. That’s why we decided to apply custom solutions.

We chose MVI architecture because it allowed us to close the entire app’s business logic in a unidirectional cycle. We didn’t use containers like Fragments for views. Instead, we used views directly. These are provided with a presentation layer and a map view hidden behind simple abstractions, if necessary.

This way, all views can communicate directly with the map without knowing the implementation details or the map provider that is being used. The main help in carrying this task out was Dagger 2 with Inflation-inject module, and Flow from Kotlin coroutines.

We have implemented an edge-to-edge mode in the Android app, so it can be displayed on the entire available screen area on newer devices. When it comes to maps, it looks the same as in the iOS app. To enable the app to work offline, we used the Mock Web Server library.

The iOS and Android devs worked closely together and this approach made the app development process smooth and efficient.

Language

Kotlin

QA Toolkit

FoQA, SquashIt, Chucker

UI Toolkit

Material

Architecture

Flow MVI + Inflation-inject

Networking

OkHttp + Retrofit

Maps

MapBox, GoogleMaps

Database Toolkit

SQLDelight

Local map server

Mock Web Server

Analytics

Firebase

Push Notifications

Firebase

Crash reporting

Firebase Crashlytics

Unit Tests

KoTest, JUnit, AndroidXTest

Continuous Integration/Delivery

Bitrise

Process from the inside & technologies that we used

We divided the app code into multiple modules, based on sub-domains, and kept them separated and decoupled from each other:

  • addressing part – features related to searching addresses;
  • user profile – user-related features;
  • data synchronization – responsible for migrating data from Lamah’s system to the Makani backend;
  • authentication – one of the feature requirements of the application was to implement an authentication provider, which will be used by multiple client applications, so we decoupled authentication from the rest of the API and implemented a solution ready for the single sign-on feature.

Thanks to this separation, we achieved a scalable design that allowed us to work efficiently and adjust the implementation for changing requirements.

To provide high reliability and the possibility of quick changes, we used:

  • Testing on multiple levelsunit-testing – code tests without external dependencies; integration testing – code tests with external dependencies; acceptance testing – black-box tests against the production-like environment (which also run on production);
  • CI and CD practice – during development, we undertake efforts to ensure our code is ready to be deployed on production asap and our process is designed with this in mind. Thanks to high-reliability tests, alongside tests on the production environment, we could deliver the code very frequently and receive quick feedback in return.
Runtime

Node.js

Language

Typescript

Web application framework

Express

Tests

Mocha, Chai, Supertest

Application deployment

AWS Elastic Beanstalk

Database (addressing data)

MySQL

Database (user’s data)

DynamoDB

Infrastructe as a code

Terraform

Continuous Integration

Semaphore CI

Documentation, Acceptance tests

Postman

Process from the inside & technologies that we used

According to our client’s guidelines, the app looks the same on Android and iOS platforms and is consistent with their brandbook. Users can switch between dark and light mode, which makes the app user friendly.

We introduced consistent names for individual screen elements. That made it easier for us to manage the project efficiently and allowed us to adopt the color scheme in both modes.

What’s more, we’ve created many custom elements that gave the app a unique character. Each category of icons has its own palette of colors that harmonize with each other.

Now, we’re implementing a Shimmer effect to indicate a loading status, and make it more user friendly.

Wireframes & designs:

Sketch

Collaboration:

Zeplin, Handoff

Testimonial

Team

We were adjusting the team’s size according to our client’s needs

Makani

Ahmed Alkaloush

Scrum Master

Agnieszka Pazdro

Account Manager

Justyna Solarska

UX/ UI Design

Jakub Lorek

Android developers

Bartłomiej Osmałek
Michał Sikora

iOS Developers

Sebastian Osiński
Damian Włodarczyk

Backend developers

Jakub Janus
Bartosz Skuza

QA Engineer

Maciej Jaskulski

Our client's case studies

More clients

Want to create a GPS navigation app?

Entrust your navigation app development in the best hands

Not ready for an estimate? Attend Product Design Workshop to clarify your vision and prepare the crucial documentation.

Today, navigation apps are becoming more and more popular. If you’re thinking of developing a navigation app, you’re probably asking yourself many questions on how to create a “map app”.

What is a navigation app?

A navigation app is a mobile app that determines your location on a map and navigates you with turn-by-turn directions in real-time to a chosen destination.

The navigation app MVP core features

  • geolocation and navigation –  a map using the GPS system to locate objects is the basis of every navigation app. This allows determining a user’s location within a few meters. Navigation helps users to define the road to the point of destination.
  • voice instructions – thanks to detailing turn-by-turn voice instructions, a driver can focus on the driving instead of looking on to the map
  • authorization and user profile – the feature allows users to write a review about the ride, track the previous ride, communicate with other users, create favorites lists and more.
  • offline tracking – users can use the app without internet access.
  • payment services – you may cooperate with other businesses from your industry like car repairs or gas distribution. For example, they can offer you a mutually beneficial partnership – discounts or a cashback for users if they buy something using your app. This way, you can get reliable partners and an additional source of income.
  • integration with social media – improve user experience, make authorization easier, and share your localization through social media channels

How does a navigation app development process look like?

There are 7 crucial stages of the navigation app development process from a business point of view:

  1. Clarifying the vision
  2. Choosing a partner
  3. Wireframes & Design
  4. Project Kick-off & Setup
  5. App development
  6. Release Preparation
  7. App Maintenance

Read more about every stage in our guide through the mobile app development process.

How to choose the right Navigation App Development Company for your project?

You’ve decided to make an app with a professional navigation app development company. The process of choosing the right partner may seem challenging for businesses or entrepreneurs, especially if you are doing it for the first time.

If you want to pick the best mobile app development company for your GPS navigation app, you’re probably wondering how to do that.

We recommend you to verify a few factors when considering cooperation with a navigation app development company. Here’s a checklist:

  • Check out their portfolio. Have they built products similar to yours? Do they have experience in working with companies from your industry?
  • Check their profile and clients’ reviews on Clutch.co
  • Ask for detailed information about the code. Will you have full ownership of the code created by the company? Will the code be hosted in code repositories like Bitbucket or Github? Make sure the code will be written in English.
  • Learn how they organize the process of navigation app development. What tools do they use? Do they work in Scrum or other Agile frameworks?
  • Consult the Independent Contractor Agreement with a lawyer before signing it.
  • Compare the estimation you get with the estimation from another company.

If you want to learn more about each of the above points, read our guide for businesses on how to choose the best mobile app development company.