Inspiration
EchoMap was inspired by:
- Civilian an emergency and crime-focused social network that lets people share real-time safety information with their community
- Snapchat and its approach to social discovery: finding what people around you are sharing in the moment
I wanted to take the idea of location-based content but make it about personal moments rather than emergencies: voice notes that vanish after 24 hours, tied to physical places you have to actually visit to hear.
What it does
EchoMap lets you drop short audio "Echoes" at your current GPS location.
| Feature | Description |
|---|---|
| Discovery Radius | 500 meters — users must be physically nearby |
| Ephemeral | Every echo expires after 24 hours |
| Voice Options | AI-generated via Google Cloud TTS or native microphone recording |
The result: a fleeting, in-the-moment experience where content exists only at the intersection of place + time.
How I built it
Tech Stack:
| Layer | Technology |
|---|---|
| Frontend | Next.js 16 + React 19 + TypeScript |
| Backend | Convex (real-time DB, file storage, actions) |
| Auth | Clerk |
| Maps | Mapbox GL |
| Voice | Google Cloud Text-to-Speech |
| Deployment | OpenNext + Cloudflare Workers |
Core Algorithm — Geohash Spatial Indexing:
1. Encode (lat, lng) → geohash
2. Query 9 surrounding cells via Convex index
3. Refine with Haversine distance formula
4. Return only echoes within 500m radius
This keeps nearby lookups O(1) per cell instead of scanning the entire database.
Development Partner: Built with opencode as a full-stack pairing partner, accelerating everything from Convex function design to Cloudflare deployment configuration.
Challenges I ran into
| Challenge | Solution |
|---|---|
| ElevenLabs blocked my account for "unusual activity" on free tier | Last-minute migration to Google Cloud TTS with retry logic |
| Cloudflare Workers + Next.js 16 incompatibility | Rewrote Clerk proxy middleware for Edge runtime compatibility |
Accomplishments I'm proud of
- Deployed to custom domain echomap.live on Cloudflare
- Built native microphone recording alongside AI voice synthesis
- Implemented geohash-based spatial querying with real algorithmic thinking
- Added expiry countdowns and expandable nearby echoes list
- Maintained a clean, dark map-first interface
- Shipped a working prototype in 36 hours as a solo developer
- First hackathon ever
What I learned
"36 hours ago, I'd never deployed to Cloudflare. Now I have a live app with a custom domain."
Technical:
- Cloudflare Workers vs Vercel, learning about edge runtime constraints, build vs. runtime env vars, Workers deployment model
- Geohash spatial indexing for efficient geo-queries vs. naive distance scans
- Convex's real-time queries + file storage for a social product
Workflow:
- Using opencode as a pairing partner to move faster across backend, deployment, and UI as a solo builder
What's next for EchoMap
| Feature | Description |
|---|---|
| Echo reactions | Lightweight feedback: ha, wow, mood |
| Push notifications | Alert when entering an area with new echoes |
| Echo chains | Reply to an echo, creating location-based conversations |
| Heatmap view | Visualize areas with the most activity |
| Mobile PWA | Native recording/playback experience |
Built With
- clerk
- cloudflare
- convex
- google-cloud-text-to-speech
- mapbox
- nextjs
- tailwindcss
- typescript
Log in or sign up for Devpost to join the conversation.