This is a submission for the MLH x DEV Writing Challenge
What I Built
We built UrbanPulse NYC, an AI-powered hazard detection, reporting, and awareness platform designed to make New York City safer and easier to navigate.
The idea started with a simple problem: New Yorkers encounter potholes, damaged traffic signals, flooding, fallen objects, and other hazards every day, but information about those hazards is often fragmented. Even when one person reports a problem, the people approaching that same hazard may have no idea it is there.
UrbanPulse turns individual observations into shared, real-time awareness.
Users can report hazards with a location and photo, and our AI analyzes the report to identify the hazard, estimate its severity, and determine the relevant city agency. Reports are stored in our hazard database and displayed as pins on a live NYC map, where other users can discover hazards around them.
We also wanted reporting to require as little friction as possible, so we extended UrbanPulse beyond the website and into iMessage. Users can text UrbanPulse to ask about hazards nearby, submit a hazard through natural language, or even send a photo of a hazard with its location.
One of our favorite working examples was sending a photo of a damaged traffic signal through iMessage with:
“This is at Broadway and W 110th St.”
UrbanPulse analyzed the image, recognized the damaged traffic signal, classified it as high severity, geocoded the intersection, created the report, saved the submitted image, routed the issue to DOT, and placed a new pin on our live map. The user then received confirmation directly through iMessage.
Building UrbanPulse taught us a lot about connecting AI models to real application infrastructure. Instead of simply creating an AI chatbot, we learned how to connect natural-language and vision models to geospatial data, databases, messaging services, and a user-facing application.
Our goal: See it. Report it. Avoid it.
Demo
Our demo shows the complete UrbanPulse workflow.
🗺️ Live Hazard Map
UrbanPulse maintains a live map of reported NYC hazards. Users can explore active reports, locations, severity, images, and other information.
📍 Ask About Nearby Hazards
Through iMessage, a user can ask:
“What hazards are near Times Square?”
Photon routes the message into UrbanPulse, which searches our existing hazard database and responds with nearby open hazards.
In one of our tests, UrbanPulse returned two high-severity damaged traffic-signal reports around Broadway and W 42nd Street.
💬 Report Through Natural Language
A user can also text:
“Report a large pothole at Broadway and W 116th St.”
UrbanPulse interprets the message, geocodes the intersection, creates the report in the same database used by the web application, and adds the new hazard to the live map.
The user receives a confirmation such as:
“Filed report #10: large pothole at Broadway and W 116th St. Severity high, routed to DOT.”
📸 Report With a Photo
Our favorite workflow is photo reporting.
A user sends a hazard photo through iMessage along with its location. Grok analyzes the image, UrbanPulse determines what the hazard is, creates the report, stores the submitted image, and adds the hazard to the map.
The entire flow is:
iMessage → Photon → UrbanPulse → Grok → Geocoding → Hazard Database → Live Map → iMessage Confirmation
GitHub: https://github.com/mscl741/urbanpulse-nyc
[Add demo video / screenshots / deployed application link here]
Partner Technologies
Partner technologies became an important part of UrbanPulse rather than being separate additions to the project.
Photon / Spectrum
We used Photon Spectrum to turn iMessage into a two-way interface for UrbanPulse.
Our Spectrum service listens for incoming iMessages and connects those messages to the existing UrbanPulse hazard system. This means Photon is not simply sending notifications — users can actually interact with our application's underlying functionality through Messages.
We implemented three primary workflows:
- Hazard discovery: Ask about hazards near a particular NYC location.
- Text reporting: Describe a hazard and location using natural language and have UrbanPulse create the report.
- Photo reporting: Send an image and location through iMessage and have the image analyzed and turned into an UrbanPulse report.
We particularly liked that Photon allowed us to remove a major point of friction. Someone who encounters a hazard does not necessarily need to open a website, navigate through forms, and manually classify the problem. They can interact with UrbanPulse through a messaging interface they already use.
Grok AI
Grok provides much of the intelligence behind UrbanPulse.
We use Grok for natural-language understanding and hazard analysis, including interpreting user-submitted reports and analyzing hazard photographs.
For photo reporting, Grok's vision capabilities allow UrbanPulse to understand what the user is showing us rather than requiring the user to manually categorize everything.
The result is a workflow where a user can simply send a picture and location and let the system handle much of the remaining work.
Grok Bot / Hazard Helper
We also incorporated Grok into our conversational Hazard Helper experience.
This provides a natural-language layer over UrbanPulse so users can interact with hazard information conversationally rather than only through traditional UI controls.
We were then able to reuse parts of that existing intelligence when connecting Photon, rather than creating an entirely separate hazard system for iMessage.
Cursor
Cursor played a major role in our development workflow, particularly as we integrated the different pieces of the project.
One of the more challenging parts of the hackathon was making our web application, database, Grok pipeline, geocoding system, and Photon messaging service operate as one coherent system without duplicating functionality.
Cursor helped us rapidly understand and modify the codebase while testing these integrations under hackathon time constraints.
One particularly interesting debugging challenge involved NYC intersections. An early photo report correctly understood “Broadway and W 118th St,” but our geocoder placed the pin roughly 1.5 km east because it resolved West 118th Street rather than the actual intersection. We traced the issue and implemented intersection-aware geocoding so subsequent reports could resolve the actual crossing.
That experience was a good reminder that building an AI application involves much more than getting a model to produce the right answer — every component downstream also needs to behave correctly.
Hackathon Experience
We built UrbanPulse NYC at DivHacks at Columbia University.
Our three-person team spent the weekend taking UrbanPulse from an idea about improving urban hazard awareness into a functioning application that combined AI, geospatial data, messaging, computer vision, and a live web interface.
The hackathon environment pushed us to build quickly, divide responsibilities, and continuously integrate everyone's work. As different parts of the application came together, we were able to move beyond our original concept and experiment with ways of making UrbanPulse much easier to access.
One of the most memorable moments was getting the complete iMessage workflow working for the first time.
We sent a real hazard photo through Messages, watched it travel through Photon into UrbanPulse, had Grok identify the hazard, saw the report enter our database and appear as a new pin on the map, and then received the confirmation back through iMessage.
Seeing all of those independent pieces finally operate as one system was the moment UrbanPulse really felt like a product rather than a collection of features.
DivHacks also reinforced something we want to continue exploring after the hackathon: what happens when reporting a problem doesn't just document it, but immediately creates useful information for everyone else?
UrbanPulse is our first step toward that idea — a continuously updating safety layer where one person's observation can help the next person avoid a hazard before they ever encounter it.
UrbanPulse NYC — See it. Report it. Avoid it.
Top comments (2)
Such a cool and unique project Joseph!
Thank you Juan! It will be up and running full time after some fix-ups!