About the project
BlindSpot is a community powered safety map that helps people pick safer places to meet. It blends community reports with map signals to recommend nearby spots for common real life situations like meeting a marketplace buyer, going on a first date, or walking at night.
Inspiration
A lot of safety advice online is generic, but real safety is location specific. People already try to meet near places like police stations, busy cafes, or malls, but it is hard to know what is actually around you and what the community has seen there. I wanted a tool that is quick, practical, and driven by real observations, not just assumptions.
What it does Community reports (H3 grid)
Users can click an area on the map and submit:
Camera present or camera absent
A short note
Optional place identity (name, kind, source)
Structured details like indoors, lighting, crowd, time of day, and camera location
AI recommendations
Users can type something like:
"meeting someone from marketplace"
"going to study"
"walking at night"
BlindSpot classifies the intent and suggests nearby places (cafe, mall, police station, etc.) while prioritizing:
Community evidence (yes/no reports + signage)
Distance
Camera markers density from map data
Voice mode
A hands free mode reads the top recommendations aloud and lets the user say:
"option 1", "option 2", "repeat", "new request", or "stop"
Analytics dashboards (Snowflake)
Each report is mirrored into Snowflake to power:
Heatmaps by H3 cell over time
Daily trends (yes/no/signage counts)
Conflict rate and "community confirmed" rollups
Stakeholder friendly views for demo
How I built it Frontend
Next.js + React
MapLibre + DeckGL for map rendering (cells, markers, highlights)
H3 indexing to make report aggregation stable and consistent
Backend (Next.js API routes)
/api/report validates submissions, runs moderation + summary, stores into Postgres, and mirrors into Snowflake
/api/recommend scores nearby places using community evidence, distance, and camera markers, with optional AI reranking
/api/reviews aggregates nearby evidence for a selected location
/api/analytics/* reads Snowflake views for dashboards
Data + AI
Postgres for live app storage
Snowflake for analytics and dashboard views
Gemini for moderation and report summarization
Overpass API to help block private property reports
Challenges
Picking an H3 resolution that is small enough to feel building level but still stable for aggregation
Avoiding wrong place attribution when two places are close (added name matching and careful evidence borrowing)
Snowflake key pair auth and connection reliability under concurrent dashboard queries
What I learned
Structured community data becomes much more useful than unstructured notes
Recommendations feel more trustworthy when the system explains evidence (reports, signage, conflict)
A clean analytics layer (Snowflake views) makes demos and stakeholder conversations way easier
What is next
More report types (lighting hazards, security presence, unsafe patterns)
Stronger anti abuse controls (rate limits, reputation, better moderation)
More dashboard widgets (top hotspots, week over week changes, export)
Built with
TypeScript
Next.js (React, App Router)
MapLibre + react-map-gl
DeckGL
H3 (h3-js)
PostgreSQL
Snowflake
Google Gemini API
Overpass API
ElevenLabs TTS (with browser TTS fallback)
Built With
- api
- app
- browser
- deckgl
- elevenlabs
- gemini
- h3
- h3js
- maplibre
- nextjs
- osm
- overpass
- place
- postgresql
- public
- react
- react-map-gl
- router
- runs-gemini-moderation-+-summary
- scores-them
- snowflake
- stores-in-postgres
- tts
- typescript
Log in or sign up for Devpost to join the conversation.