Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

License Community Hacktoberfest

Fair Change Solution Starter

This solution starter was created by technologists from IBM. The goal of this starter kit is to provide a solution for the theme of Police & Judicial Reform and Accountability.


Product Managers:

  • John Handy Bosma (Boz)
  • James Stewart


  • Jodith Fecadu Tefferi
  • Cyril Grant

User Researchers & SMEs:

  • Tessa Olson
  • Jan Sinclair
  • Chantelle Omotosho
  • Denise Knorr
  • Enoch Antwi
  • Jimi Agoro
  • Avian Briscoe
  • Cedric Cook
  • Sabine Justilien
  • Otis Smart


  • Kyleni Rivers

  • Niall Cargill

  • Brandon Davis

  • David Zuniga Rojas

  • Simeon Charles

  • Special thanks to Pooja Mistry, Developer Advocate


  1. Overview
  2. Video
  3. The idea
  4. How it works
  5. Diagrams
  6. Documents
  7. Datasets
  8. Technology
  9. Getting started
  10. Disclosures
  11. License


What's the problem?

"Racism isn't getting worse, it's getting filmed." - Will Smith.

The sad reality is that police interactions with members of the Black community disproportionately end in unnecessary and avoidable escalation. Unless such interactions are captured, catalogued, and analyzed, informed change, re-education, and true reform will not be possible.

Whether related to routine traffic stops, stop and search, or other scenarios, we aim to use technology for good to capture real-world data, provide insights, and make recommendations that will drive racial equality. The key intentions behind this solution starter are to help enable transparency, re-education, and reform as a matter of public interest and public safety.

The solution forms the foundation for a social and racial justice platform by empowering communities to capture incidents between police and contacted people (for all racial groups), unify incident data from various sources, and gain insights from incident data within a location and/or across locations to aid education and reform. Prospectively, ultimate outcomes of this data-driven solution include accountability and education of law enforcement officers to perform their duties without bias as well as information for individuals, communities, and cities to avoid, deescalate, and eliminate dangerous encounters.

At the heart of the solution resides an intelligent visualisation system, based around a map view that makes it easy for users to find single or grouped incidents. To facilitate the capture of incidents, a mobile application has been created with the ability to capture incidents on behalf of a "contacted person" or an “upstander.” The solution starter also contains an API that could be used to capture data from additional sources such as existing mobile applications.

We're putting the tools in your hands, and our intention is for developers and adopters to use the solution in a responsible, safe, and privacy-preserving manner.


Introducing Fair Change

The idea


We are team "Fair Change." The inspiration behind this starter kit comes from the experiences of some of our team members who have been subject to unprovoked physical mistreatment, harassment, campaigns, and racial abuse from police officers or members of the public who intend to "weaponise" the police against Black and minority individuals or communities. As we shared our experiences, it became evident to our diverse team residing in both the UK and US that the mistreatment of Black communities by the police is widespread.

At the same time, we recognized that this is a very complex issue. The job of police officers who genuinely want to serve and protect the community can inherently be made more difficult based on their peers' actions. This can diminish the overall trust between the police force and the public.

The goal of this solution starter is to create a solution that could aid in the avoidance and de-escalation of incidents, and provide visibility and opportunities for long-term education for reform.

At a high level, the Fair Change solution starter can:

  • Enable members of the public to record incidents through a mobile app in a quick, near real time, and safe manner
  • Capture data such as geo-location, timestamp, incident description, video and audio recordings, and potential details such as officer ID numbers
  • Save and map data on a web application for reporting and future AI analysis (AI is a roadmap item at this stage)

While we recognize that our solution cannot address all of the complex challenges in current law enforcement practices, we hope that the solution presented in this solution starter can:

  • Encourage members of the public to capture incidents that might otherwise go unwitnessed
  • Display patterns and correlations of incidents that can be grouped by time, location, and type to better understand the scenario.
  • Inspire developers to shed light on this issue and provide them a starting point to develop future reform functionalities
  • Educate police officers, community members, and corporate partners on the issues of racial injustice, police reform, and accountability

How it works

