Note
I have access controls implemented on the app. Default users will not be able to manually trigger report generation. Please reach out to [email protected] in order to have me elevate your access!
Inspiration
When my friend Martin and I first discussed building something meaningful with real-time geospatial data, we were struck by how cities like New York generate massive amounts of digital signals—from social media posts to 311 complaints—but lack intelligent systems to synthesize this information into actionable insights. We envisioned an AI-powered intelligence analyst that never sleeps, constantly monitoring the city's digital pulse to help officials and emergency responders understand emerging situations before they escalate. The idea of combining multi-agent AI coordination with real-time urban data streams felt like the future of smart city technology.
What it does
NYC Monitor is an intelligent investigation system that continuously watches over New York City through Reddit discussions, 311 complaints, Twitter posts, and news feeds. Every 15 minutes, our system (monitor agent) automatically collects and triages new alerts, assigning severity scores and detecting patterns. When critical situations emerge, users can trigger deep investigations where a specialized AI agent performs comprehensive analysis—conducting targeted web searches to gather real-time information, generating satellite maps for geographic context, collecting visual evidence from multiple sources, and synthesizing findings into professional Google Slides briefings. The system features an interactive map with real-time filtering, role-based access controls, and can generate comprehensive investigation reports with collected artifacts.
How we built it
We architected NYC Monitor as a cloud-native system using Google Cloud Platform with Google's Agent Development Kit (ADK) and Gemini 2.0 Flash Experimental model powering our intelligent investigation workflow. The backend leverages FastAPI with Firestore for real-time alert storage (and not yet implemented: BigQuery for analytics, and Vertex AI Vector DB for semantic search across collected content). Our investigation agent uses sophisticated tool calling to access different data sources—performing DuckDuckGo web searches with Google Custom Search fallback, generating satellite maps at multiple zoom levels, collecting images through targeted queries, and creating presentations with all artifacts. The investigation agent features intelligent deduplication using difflib for 85% similarity matching, confidence scoring based on evidence quality, and sophisticated findings extraction from web search results. The frontend is built with React, featuring an interactive Mapbox visualization with priority-based color coding and real-time filtering. We implemented role-based authentication, smart caching with 5-minute TTLs, and direct Google Slides API integration for automated report generation.
Challenges we ran into
One of our biggest challenges was managing the complexity of multi-agent coordination without creating bottlenecks or infinite loops. Iterating on the orchestration logic was kind of a bottleneck and so we had to pare it down do a minimal version of our grand vision in order to get an end to end solution working properly. In the end out solution is more of a distributed agent system with elements of a multi-agent (collaborative investigations) system.
Accomplishments that we're proud of
We're most proud of achieving an end to end system multi-agent system: different agents responsible for different tasks. Also proud of the engaging user interface and the ability to interact with near-time data, and actually produce useful artifacts: gslides reports.
What we learned
Building NYC Monitor taught us that working with agents remains difficult. A thoughtful approach to limiting the scope of tasks and tools remains very important in getting repeatable outcomes.
What's next for NYC-Monitor
Definitely delivering on the initial vision: an agent that dives deeper into investigations, integrates with datasets, is able to take snapshots of them etc. Additionally part of our distributed agent system are analysis/insights rollups: at a weekly interval, scanning generated reports and stats, and producing high level insights. Lastly and probably a very key addition would be to actually add an interface for users to actually chat with the corpus of data our agents amass over time: a bit of RAG.
Built With
- adk
- agent-sdk
- cloud-storage
- cloudrun
- cloudscheduler
- duckduckgo
- fast-api
- firestore
- gcp
- google-maps
- google-search-api
- gslides
- mapbox
- python
- react
- vertex-ai
Log in or sign up for Devpost to join the conversation.