Kevin Amézaga                          

  Back to Projects   Home   Career   Skills   About   Press

  Mobile Miami Coalition

May 2021

So let's talk a little bit about why I built this web app:

  • The Issue
    • The scooter program in District 2 of the City of Miami lacked a streamlined means of communication between residents, business owners, and scooter operators.
    • Due to the program allowing too many companies, complaints of scooters mounted on social media and frustrated residents had no avenue to report violations but to send them to local officials.
  • The Band-Aid
    • At the Miami Riders Alliance, we crafted a band-aid solution to get everybody in the micromobility space on the same page. Beginning in December of 2020, we launched the Mobile Miami Coalition to bring together all of the scooter operators together to not only communicate, but to self-regulate. Together, we have instituted slow zones, no parking zones, deployment best practices, and this scooter reporting tool.

This scooter reporting platform is built to empower members of the community to report violations and it works like this:

  1. Someone reports a scooter violation at
  2. Our team receives an email alert and Slack notification
  3. We accept or reject the report as a violation of the City's rules and regulations. If we reject the report, we have to provide a reason. Once we accept or reject, the user receives a determination email alert
  4. Once the report has been accepted, all operators' registered users receive an email and slack notification that there is a report pending for their fleet. They have two hours to fix the report per city code
  5. The operator's operations team will login to the portal (image below) to enter a fix into the system.
  6. If two hours elapse without a fix entered into the system, then the chron job that runs every five minutes will close any reports still open past their grace period.
  7. If the report is closed with no fix, then the chron job will send a notification to the submitter, the operator's team, and our staff that the report was added to the operator's grade.
  8. The chron job then calculates all of the violations and their respective weights and deducts points from each operator. The algorithm also factors in time since the violation occurred and weights the violation differently.
  9. Each operator has a publicly-accessible grade that can be viewed at

So what did it take to make this?

I had to:

  • Master Craft CMS to manage all of the reports coming in
  • Learn to use Solspace Freeform to take the form data and connect it to entry objects in Craft CMS
  • Create a custom plugin using PHP to handle user actions like accepting/rejecting reports, fixes for violations, and more
  • Create transactional templates that are used to send users information about reports' status
  • Create a tracking system using reports' unique IDs to allow users to learn more about their report
  • Use email relay servers to ensure deliverability of email notifications (in this case, we use Craft CMS's mailer to generate a template using Twig and send out via Microsoft Exchange's servers)
  • Integrate Slack webhooks to deliver notifications to our partners at the scooter operators
  • Design a user interface and manage granular user permissions to allow operators to enter fixes for reported violations and volunteers for the Riders Alliance to accept or reject reports

  View Project Live