Inspiration
Nearly 11 million undocumented immigrants in the United States face the constant threat of ICE enforcement — often with no warning, no legal guidance, and no way to alert their families in time. When an officer knocks on your door, you have seconds to respond. Most people don't know they have the right to remain silent, the right to refuse entry without a signed warrant, or the right to contact a lawyer.
We built Warrant because that information should be one tap away — not buried in a PDF, not behind a language barrier, and not dependent on having a WiFi connection.
What it does
Warrant is a real-time safety app for immigrant communities facing ICE enforcement.
- Live heatmap — shows ICE activity in your area sourced from AI-verified Reddit and Google News reports, updating every 15 minutes
- Panic button — hold to record your situation, and Warrant instantly explains your legal rights in plain English and Spanish powered by Claude AI
- Emergency SMS — simultaneously alerts your pre-saved contacts and lawyer the moment you activate the panic button
- Offline mode — your rights scripts and last known map are cached locally so Warrant works even when your connection is cut
How we built it
We built Warrant as a React PWA monorepo with three clear ownership lanes:
| Owner | Responsibility |
|---|---|
| Evan | React PWA, Mapbox GL JS heatmap, offline service worker, UI design |
| Zakari | Express, Socket.io, MongoDB Atlas, Reddit + Google News scraper, Claude location parser |
| Brandon | Whisper API transcription, Claude legal assistant, Twilio SMS dispatch |
The three layers connect through a shared Socket.io event contract and a Redux store. Before writing a single line of code, we agreed on one data shape:
{
"lat": Number,
"lng": Number,
"score": Number,
"source": "reddit | news | panic",
"summary": String,
"timestamp": Date
}
That contract let all three of us build in parallel and integrate cleanly at hour 8.
Key technical decisions:
- MongoDB Atlas TTL index auto-expires reports after 2 hours so the map stays current
- Mapbox heatmap opacity interpolates with zoom level — at zoom 7 you see density blobs, at zoom 14 individual pins appear
- Claude scores each scraped post for credibility from 0–1 and filters anything below 0.4 before it ever reaches the map
- IndexedDB caches rights scripts and map tiles so the core features survive offline
Challenges we ran into
Integration timing — three independently built systems coming together in hour 8 of a 24-hour hackathon with no integration bugs is the hardest coordination challenge we've faced. The shared contract saved us.
Whisper API latency — transcription takes 2–4 seconds. We had to design a processing state that felt intentional and calm rather than broken — important for a user who may already be frightened.
Heatmap + pin layer transition — getting the two Mapbox layers to fade in and out cleanly at the right zoom levels took several iterations of the interpolation expressions.
Scope — we had to ruthlessly cut features to ship something polished. A polished core beats a broken everything.
Accomplishments that we're proud of
- ✅ The panic button works end to end — hold, speak, get legal guidance in two languages, contacts notified, all in under 10 seconds
- ✅ The app works fully offline with cached map tiles and rights scripts
- ✅ The heatmap updates live as new verified reports come in via Socket.io
- ✅ It looks and feels like a real product, not a hackathon project
What we learned
Claude is remarkably capable at structured extraction. Parsing a noisy Reddit post to extract { city, state, lat, lng } and scoring its credibility — two tasks we weren't sure were feasible in a hackathon timeline — both worked reliably.
Design is a multiplier. The same data presented poorly loses. We spent real time on the UI before writing logic, and it paid off on stage.
Agree on contracts before writing code. The single best decision we made all weekend was defining the shared data shape before any of us touched a keyboard.
What's next for Warrant
- Navigation — route you away from areas with active reports in real time
- Share location — let trusted contacts track your whereabouts during an enforcement event without you sending a message
- Smartwatch integration — the panic button on your wrist, because in a real encounter reaching for your phone may not be an option
- Verified legal partnerships — jurisdiction-specific rights content maintained by actual immigration attorneys
- Community moderation — a network of verified moderators who can confirm or dismiss reports in real time
- Push notifications — alert you to nearby activity without opening the app
Built With
- claudeapi
- css
- express.js
- html
- javascript
- mapbox
- mongodb
- node.js
- react
- redditjsonapi
- socket.io
- vite
- whisperapi
- workbox

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