To illustrate how the solution works, we have included explanations, diagrams, and tutorials that feature IBM Cloud Object Storage and an IBM Cloudant database. References to these and other IBM offerings are provided for illustrative purposes only. Additional work needs to be done for implementing the solution on IBM Cloud.

The solution itself focuses on the core functionality of being able to take incident alerts and video recordings from the mobile app and post them into the back-end system. Once posted, the incident will appear on the map view and can be clicked to reveal more information. For privacy reasons, the intent is not to show the videos within the web application, just the location, time, and type of incident. However, the video is stored (encrypted on IBM Cloud Object Storage) to enable future AI analysis to take place. Here is a high-level flow:

  • The user captures video, geo-coordinates, the timestamp, and an incident description using the mobile application.
  • The video and other data is transferred securely to the back end via the API.
  • Video is stored in IBM Cloud Object Storage and the other data is stored in the Cloudant database.
  • The web application facilitates the viewing of incident related data held in the database via the API.


  1. User launches mobile application, records a video, and submits incident data.

  2. The geocode, timestamp, description, and video are all passed to the back end with a POST api/upload call, which writes JSON to the Cloudant database and video directly to IBM Cloud Object Storage. Video data is stored in the IBM Cloud Object Storage. The geocode, timestamp, and description are all stored in the Cloudant database

  3. The incident captured by the mobile device and the data saved to IBM Cloud Object Storage and Cloudant can be viewed on a map in the Node.js web application.

  4. User can click on the geocode data on the map in the web application to view more detail related to that incident such as timestamp, description, and location.


Tutorials and documentation:

Data sets


IBM technology (for example purposes only)

Adopters of the code can choose the deployment option that is right for them. We anticipate additional choices being made available as described here.

Open source technology

Getting started


Register for an IBM Cloud account. For the purpose of this example, we are using an IBM Cloud account with the associated IBM Cloud Services (Cloud Object Storage and Cloudant).

Provision instance of Cloud Object Storage on IBM Cloud

Log in to IBM Cloud and provision an IBM Cloud Object Storage Service.

Step 1. From the IBM Cloud catalog, search for an instance of Object Storage.

Step 2. Give your service a name, and create a Lite version of the service.

Step 3. After you have the IBM Cloud Object Storage service created, go to your service in your Dashboard, and click on Create a bucket in the Getting Started tab.

Step 4. Click on Create a Custom Bucket. Give your bucket a unique name, and select Smart Tier. Create Bucket.

Step 5. Go to the Service Credentials tab, and click on New Credential. Give your Service Credentials a name. Select role as Writer. Select Advanced Options, and set Include HMAC Credential as ON. Add your service credentials.

Step 6. Take a note of your service credentials for the Web Appliciation back end.

Provision instance of Cloudant on IBM Cloud

Step 1. Go back to the IBM Cloud catalog, and search for an instance of Cloudant.

Step2. Give the service a name, and create a Lite instance of Cloudant.

Step 3. After your instance of Cloudant is created, click on Launch Dashboard.

Step 4. After the Cloudant Dashboard is lauched, click Create Database.

Step 5. Give database a name, and select Non-partitioned. Click Create.


Step 6. Go back to the Cloudant service page, and create New Service Credentials. Select the role as Manager, and take a note of your service credentials for the Web Appliciation back end.

Web Appliciation back end

The back end is built in Node.js, and handles the following:

  • Writing of data from the mobile app to the Cloudant DB
  • Writing of video from the mobile app to IBM Cloud Object Storage
  • Reading of data by the Fair Change website to populate the map view and also to view further data related to an incident / video URL

Follow these instructions for setting up the web application's back end.

Web Appliciation front end

The main purpose of the Fair Change website is to host the map view and search capability. The map is built using Google Maps, and the site itself is built using React.

Follow these instructions for setting up the web application's front end.

Mobile app

The mobile application is built using React Native and will run on either iOS or Android. The purpose of the mobile app is to record real-time incidents and to submit this data to the Fair Change Incident directory.

Follow these instructions for setting up mobile app.



This solution starter is made available under the Apache LICENSE.


Mobile application to capture incidents / provide information to police officers aimed at avoiding escalation, central map view to enable search & visualization of incident clusters