Catalytic Crime
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.