Fair Change: Equipping communities with data, analytics, and insights to educate and empower police reform

“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, cataloged, 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, this project aims to use technology for good to capture real-world data, provide insights, and make recommendations that can drive racial equality. The key intentions behind this project 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 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 core of this project is an intelligent visualization system, which is based around a map view that makes it easy for users to find single or grouped incidents. To facilitate the capture of incidents, the solution uses a mobile application that has the ability to capture incidents on behalf of a “contacted person” or an “upstander.” The solution also contains an API that can be used to capture data from additional sources such as existing mobile applications.

At a high level, the Fair Change project 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)


How it works

The project focuses on the core function of being able to take incident alerts and video recordings from the mobile app and post them into the back-end system. After it’s posted, the incident appears on the map view and can be selected 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. Here is a high-level flow:

  1. The user captures video, geo-coordinates, a timestamp, and an incident description using the mobile application.
  2. The video and other data is transferred securely to the back end through the API.
  3. The video is stored in IBM Cloud® Object Storage, and the other data is stored in an IBM Cloudant® database.
  4. The web application facilitates the viewing of incident-related data that is held in the database using the API.


  1. Register for an IBM Cloud® account, and at the same time join the Call for Code community of over 400,000 developers to build new skills and contribute to racial justice open source projects.

    Note: This tutorial uses an IBM Cloud account with associated IBM Cloud Services (IBM Cloud Object Storage and an IBM Cloudant® database). However, you can choose the deployment option that is right for you.

  2. Get the code.

Estimated time

It should take you approximately 30 minutes to complete this tutorial.

Architecture diagram

Architecture diagram

  1. The user launches the mobile application, records a video, and submits incident data.
  2. The geocode, timestamp, description, and video are passed to the back end with a POST api/upload call, which writes the JSON code to the Cloudant database and sends the video directly to IBM Cloud Object Storage.
  3. The incident that is captured by the mobile device and the data that is saved in IBM Cloud Object Storage and Cloudant can be viewed on a map in the Node.js web application.
  4. The user can click on the geocode data on the map in the web application to view more detail related to that incident.


The example in this tutorial is shown using IBM technology. However, you can choose the deployment option that is right for you.

Provision an instance of IBM Cloud Object Storage

  1. Log in to your IBM Cloud account.

  2. Search for an instance of Object Storage in the Catalog.

    Finding Object Storage

  3. Name your service, select the Lite version of the service, and click Create.

    Naming the service

  4. Go to your service in your Dashboard, and click Create a bucket under the Getting Started tab.

    Creating a bucket

  5. Click Create a Custom Bucket, give your bucket a unique name, select the Smart Tier storage class, then click Create Bucket.

    Naming the bucket

  6. Go to the Service Credentials tab, and click New Credential. Give your service credential a name, select Writer as the role, select Advanced Options, and set Include HMAC Credential as ON. Click Add to add your service credentials.

    Adding service credentials

  7. Note your Service Credentials for the web application back end.

    Service credentials

Provision an instance of Cloudant

  1. Go back to the IBM Cloud catalog, and search for Cloudant.

    Searching for Cloudant

  2. Name the service, and create a Lite instance of Cloudant.

    Naming the service

  3. Click Launch Dashboard after the Cloudant instance is created.

    Launching the dashboard

  4. Click Create Database.

    Creating the database

  5. Name the database, select Non-partitioned, and click Create.

    Naming the database

  6. Go back to the Cloudant service page and create new service credentials. Select Manager as the role, and note your service credentials for the web application back end.

    Noting service credentials

Additional project components

The Fair Change project includes a web application back end, a web application front end, and a mobile app. Get information on using and setting up those additional components in the Fair Change readme file.


In this tutorial, you’ve set up the foundation to complete and use the Fair Change solution. You set up your IBM Cloud services, and got an overview of how the solution works.

As a developer, you can take a stand and apply your skills and ingenuity to make a difference. Learn how you can be a part of a motivated community of developers and supporters working to evolve the Call for Code for Racial Justice open source solutions.