Freetown City Council - Find me in Freetown

📅 October 01, 2019

⏱️3 min read

During my 5 month secondment to the Freetown City Council, I spent my spare-time working on a side project called "Find Me In Freetown".

As a part of her plan to transform Sierra Leone's capital, Mayor Yvonne Aki-Sawyerr wants to empower and educate her citizens through the use of digital tools.

The city of Freetown is split up into 47 administrative sections - called "wards". Each ward has a political representative - called a councillor - which is elected by the communities inside each ward.

However, due to Freetown's poor infrastructure and communication networks, very few citizens actually know which ward they live in, or who their councillor is. With the amount of smartphone usage rising at a rapid pace inside the city, I saw an oppurtinity to create a simple web-app that would inform people which ward they were in, and would allow them to easily get in touch with their councillor.

Using a shapefile containing coordinate data on the 47 wards, I created a web-app using Flask and HTML/CSS/JS which has the following functionality:

  • Users can visit the app at findmeinfreetown.com

  • They are met with an interactive Google Map, with an overlay of the 47 wards in Freetown

  • When clicking on one of the wards, a popup appears with a link to that ward's page on the Freetown City Council website ( which I also helped build )

  • Users can click the geolocation button, which triggers HTML5 geolocation. If a set of coordinates are found, they are sent via AJAX to the Flask API, which checks which ward the user is in, using the geopandas Python module.

  • If the user is in a ward, the map pans to said ward and a pin appears showing the users position inside the ward. A link also appears which takes users to the page for that ward on the Freetown City Council website.

My first project at the City Council was to create a registration tool and dashboard for the waste collectors in Freetown. Once the FindMeInFreetown web app was completed, the Mayor asked me to integrate the information from the waste collector database to the FindMeInFreetown app.

I thus created another Flask API, which interacts with a database where the waste collector data is stored. During the registration process we had noted down which wards each waste collector operated in - I hence had to create an algorithm which would output a JSON that had a list of waste collectors in each ward. To save on performance, I used a daily worker to do this computation on a daily basis (since the list of collectors hardly changes), and store the data in a .json file in the API repo.

The FindMeInFreetown web app was then modified to also call the waste collector API whenever a ward was selected - and to make a list of waste collectors operating in that ward available. Thereby, citizens can easily find a business in their area to pick up their trash (which is one of the biggest problems in Freetown...).

The source code to the web app can be found here, and the web app itself can be found at findmeinfreetown.com

A few months after finalizing the web app, I decided to make a mobile native version of the tool, using Ionic React. The app communicates with the same APIs as the web app, and has almost identical functionality. Key differences are that it uses the native geolocation plugins, and the native call plugin to allow users to quickly call up waste providers in their area without having to copy/paste the number.

You can find the app on the Google Play Store here.

The GitHub repo for the Ionic React app, along with iOS and android compilations, can be found here