Inspiration
Natural disasters affect millions worldwide, but emergency response teams struggle with fragmented information and inefficient resource coordination. We were inspired to find an order within the chaos by helping responders make better/more informed decisions on where to allocate their resources while also giving the everyday person avenues to help.
What it does
Overwatch is an AI-powered disaster response platform that continuously monitors social media for real-time crisis detection and provides intelligent deployment recommendations. It analyzes social media posts using Google Gemini AI to identify genuine disasters, extract locations, assess severity, and generate personalized action suggestions based on users' registered emergency assets (vehicles, personnel, equipment, medical supplies, etc.)
How we built it
We built a full-stack application using React with TypeScript and Next.js for the frontend, Node.js with Express for the backend, and Supabase for real-time database management and auth. The AI pipeline uses Google Gemini 2.5 Flash for sentiment analysis, location extraction, and intelligent action generation. We integrated Bluesky API for social media monitoring, Leaflet for an interactive map, created our own content filtering to remove political biases, and implemented an asset management system where organizations can register their real emergency resources.
Challenges we ran into
One major challenge we faced was Gemini’s rate limiting. At first, we were sending too many requests too quickly, which caused our token to time out. We solved this by batching multiple posts into a single prompt and asking Gemini to analyze them individually. This approach reduced API calls, saved time, and ultimately made our pipeline far more efficient.
Another issue came from Gemini returning vague location strings such as “Gaza,” “Sudan,” or “America.” These couldn’t be plotted directly on a map, which made the data less actionable. To address this, we built a geocoding system that converted location strings into coordinates, added caching to avoid duplicate API calls, and created fallback databases for frequently mentioned crisis regions.
Midway through development, we also had to pivot from using the Twitter/X API to the Bluesky API. Access restrictions and cost constraints with Twitter/X made it unsustainable for our project. Refactoring our pipeline to handle Bluesky data was a challenge, but it ultimately gave us more flexibility and ensured our system could continue running without hitting roadblocks.
Accomplishments that we're proud of
One accomplishment we’re especially proud of came out of solving Gemini’s rate limiting. By batching posts into a single prompt, we discovered that Gemini performed better at ranking severity. Previously, severity scores were inconsistent, but with the added context of multiple posts, the analysis became much more reliable. What started as a workaround for API limits ended up significantly improving the accuracy of our crisis detection
What we learned
One of the biggest lessons we learned is that raw social media data is far from clean or ready to use. When we first started pulling posts, we quickly realized that a large portion of the content was political noise or completely unrelated to food shortages and crises. This forced us to think critically about how to separate meaningful signals from all the background chatter. Through this, we came to understand the challenges of working with unstructured data at scale and how essential it is to design smart filtering systems. Without this step, any analysis we ran would have been misleading or inaccurate, so it really drove home the value of data preprocessing.
What's next for Overwatch
Next, we want to expand Overwatch into a mobile-first platform for field responders, with offline support, GPS, and real-time reporting. We also plan to strengthen inter-agency coordination and layer in advanced geospatial and AI-driven tools to optimize disaster response on the ground.

Log in or sign up for Devpost to join the conversation.