Inspiration

Cities are full of small, local knowledge: the bench with the best sunset, the cart that makes the 2 AM egg sandwich, the owl hidden in Alma Mater's robe. None of it shows up in a search bar, and most apps are built around searching. We wanted the opposite: an app where you can't search, where the only way to find something is to go outside and walk. To truly know your city, you have to know its people.

What it does

bubl is a social layer on top of real places.

  • Walk. A map of your neighborhood shows bubbles, color-coded by category (Food, Cafe, Park, Street, Misc). Far away they're blurred dots. What's inside stays sealed.
  • Pop. Get within 15 m and the bubble pops: a burst animation, then the note (text, photo, short video or a voice note) opens. The check happens on our server, so the content never reaches your phone before you're actually there.
  • Walking voice. Turn on the speaker and put your phone in your pocket. Every bubble you walk into pops by itself and is read aloud by an ElevenLabs voice ("…this bubble also has a photo, open bubl to see it").
  • Drop. Leave your own bubble exactly where you're standing: a note, photo or video, a category, and how long it floats (a week, a month, forever). Every drop is checked by Gemini before it goes live.
  • Love → Wave → Chat. Love a bubble and you and its author can wave at each other. A chat unlocks only when both of you wave. No cold DMs, no profiles to swipe; you meet someone because you both loved the same spot.
  • Events. Time-boxed bubbles (NYC events plus ones people drop) that only pop at the venue while they're happening.
  • Notifications. Real phone notifications (even with the app closed): you drifted into a bubble, someone loved your bubble, waved, or messaged you. Inside the app, a banner slides down and takes you straight to the chat or bubble.

How we built it

  • Frontend: React 19 + TypeScript + Vite, a mobile-first PWA you can add to your Home Screen. The map is a custom OpenStreetMap tile map with our own bubble layer.
  • DeepSpace runs the whole backend: auth (Google + demo sign-in for judges), the data store (bubbles, pops, waves, chats, messages, notifications, events, push subscriptions), every server action, private file storage for photos and videos, the secrets store, the ElevenLabs integration, and deploys to bubl-divhacks.app.space.
  • Sealed by design: the map only ever receives a preview (position, place name, category). Title, text and media come back only from canPop, after the server verifies your distance. Photos and videos have GPS/EXIF metadata stripped on the server.
  • Gemini (gemini-3.5-flash-lite, structured JSON output) moderates every drop, including photos and frames pulled from videos, for hate, harassment and personal info (with a local PII pre-check), and suggests the title, category and language.
  • ElevenLabs reads notes aloud through DeepSpace's integration. Audio is generated once and cached on the bubble, so every reader after the first gets it instantly.
  • Web Push, written from scratch on the Worker with WebCrypto (RFC 8291 encryption, RFC 8292 VAPID), because the platform had no push service. It's tested byte for byte against the RFC's own example.
  • Demo mode: a draggable "you" dot replaces GPS so the whole loop works indoors.

Challenges we ran into

  • Location as the product, not metadata. Unlocking had to be trustworthy, so the distance check lives on the server, and sealed content is never sent early. Hiding it in the UI wasn't enough.
  • GPS indoors is off by 20–50 m, so we built demo mode: a draggable "you" dot that replaces GPS, so the whole loop works inside a hackathon hall.
  • iPhones and the web. iOS only allows notifications from a Home Screen app, only after a tap, and doesn't show a page's own notifications, so we built real Web Push. We also had to handle iOS 26's floating Safari toolbar and Home Screen layout quirks.
  • Safety with public content + location + social. Every drop is moderated, nobody can message anyone before a mutual wave, and nobody's location is ever shown to other people.

Accomplishments that we're proud of

  • One core interaction (walking up to a place) that is both discovery and connection.
  • Social without unsolicited DMs: you meet someone's personality through what they left behind, and a chat opens only after mutual interest.
  • The pop moment, a note read aloud while you walk, and the mutual wave: three moments that feel good, all running live.
  • Real end-to-end infrastructure in a weekend: server-side sealing, moderation, cached voice, encrypted push, and tests (unit + Playwright against the real backend).

What we learned

Location-based products work when being there is the experience. Physical presence isn't just a signal for recommending content; being there is what unlocks it. We also learned how much careful design social features need when content is public and tied to places.

What's next for bubl

  • Translation, so a note left in Spanish can be read in English (and back).
  • Beyond Morningside Heights and beyond NYC.
  • Better indoor proximity and background walking on phones.
  • Richer creator profiles, bubble collections and walking routes.

Try it (for judges)

  1. Open bubl-divhacks.app.space, tap anywhere, then Skip sign-in · try the demo.
  2. Drag the blue dot onto a bubble → Pop it → tap Listen.
  3. Turn on the speaker on the map and drag into another bubble: it pops and reads itself.

Built with

react, typescript, vite, deepspace, cloudflare-workers, durable-objects, gemini, elevenlabs, web-push, service-workers, webcrypto, openstreetmap, pwa, playwright, vitest, tailwindcss

Built With

+ 9 more
Share this project:

Updates

Submission history