Inspiration

Every social product forces a single time horizon. Snapchat is all-ephemeral — it forgets everything. Instagram is all-permanent — nothing ever fades. But a place isn't either. A festival stage, a campus quad, a conference floor has a living, recent memory: what's happening now and over the last day, not forever. We wanted the layer in between — where a place remembers just long enough to be useful, and the crowd decides what's worth keeping. The deeper bet: this is fundamentally a database-shaped problem, not a feature problem. "What's worth going over to, right now, near me?" is a question about a high-write stream of geo-tagged, time-decaying events — and a separate question about durable accounts, money, and analytics. Those are two different data shapes. We chose two different AWS databases on purpose.

What it does

Open Sonar and you see a live radar of your surroundings. People drop waypoints — a note, photo, or video — onto colored channels (Events, Food, Music, Social, Safety). Waypoints: - stream in live over WebSockets and are ranked by proximity + freshness;

  • live as long as you choose — the author picks a lifespan (default 15 minutes, up to 24 hours), and life trades against size: the longer a drop lives, the smaller it may be — a byte-hour budget (50 MB at 15m → 3 MB at 24h). Sonar stays ephemeral by design; - gain life from likes — every like adds +5 minutes to a drop's countdown, uncapped, so the crowd keeps the good stuff alive minute by minute.

Two things make it more than a map:

  1. Ask the place — AI summarizes and answers questions over a location's last 24 hours ("What's the vibe at the north stage?" "Where's the shortest food line?").
  2. Likes buy time; sponsors buy permanence — nothing user-posted lasts forever. The only permanent pins are sponsored ones: a paid waypoint that never expires and carries the sponsor's name. Permanence isn't earned by love; it's purchased.

How we built it — the data model is the product

We deployed a polyglot, all-serverless AWS data layer, choosing each database for its access pattern rather than defaulting to one store.

Amazon DynamoDB — the live radar (hot path). Every waypoint is a single-digit-millisecond item write keyed for geo + time. Ephemerality is native: each drop carries a TTL derived from the author's chosen lifespan, so DynamoDB expires dead waypoints itself — no cleanup job, no cron. A like is one conditional UpdateItem that extends expiresAt by +5 minutes (uncapped), so the crowd keeps content alive at write time. The byte-hour budget (50 MB @ 15m → 3 MB @ 24h) is enforced on the write path — lifespan and size
trade against each other before an item is accepted. Proximity + freshness ranking runs off those same hot items, pushed to clients over API Gateway WebSockets + Lambda so the radar updates the instant something drops nearby.

Amazon Aurora DSQL — the system of record. Everything durable lives here, off the hot path: accounts, the sponsorship ledger, and the only permanent objects in the system — sponsored pins bought through Stripe. DSQL's serverless scale-to-zero means the record side costs nothing between bursts while staying strongly consistent for money and analytics. Ephemeral geo-writes in DynamoDB, durable state in DSQL — that's the "two databases on purpose" bet: two data shapes, two engines, one clean seam.

Amazon Bedrock (Claude Haiku) — "ask the place." A Lambda pulls a location's last-24h waypoints from DynamoDB and hands them to Claude Haiku to summarize and answer questions over the recent activity. Haiku keeps it cheap and fast enough to feel live.

Delivery & infra. Media served via CloudFront, radar UI on Mapbox, the backend defined in AWS CDK with least-privilege IAM, and the frontend built in Next.js 16 / React on Vercel.

What's next for Sonar

  • Sonar for Work (B2B): the same engine as an office/building coordination layer with an operator analytics dashboard.
  • Sponsorship marketplace for venues and organizers; richer "ask the place" with multi-place trends.
  • Push notifications for channels you subscribe to; offline-tolerant drops.

Built With

+ 2 more
Share this project:

Updates