📅 December 18, 2019
•⏱️2 min read
The purpose of this project was to create a comprehensive tool which governemnts and agencies could use to track their delivery plans.
The tool was initially meant to only be deployed in a single office in Sierra Leone, however, due to its popularity, we quickly found out that it could be used as a Software as a Service.
I built this tool in an iterative fashion - first starting with a Django web-app which uses a PostgreSQL database and HTML/CSS/JS front-end, and gradually shifting over to building new parts of the application using React.
The tool consists of two parts:
The unique environment in which this tool would be deployed meant that I had to take a number of things into consideration:
I solved this by making uploading new Milestones to the system very easy. Users can fill in an Excel template with the Milestone data, and upload it to the system (via Amazon S3). The filled-in in sheet is then parsed, and Milestones are extracted and automatically added to the system.
Furthermore, dynamic datasets can be added to the dashboard via Google Sheets - user can create a graph in Google Sheets and import the iframe using the tool's CMS.
As a result, using the Django Administrator Panel, admin users can strictly control who has viewing or content management rights for which parts of the tool. A Principal User role was also created, which is allowed to assign actions to other users within the system.
Users who are assigned to a Milestone can suggest edits to it (e.g. a change in status from delayed to completed or an update post), but that update will only be taken effect once it has been approved by a content manager.
I solved this by using Heroku's Pipeline feature, along with CI from GitHub. When launching a new feature, I can push it to all 20 instances of the Delivery Tool with the click of a button!
The Action Tracker also has an accompanying smartphone app, which I built for iOS and Android using Ionic React.
The source code for this project cannot be shared, but please view the screencast at the top of the post!