# Seismic Guard: earthquake alert app for Android and iPhone

Source: https://slash-digital.io/en/case-studies/seismic-guard/

Seismic Guard · Earthquake alerts Android phones can receive Google's earthquake warnings; iPhones don't. We built Seismic Guard, a Flutter app with native Kotlin and Swift code that relays those warnings to nearby phones and adds alerts from EMSC, SGC and USGS.

Start a project
See the gallery

The live map with an event sheet (EMSC, SGC, USGS) and the event's detail page. Demo build with replayed data.

In short
Seismic Guard is our earthquake app for Android and iPhone. It has three detection paths: catalogue alerts from EMSC, SGC, USGS and GEOFON, a relay that forwards Google's Android earthquake warnings to every registered phone within 500 km, and a crowdsourced accelerometer network that still runs in shadow mode. The app is written in Flutter, with native Kotlin and Swift plugins, a Supabase backend and a Next.js admin. The screens on this page come from a demo build with replayed and invented data.

Client: Seismic Guard · Earthquake alerts

Sector: Earthquake information

Where: Bogotá, Colombia

Year: 2026

Deliverables:
- Flutter app for Android and iOS
- Native Kotlin relay
- Kotlin and Swift sensor plugin
- Supabase backend: 17 Edge Functions
- Next.js web admin

Services:
- Mobile apps
- Data solutions
- Custom software

3, independent detection paths

11, languages

500 km, default alert radius

17, Edge Functions, 15 migrations

01 The context

## The iPhone misses the Android warning

Google sends earthquake warnings to Android phones in the regions it covers, and the warning appears in Android's own interface. An iPhone on the same table gets nothing, so in a household with mixed phones some people are warned and others aren't.

Catalogues from the Servicio Geológico Colombiano (SGC), EMSC and USGS publish an event once the shaking has begun. They inform; they can't warn ahead. We wanted one app that takes both signals without blurring them, and that tells each person honestly whether their phone is set up for the alert to get through.

02 Design and build

## Three detection paths, kept apart

The relay is native Kotlin. On an Android phone with notification access, a NotificationListenerService spots Google's warning, scores it with a local classifier and sends it, HMAC-signed, to a Supabase Edge Function. The server fans it out to every registered device inside the alert radius (500 km by default), Android or iPhone, with no pairing. Every other notification is classified on the phone and never leaves it. Flutter is out of that path, so the relay keeps working when the app's interface is closed.

The second path polls EMSC every 10 seconds, SGC every 20 and USGS every 60 (default intervals), then normalises, deduplicates and correlates the events. A catalogue event is labelled as a rapid detection and is never shown as an early warning. The third path turns phones into sensors: a two-stage detector in Kotlin and Swift sends triggers, and only server-side consensus from at least five credible phones can confirm an event. It ships in shadow mode, detecting without alerting, until it has been checked against real SGC and EMSC events.

Behind the app are 15 SQL migrations, 17 Edge Functions in Deno and a seven-page Next.js admin for sources, relay nodes, the sensor network, classifier rules and delivery logs. The interface comes in 11 languages, with Drop, Cover, Hold On phrased the way each locale says it.

Walkthrough of a demo build: home, an event, the map, the alert feed, the Protection Center and a simulated TAKE ACTION alarm.

-
01

### Android warnings, relayed to iPhone

An Android phone that receives Google's warning passes it on to every registered phone within 500 km. iPhones get it as an APNs push, with no Firebase needed on that path.

-
02

### Early warning and catalogue kept apart

A relayed warning is labelled as an early warning; an EMSC, SGC or USGS event is a rapid detection. Each event shows which source saw it, and at what time.

-
03

### Protection Center

The app checks six conditions that decide whether an alert gets through, such as the notification channel, full-screen display, battery and Do Not Disturb, scores them and offers a one-tap fix for each.

-
04

### Notification access stays on the phone

Only what the classifier scores at 95 or above, a confirmed Google warning, is uploaded. Other apps' notifications are filtered on the phone and are never stored or sent.

03 Gallery

## The project in pictures

9 images · Open any image to see it full size.

Home: status of the protected places, the latest nearby event and the protection score (5 of 6). Demo data.

Detail of an M5.6 in Santander: depth band, EEW badge and the EMSC, SGC and USGS timeline (replayed fixture data).

Live map with the event sheet, its sources and the distance to home. Basemap © CARTO, data © OpenStreetMap contributors.

Alert feed by day: relayed early warning, rapid detection, update and test. Simulated alerts.

Protection Center: six checks that decide whether an alert gets through, each with a one-tap fix.

Full-screen alarm, simulated on the phone: TAKE ACTION, Drop, Cover, Hold on, then “I am safe”.

Dark theme: the map with home in Bogotá and the event sheet. Basemap © CARTO, data © OpenStreetMap contributors.

Web admin, sensor network: density by ~1 km cell and consensus candidates. Individual sensor locations are never shown. Invented data.

Web admin, settings: 500 km relay radius, polling intervals (EMSC 10 s, SGC 20 s, USGS 60 s) and the source registry.

04 Outcomes

## What is in place, and what is still open

Seismic Guard is at version 1.0.0, with 34 Flutter test cases, a backend suite and CI that blocks a release if localisation, native Android tests or the secret audit fail. Two items are open and documented as such. Google does not guarantee that its warning is visible to third-party apps, so the relay is trusted only after a real alert has been inspected on a device; the app's EEW Inspector exists for that check. The sensor network stays in shadow mode until its thresholds are calibrated.

The app says it on screen: it is an additional earthquake information channel, it does not replace official emergency systems, and alerts may arrive before, during or after shaking.

- 3 detection paths: if one fails, the others keep running
- 11 languages, 34 mobile tests, 17 Edge Functions
- Data: EMSC (CC BY 4.0), SGC and USGS; maps © CARTO and OpenStreetMap contributors
- Screens and video on this page: demo build, replayed and invented data, simulated alarm

Frequently asked questions

## The questions we hear often

**Does Seismic Guard work on iPhone?**
Yes. iPhones don't receive Android's earthquake warnings, but when a registered Android phone gets one, our server pushes it to iPhones inside the alert radius, 500 km by default. iPhones also get the catalogue alerts from EMSC, SGC and USGS.

**Does the app predict earthquakes?**
No app can. Seismic Guard relays early warnings when they exist and reports events detected by scientific networks. Not every earthquake is detected, and an alert may arrive before, during or after shaking.

**Where does the data come from?**
From EMSC (licensed CC BY 4.0), the Servicio Geológico Colombiano, USGS and GEOFON as a backup, plus relayed Android warnings. Maps use CARTO tiles with OpenStreetMap data.
