Neighbor Needs — Devpost Submission
Inspiration
When a wildfire, flood, or earthquake hits, the first 72 hours are the most critical — and official emergency services are almost always overwhelmed. We kept asking ourselves: what if your neighbor has a generator, medical training, or a spare room, but you just don't know? That question became Neighbor Needs. We wanted to make the invisible safety net of a neighborhood visible, without compromising the privacy that makes people willing to share in the first place.
What it does
Neighbor Needs is a neighborhood disaster resilience skills map. Residents register their:
- Skills — medical, construction, mechanical, language interpretation, etc.
- Equipment — generators, chainsaws, first aid kits, water purification
- Shelter capacity — spare rooms, accessible spaces
In normal mode, neighbor locations are anonymized and contact info is hidden. When an emergency is declared, the map activates within an affected radius: pins turn red, contact information becomes visible to nearby neighbors, and help requests begin flowing — turning a passive directory into a real-time mutual aid network.
How we built it
Frontend
We built a React + TypeScript frontend with TailwindCSS v4 for styling and a set of shadcn-style UI primitives backed by Radix UI. The map uses CSS-based lat/lng positioning to simulate neighbor proximity:
offsetX = (lng − center.lng) × 400
offsetY = (lat − center.lat) × 400
Backend
We built a Go backend using Gin for routing and pgx/v5 for PostgreSQL connections. Authentication uses JWT access tokens (15min TTL) with device-bound refresh token rotation, and passwords are hashed with bcrypt. The database uses PostGIS for geospatial queries-ST_DWithin powers the proximity search that finds neighbors within a configurable radius. Configuration is managed via Viper from a YAML file, and structured logging uses Zap. The service layer pattern collapses handlers and business logic into single-file services for auth, user profiles, discovery, and emergency coordination.
Mobile Apps
We built a SvelteKit + TypeScript mobile app with TailwindCSS v4 and shadcn-svelte components, wrapped in a Tauri 2 shell for cross-platform native deployment. The map uses Leaflet with OpenStreetMap tiles for neighbor visualization, and Lucide icons provide UI iconography. The static adapter builds a self-contained bundle that Tauri serves from its local webview, enabling offline-first operation. Tauri commands expose native system capabilities like desktop notifications for emergency alerts, while the Rust backend handles platform-specific integrations. The mobile prototype mirrors the web frontend's data model with mocked responses in the Svelte pages.
Challenges we ran into
The hardest problem was the privacy-utility tradeoff. Showing too much by default erodes the trust needed for adoption. Showing too little during an emergency costs lives. We landed on a two-mode system where privacy escalation — revealing phone numbers and precise coordinates — is:
- Gated behind an explicit emergency declaration
- Scoped to a geographic radius, not broadcast globally
- Designed to move fully server-side in production, so the frontend never receives data it shouldn't render
We also had to think carefully about abuse vectors: a fake emergency declaration, or a bad actor registering false skills. These informed our "What's next" roadmap around verified registration.
Accomplishments that we're proud of
The emergency mode UX. A single toggle transforms the entire interface — banner color, pin states, sidebar content, and contact visibility — so the shift from normal to crisis feels immediate and unambiguous. We're also proud of designing a privacy model that doesn't treat safety and discretion as opposites. End-to-end encryption for communication between the client and server was also a big accomplishment.
What we learned
Hyperlocal tools need to earn trust before they need to earn adoption.
The constraints we almost removed — anonymizing by default, scoping visibility by radius — turned out to be the most important features. We also learned that geospatial privacy is genuinely hard: even anonymized pin clusters can reveal home locations if the anonymization radius is too small.
What's next for Neighbor Needs
- Verified registration via SMS or community vouching to prevent misuse
- Server-side privacy escalation so precise location data never leaves the backend until an emergency is active
- Offline-first mode via the Tauri shell, so the app works when cell networks are congested
- Pilot program with a real neighborhood association or CERT team
Built With
- golang
- leaflet.js
- ngnix
- openstreetmap
- postgis
- react
- shadcn
- svelte
- tauri
- typescript
Log in or sign up for Devpost to join the conversation.