Inspiration
At events like this one, the noise builds slowly: music, crowds, overlapping conversations. For many autistic and noise-sensitive people, overload arrives before they can explain what is wrong. In that moment, asking for help, reading a map or typing into an app is exactly what becomes hard.
We wanted a personal agent that already knows what helps you, so that when it gets too loud you don't have to think: your phone simply points you toward quiet.
What it does
Quiet Compass is a personal agent plus a sound map.
- The phone measures. As you walk, the iPhone app turns microphone audio into loudness summaries on the device and tags them with where you are, using ARKit to track your path through the room. Green is calm, orange is loud. No audio is ever recorded or uploaded.
- The agent decides. A personal agent connected through MCP (Model Context Protocol) knows which sounds bother you, which places you rated as calm, and how much time you have. Ask it once, "I need somewhere quiet", and it answers with one calm instruction.
- The phone guides. The edge of the screen lights up on the side you should turn to. When you face the quiet spot, the whole border glows and the phone taps once. You just walk there: no reading, no choosing.
- The map is shared. With consent, phones contribute coarse summaries to a community sound map, so every walk makes the map better for everyone. Health data, routes and audio never leave the person.
How we built it
- iPhone app (Swift, SwiftUI, ARKit, AVFoundation): on-device audio features, AR path tracking, the screen-edge guidance and haptics, and an outbox that syncs summaries to the server.
- Server (Python, Starlette, SQLite): stores sound memory (never audio), ranks places for a goal (rest, talk, work) and a time budget, and serves the agent tools over MCP:
- private
quiet_*tools for the owner's personal memory and guidance; - shared tools for the community map (
query_sound_map,find_suitable_places,submit_observation), reachable by outside agents through OAuth 2.1.
- private
- Web map (TypeScript, React, Next.js): a live map of released community measurements plus San Francisco 311 noise reports from DataSF.
- Hosting: Render for the server, Vercel for the map, both on free tiers.
Levels are relative to one phone's microphone, so we report them in dBFS and never call them decibels:
$$L_{\text{dBFS}} = 20 \log_{10}\left(\frac{x_{\text{rms}}}{x_{\text{full scale}}}\right)$$
Challenges we ran into
- Honest measurement. A phone mic is not a calibrated meter. We only compare readings from the same capture profile, show how old each reading is, and never call an unmeasured place quiet.
- Indoor positioning. GPS doesn't work inside a venue, so positions come from the phone's AR session and only make sense within one walk.
- Privacy versus a shared map. A contribution is released only after enough contributions arrive. Areas are coarse (~100 m cells, 5-minute buckets), and data expires after 24 hours. Outside agents must contribute a real measurement before they can read the shared map.
- Connecting agents. Our OAuth consent page blocked the browser's redirect back to ChatGPT. Every approval looked like an "expired" request, until we tracked it down to the page's security policy.
- Free hosting. The free server wipes its data on every redeploy, so we learned to coordinate deploys carefully before the demo.
What we learned
- A good personal agent in a hard moment should say less: one instruction, then let the phone point.
- Designing for overload means removing choices, not adding features.
- MCP makes it easy to let different agents use the same tools, but authentication and consent need as much care as the tools themselves.
What's next
- One press of the iPhone's Action Button starts guidance with no chat at all.
- Background alerts that notice rising noise before you do.
- Calibrated profiles so measurements from different phones can be combined.
Built With
- chatgpt
- python
- react
- render
- sqlite
- swift
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.