An earthquake portal that reports the wrong depth is worse than no portal. That is the constraint this project is built around, and it is why it is taking longer than the feature list suggests. It is intended for seismo.overbring.com.
The problem with earthquake data
There are excellent public sources and they do not agree. Each agency ingests the same event and publishes its own magnitude, depth and origin time, sometimes minutes apart, sometimes with a revision that changes the number by a tenth. Then the formats differ: QuakeML from some, FDSN web services from others, GeoJSON from the USGS, and a websocket from the regional Seismic Portal that pushes events as they are reviewed.
A reader does not care about any of that. They care that something happened, where, and whether it matters to anyone they know.
What Kunai does
- Collects from several providers: NOA, GEOFON, EMSC’s Seismic Portal, IRIS and the USGS,
each with its own quirks. The USGS
all_hourfeed is polled every sixty seconds; the Seismic Portal pushes standing orders over a websocket. - Normalises into one event model, parsing QuakeML with its namespaces properly, because half-arsed XML parsing is how a depth becomes the latitude.
- Places events geographically. Flinn-Engdahl regions, coordinates, and reverse geocoding, so an event reads as “12 km north of Patras” rather than as two decimals and a decimal point in the wrong place.
- Keeps the page live, with presence and channels, so updates arrive while events are still being reviewed upstream.
- Translates, because an event near Greece is read in more than one language and an automatic translation is better than an English-only page nobody finishes.
- Writes summaries with a local model, from the structured record. Not from a press release, and not at all when the record is thin.
What it works against
The reflex to show everything. An unverified feed beside a confirmed one is a trust problem, and trust is the entire product of a monitoring portal. The same instinct applies to automated summaries: a sentence that confidently says “no tsunami risk” had better be derived from something that actually says so.
Where it stands
Not live. The work now is unglamorous: reconciling sources, failing quietly when a feed is down, and testing against historical events whose answers are already known. When those hold, it opens.