Inspiration

One of our teammates never woke up to alarms. His mom gave up and started using a rubber duck instead, squeezing it next to his ear every morning. That stupid little quack did what no alarm clock ever managed: he woke up instantly, every time.

That stuck with us, because Indonesia sits directly on the Pacific Ring of Fire and we kept circling the same three failures. You are asleep, so the early warning reaches a phone lying face down on silent. You panic, so trained knowledge evaporates and people run for staircases. Nobody knows where you are, so rescue becomes guesswork and the neighbor 90 meters away never learns you exist.

So we built the duck. Quaky stays awake so that when the ground moves, nobody is alone in it.

What it does

Quaky turns every phone into a seismic sensor, an emergency guide, and a rescue beacon, and turns every user into a rescuer for the people around them. We call our users Quakers.

It watches while you sleep. The mascot dozes on your home screen while a 1D CNN reads the accelerometer in rolling 2 second windows, trained to spot the multi axis signature of P-waves while ignoring walking, driving and dropped phones. We cut microphone monitoring entirely: it costs less battery, and Quaky never listens inside your home.

One phone is a false positive. Fifty phones is an earthquake. A tripped phone pings Supabase with only location, confidence and timestamp. A PostGIS trigger asks one question: did 50+ devices within 5 km also ping in the last 3 seconds? If yes, Realtime pushes the master alarm to everyone in the radius. The crowd is the sensor, so no single phone can raise a false alarm.

An alarm that refuses to be ignored. Loud siren, red screen, shaking duck, no snooze. It stops only when a human physically touches the screen.

Gemini Live looks around the room with you. Silence the alarm and your camera opens. Gemini streams what it sees and speaks back about your room: stay clear of that window, get under that table, there is debris in the doorway. The screen shows three things only, because a panicking person cannot parse more: a 4:3 feed, a 60 second countdown, and two palm sized buttons.

Safe, or SOS. Tap I'M SAFE and you go green. Tap SOS and the timer is bypassed. Touch nothing and the timeout does it for you, because silence is the most important signal in the app: someone who cannot answer their phone is exactly who needs rescue most. The I'M SAFE button stays on screen even deep in SOS, so a late self rescue instantly cancels your alert.

The rescue payload. A red dot tells a rescuer nothing, so SOS broadcasts your profile photo, name, age and gender, your GPS and live distance, the last 4 camera frames, and Gemini's written read of the scene. Quakers can override the AI by voice, and the payload is tagged either AI SUGGESTION or USER CONFIRMED, so a rescuer always knows if they are acting on a machine's guess or a human's words.

Quakers rescue Quakers. The nearest safe Quaker gets a targeted alert and the full payload. Committing with I'M COMING TO HELP draws a route and marks the node as covered so nobody duplicates a rescue. On the victim's screen the map flips: they watch their broadcast reach neighbors, then watch a name and a face move toward them. "Sari is coming to help, 90 m away" is the whole product.

SAR console. Search and Rescue get a pre-seeded role, live ACTIVE SOS / SAFE / CLEARED counters, every victim's payload, an operations map that routes to the nearest red node, and EMERGENCY CALL for direct audio contact. Clear the last node and the console turns green.

How we built it

Flutter for the client, with one state machine driving the whole emergency flow. A 1D CNN trained on 3-axis seismic waveform data, cloud trained on Modal, quantized and exported to TensorFlow Lite to run on device. Supabase is the entire backend: Postgres for auth, profiles and storage, PostGIS plus SQL triggers for the consensus engine, and Realtime to broadcast the alarm. A Deno Edge Function mints ephemeral Gemini Live tokens so the API key never ships inside the app. Maps are flutter_map on OpenStreetMap, so there are no keys and no billing.

Challenges we ran into

Teaching a phone the difference between an earthquake and a pothole was the hardest part. Our first classifier fired happily on someone jogging, because accelerometer data is overwhelmingly human noise with a small seismic signal buried inside. That failure is why the consensus layer exists: we designed the system assuming the model would sometimes be wrong, and pushed the correlation check into a PostGIS trigger so the database itself decides what is real, with no server to fall over during the exact minute it matters. The UI fought us in the opposite direction. Every instinct was to add a mic toggle, a settings button, a label, and every time we pictured the screen in the hands of someone whose house is shaking, we deleted it. Our hardest design work was removing things. The strangest problem was making silence mean something, since the most important state in Quaky is the one where the user does nothing at all.

Accomplishments that we're proud of

We built the whole pipeline, not one slice. A quantized CNN small enough for a phone, a PostGIS consensus engine with real triggers and tests, an Edge Function token broker, and a streaming Gemini Live client with voice activity detection and a jitter buffer.

We turned "the AI might be wrong" into a feature. Rather than pretending Gemini's read of a room is always right, we tagged provenance and let a Quaker's own voice override it.

A duck. Emergency software is uniformly grim, and grim software gets uninstalled long before the earthquake it was meant for. Quaky stays on your phone because there is a duck asleep on the home screen, and that duck being likeable is exactly why it is still installed on the night it matters.

What we learned

The crowd is a better sensor than any single device. We started trying to make one phone certain and ended up making fifty phones agree. Accuracy through consensus instead of precision reshaped the whole architecture.

Not every AI problem needs the biggest model. The tiny CNN does the life saving detection in a rolling loop without draining the battery. Gemini is used only where nothing smaller could work: understanding an unfamiliar room in real time.

Constraints are the design. "Someone is panicking and the room is shaking" rules out scrolling, menus, reading, and any button smaller than a palm. Once we took that seriously, most of our decisions made themselves.

What's next for Quaky

True background monitoring. Quaky is only as good as its ability to watch while the phone is locked and its owner asleep. An Android foreground service and iOS background execution are the next hard problem.

Offline mesh fallback. Earthquakes take cell towers with them. Running consensus and SOS over BLE mesh between nearby phones would let a neighborhood keep coordinating with zero infrastructure, which is the exact scenario where Quaky matters most.

Real push notifications. Targeted rescue alerts currently reach Quakers with the app open. FCM would reach the ones who do not.

Training on Indonesian seismic data. Partnering with BMKG to train on local instrumentation would sharpen the classifier for the ground we actually live on.

Accessibility as a first class path. Deaf Quakers cannot hear the alarm and blind Quakers cannot read the timer. Haptic alarm patterns and a fully audio driven triage flow are not extras for them, they are the entire app.

A path to institutions. Feeding cleared node data back to BNPB and local emergency services would close the loop between a neighbor with a torch and the people with heavy equipment.

Built With

Share this project:

Updates