Skip to ContentTyler Smith

Catalytic Crime

Catalytic Crime Screenshot

Stack

  • Laravel
  • Livewire
  • Alpine.js
  • Tailwind CSS
  • Jenkins
  • DigitalOcean Spaces
  • Mailgun
  • MailHog
  • Nginx
  • Certbot
  • Docker
  • Docker Compose

Catalytic Crime was built in two weeks as a proof-of-concept for tracking catalytic converter thefts in Bakersfield, CA. I built it after my brother’s catalytic converter was stolen while parked on the street, which left him without a usable car for over a month.

I frequently see posts about local catalytic converter thefts on my Facebook feed that include pictures or videos of the crimes. The idea behind Catalytic Crime was creating a centralized platform where users could submit public reports about the crimes and attach pictures & videos they may have of the incident. Data from user-submitted reports would be combined with police department data so the site could show various insights about catalytic converter thefts in Bakersfield.

Development

During the two weeks that I worked on this project, I completed the following:

  • I containerized the app with separate containers for the PHP web app, the nginx web server, the Node.js dev server, the PostgreSQL database, a testing PostgreSQL database, and MailHog for checking emails in development.
  • I set up auth and account creation with Laravel Breeze.
  • I set up a form for users to create and edit reports using Laravel Livewire that provides server-powered reactivity on the front-end.
  • I set up an admin-approval process for new reports, where admins are notified of new reports via email then can approve them using the web app.
  • I created a paginated reports index page for reports and a single report page.
  • I created a sparce-but-functional UI using Tailwind CSS, along with its form and typography plugins.
  • I set up S3-compatible object storage using DigitalOcean Spaces and configured it for storing user uploads.
  • I wrote integration tests that must pass before the site can deploy.
  • I set up CI/CD with Jenkins deploying to a $5/mo DigitalOcean droplet.

Outcome

Ultimately, I abandoned this project shortly after launching it because I was unable to acquire comprehensive public crime data.

CrimeMapping.com has Bakersfield catalytic converter theft data readily available on its website, but there’s no export feature. Scraping the “print” page using a tool like Puppeteer or Selenium looks like it’s possible, but the site’s terms of service explicitly prohibit scraping.

I opened a Freedom of Information Act (FOIA) request with the city to get the Catalytic Converter theft data that was available from Crime Mapping. Weeks later, I was provided an Excel file that was missing important data fields that Crime Mapping provided.

With this data being slow-to-acquire and incomplete, I decided that it would be prohibitively difficult to provide value on the site without dedicating a significant amount of energy into building a userbase, so I stopped development of the project.