I grew up in Sonora, California โ€” a Gold Rush town wedged into the western Sierra Nevada foothills of Tuolumne County, where the hills are crumpled and old and full of stories the rocks don't easily give up. The Melones Fault Zone runs right through that country. As a kid, I walked those fault scarps without knowing what they were. I just knew the land felt different there โ€” broken in some deep, geological way, like the earth was remembering something.

The 1989 Loma Prieta earthquake hit when I was young. Fifteen seconds, M6.9, 63 dead. I remember what it felt like when the ground โ€” the thing you spend your entire life trusting completely โ€” decided for a few seconds that it was done being trusted.

AFTERSHOCK is that memory grown up and given a dashboard.

What It Does

Every six hours, a GitHub Actions pipeline wakes up, calls the USGS Earthquake Hazards Program ComCat API, and pulls every measurable shake across the United States and beyond โ€” M1.5 and up, worldwide. It writes a static JSON file. A dark, cinematic map on ESRI Dark Gray Canvas tiles loads it. Earthquake dots sized and colored by magnitude โ€” tiny green pinpoints for the microseismicity, climbing through yellow, orange, red, and into deep red and purple as the energy scales up. A magnitude 7 sits on the map like a bruise.

The Map
Click any dot. Popup with magnitude, location, depth, time elapsed, and a direct USGS event page link. Every earthquake, every dot.
State Deep-Dives
Click any US state โ€” active or quiet. Event count, largest magnitude, average depth, magnitude distribution chart, most recent events list.
National Leaderboard
Top states ranked by event count, color-coded by intensity. Alaska is always first. It is not even close.
Hiroshima Equivalent
Total seismic energy expressed as a multiple of the Hiroshima bomb yield. Because 1.8ร—10ยนโท joules means nothing until you say it a different way.

The Filters

Two controls that wire through everything simultaneously โ€” the map, the state panel, the leaderboard, the recent events list. Time window buttons: 1D, 3D, 7D, 14D, 30D. Magnitude slider: drag from M1.5 up to M6.0. Watch the noise disappear. Watch the significant events remain. The interface responds instantly because all the data is already in the browser โ€” one JSON file, loaded once.

The Architecture

Same pattern as everything else in this collection. One Python script. One JSON file. Zero databases. Zero servers.

# The entire pipeline USGS ComCat API โ†’ fetch/fetch_quakes.py (Python, every 6 hours via GitHub Actions) โ†’ data/earthquakes.json โ†’ index.html (Leaflet + Chart.js, no build step) โ†’ brooksgroves.com/aftershock

The whole thing is auditable in an afternoon. The automatic update commits read: Seismic update: YYYY-MM-DD HH:MM UTC. When those appear in the commit history, the pipeline is healthy.

The Quiet States

One of the things I like most about the state deep-dives is how they handle quiet states. Click a state with no recent seismic activity and you don't get an error โ€” you get a message: "Quiet is not nothing โ€” it may mean the fault is locked." A locked fault accumulates strain. The quieter the fault, sometimes, the more concerning the silence.

"The fault does not forgive. The data never lies."

The Cascadia Subduction Zone โ€” offshore of Washington, Oregon, and northern California โ€” hasn't produced a full-margin rupture since January 26, 1700. That's 326 years of locked strain. AFTERSHOCK watches the microseismicity along that margin constantly. The data updates every six hours. The fault moves on its own schedule.


Live at bdgroves.github.io/aftershock. Open source at github.com/bdgroves/aftershock. Built by someone who grew up walking fault scarps without knowing it.