Inspiration
Recall Me Maybe was inspired by the rising frequency of food and product safety incidents and the growing number of people affected by them. In a government review of 30 food recalls, companies took an average of 57 days to initiate a recall after the FDA was notified of a potential safety issue, with some cases taking months. Meanwhile, in 2025, the CPSC issued a record 542 recalls and safety warnings - 32% more than the previous year - affecting roughly 26 million products.
Too often, individuals fall victim to foodborne illnesses because of the gap between online community reports and official announcements or regulatory feeds. Official recalls are critical, but they can arrive after consumers have already begun reporting problems, and their technical language is not always accessible to the average consumer. Meanwhile, first-person illness reports are scattered across platforms like iWasPoisoned, Reddit, X, and FDA adverse-event data, with no centralized way to continuously monitor them. Existing apps either reprint agency notices or reduce complex information to a single, opaque “danger score.” We wanted to build a centralized platform that helps consumers stay informed: official notices stay official, community signal spikes are labeled as points of concern, and unofficial reports only appear when backed by a real URL and recent date.
Takeaways
Developing this project taught us a tremendous amount about the complexities of public food-safety data, which is inherently messy, fragmented across different agencies, and reliant on varying recency rules and product identities.We also learned that enforcing a strict fail-closed evidence contract, requiring a valid source URL and a recent date, is the difference between a safety tool and unreliable rumors.
Challenges We Faced
Our greatest struggles involved looking for and accessing reliable sources beyond the FDA to capture the broader picture from the online community:
Anti-Bot Protections: iWasPoisoned blocks plain HTTP clients, requiring us to implement grocery listing crawls via Playwright.
Akamai Blocking: The USDA-FSIS site occasionally blocks automated requests with 403 errors, so we engineered fallbacks to public-domain CSVs and Wayback snapshots rather than inventing notices.
Data Lags & Hallucinations: CAERS data lags wall-clock time, requiring spike velocity to anchor on the newest ingested report to keep the shelf accurate. Additionally, web search providers frequently hallucinate URLs; our evidence contract had to reject anything lacking a real, recent source_url. We also had to prevent scrape timestamps from being mislabeled as complaint dates and ensure CAERS volumes were never mischaracterized as official FDA recalls.
Building Process
We built Recall Me Maybe as an intelligent, community driven, food-safety app leveraging a modular data ingestion pipeline and a modern tech stack:
Backend & API: Built using Python 3, FastAPI, Uvicorn, and SQLAlchemy. Request validation is handled by Pydantic, and authentication is secured via AWS Cognito (Amplify on the client and PyJWT JWKS verification on the server). Data is stored locally in SQLite by default, with optional support for PostgreSQL and Supabase.
Data Ingestion & Sources: Modular connectors under backend/app/data_sources/ pull live data from openFDA enforcement and CAERS, USDA-FSIS, FDA outbreak HTML tables, CPSC SaferProducts, and Playwright-driven crawls of iWasPoisoned grocery listings.
AI & Search Waterfall: We implemented a search waterfall utilizing Exa, Brave Search, Google Gemini, and OpenAI. A specialized five-agent discovery pipeline generates niche queries, searches, fetches pages, triages first-person evidence, and clusters reports by city. Spike mathematics are handled deterministically in code, while Gemini is reserved for titles, extraction, query generation, and spike summaries.
Community & X Integration: OpenAI text-embedding-3-small (with a hashed lexical fallback) collapses near-duplicate complaints. Furthermore, we utilized xAI Grok's x_search tool to sweep recent first-person X posts, ensuring we keep only the status URLs that the tool explicitly cited.
Frontend & Mapping: The frontend is powered by Next.js 15 (App Router, React 19, TypeScript, and Tailwind CSS 4). Maps are rendered using Leaflet on Esri (or optional CARTO) tiles, with city-level geocoding handled via Open-Meteo.
Built With
- amazon-cognito
- amazon-web-services
- exa
- fastapi
- figma
- google-gemini
- grok
- leaflet.js
- nextjs
- numpy
- openai
- openstreetmap
- playwright
- pydantic
- pyjwt
- python
- react
- sqlalchemy
- sqlite
- supabase
- tailwindcss
- typescript
- uvicorn
- xai
Log in or sign up for Devpost to join the conversation.