ιεΊ¦ Shindo β Japan Seismic Risk Intelligence Graph
Agent Name: ιεΊ¦ (Shindo) β Japan's official seismic intensity scale.
A cascading risk graph that connects earthquakes, fault zones, tsunamis, nuclear facilities, and prefectures β so an AI agent can reason over disaster chains, not just look up events.
Neo4j Competition Submission
Agent Name
ιεΊ¦ Shindo β named after Japan's official seismic intensity scale (JMA). Shindo measures the intensity of shaking at a specific location, not just the energy at the source. This agent reasons the same way: local impact and cascading consequences, not just raw magnitude.
What It Does
ιεΊ¦ Shindo is a seismic intelligence agent for Japan. The user clicks anywhere on a live SVG map to place a simulated earthquake. The agent immediately analyses the event against the graph:
-
Which fault zone ruptured, and what is its historical overdue ratio?
-
Which prefectures are in the felt zone? Which have nuclear facilities?
-
Are there historical analogs in the graph? What happened then?
-
Is tsunami risk expected given the fault type and depth?
Every claim the agent makes is anchored to a Cypher query result from the graph β no hallucination.
Beyond the map there are three analytical views:
-
EDA Charts β decade-by-decade event counts, fault zone death totals, prefecture composite risk index
-
Risk Analysis β statistical recurrence gauges: how long since each fault zone last had a major event versus its historical average interval, expressed as an overdue ratio
-
Cypher Queries β graph schema explorer with template query patterns pre-loaded
Dataset and Why a Graph Fits
Dataset: USGS Earthquake Hazards Program (~20,000 M4.0+ events, 1950β2024) + IAEA PRIS nuclear reactor registry + curated fault zone reference data + JMA prefecture data (47 prefectures with coastal classifications).
Why a graph: Japan's disasters don't happen in isolation β they cascade:
Fault rupture β Ground shaking β Tsunami generation β Prefecture inundation β Nuclear facility exposure
A CSV stores events. A graph stores the chain β and an agent can traverse it in a single query. The nuclear proximity layer is the distinguishing move. Post-Fukushima, this is the question that actually matters in Japanese disaster planning. In SQL you'd need a spatial join, a subquery, and three table hops. In Cypher:
MATCH (eq:Earthquake)-[:WITHIN_50KM_OF]->(nf:NuclearFacility)
WHERE eq.magnitude >= 6.5
RETURN eq.time, eq.magnitude, nf.name, nf.status
The 2011 TΕhoku earthquake didn't just happen β it traversed a graph:
Japan Trench ruptured
β M9.1 earthquake struck
β 40m tsunami generated
β Miyagi, Iwate, Fukushima inundated
β Fukushima Daiichi within 10km of impact
β cascading nuclear crisis
Every link in that chain is a graph edge. The agent can trace it, explain it, and ask: which other fault zones have the same potential?
Agent in the Aura Console
Graph visualisation β full schema, all node types connected:
Agent configuration β ιεΊ¦ Shindo agent wired to the Earthquake Data instance:
All nine Cypher Template tools registered on the agent:
Agent in Action
Live map β Japan with all fault zones rendered, ready to simulate:
Active simulation β epicentre placed, impact zone calculated, nuclear exposure flagged:
Agent analysis β structured response grounded in graph data:
Data Analysis Dashboard β EDA Charts: decade bar chart, fault zone deaths, prefecture risk index:
Dashboard with agent responding to event analysis alongside EDA charts:
Risk Analysis tab β statistical recurrence overview with disclaimer:
Risk Analysis β per-fault-zone gauges (Noto Peninsula, Ryukyu Trench, Sagami Trough):
Cypher Queries tab β graph schema explorer with template patterns:
Cascade trace query executed β fault zone through to nuclear facility:
Live Agent
Live app: shindo-earthquake-graph.pages.dev
GitHub: Dean-Foulds/shindo-earthquake-graph
What Is the Shindo Scale?
ιεΊ¦ (shindo) is Japan's official seismic intensity scale, published by the Japan Meteorological Agency (JMA). Unlike moment magnitude (Mw), which measures energy released at the source, Shindo measures the intensity of shaking at a specific location. The same earthquake registers a different Shindo value in Tokyo versus Osaka.
| Shindo | JMA Level | Typical Effects |
|---|---|---|
| 0 | Micro | Not felt |
| 1 | Minor | Felt by still observers indoors |
| 2 | Light | Hanging objects sway noticeably |
| 3 | Weak | Dishes rattle; felt outdoors |
| 4 | Moderate | Unstable objects fall; most people frightened |
| 5 Lower | Strong | Heavy furniture moves; many seek safety |
| 5 Upper | Strong | Many people cannot move without holding on |
| 6 Lower | Very Strong | Impossible to stand; partial building collapse |
| 6 Upper | Very Strong | Cannot move at all; most unreinforced buildings collapse |
| 7 | Violent | Ground deforms; landslides; extreme tsunami risk |
This agent is named ιεΊ¦ because it reasons about local impact and cascading consequences β not just raw magnitude at the source.
Graph Schema
Node Labels
| Label | Count | Key Properties |
|---|---|---|
Earthquake |
~20,000 | id, magnitude, depth_km, lat, lon, year, decade, severity, deaths, tsunami |
FaultZone |
9 | id, name, type, plates, predicted_max_mag, last_major_year |
Tsunami |
24 | id, max_height_m, source_mag, year |
Prefecture |
47 | id, name, region, lat, lon, coast, population_m |
NuclearFacility |
15 | id, name, lat, lon, reactors, status, operator |
Decade |
8 | year, label |
severity values: minor (M<4.0) Β· moderate (M4.0β4.9) Β· strong (M5.0β6.9) Β· major (M7.0β7.9) Β· catastrophic (M8.0+)
Relationship Types
| Relationship | From β To | Meaning |
|---|---|---|
ORIGINATED_ON |
Earthquake β FaultZone | Quake occurred on this fault |
TRIGGERED |
Earthquake β Tsunami | Quake caused a tsunami |
STRUCK |
Earthquake β Prefecture | Nearest affected prefecture |
INUNDATED |
Tsunami β Prefecture | Tsunami reached this coast |
UNDERLIES |
FaultZone β Prefecture | Fault runs beneath the prefecture |
CONTAINS |
Prefecture β NuclearFacility | Plant is in this prefecture |
WITHIN_50KM_OF |
Earthquake β NuclearFacility | Epicentre within 50km of plant |
BORDERS |
Prefecture β Prefecture | Geographic adjacency |
IN_DECADE |
Earthquake β Decade | Temporal grouping |
Neo4j Best Practices Used
- MERGE throughout β all load scripts are idempotent; safe to re-run without duplicates
- Constraints before data β unique constraints on
id/yearcreated first - Indexes on query hotpaths β
magnitude,year,tsunamiindexed for range scans - Vector indexes β
earthquake_embedding,fault_zone_embedding,nuclear_embedding,prefecture_embedding,tsunami_embeddingviadb.index.vector.queryNodes - Read-only guard β
cypher_read()in the API rejects any query containing write keywords before it reaches Neo4j
Agent Tools
Cypher Templates (9 registered)
| Tool | Description |
|---|---|
the_cascade_trace |
Full chain: fault zone β earthquake β tsunami β prefecture β nuclear facility |
compound_risk_corridors |
Subduction faults overlapping nuclear-hosting, Pacific-coast prefectures |
historical_analog_finder |
Past events near a given location and magnitude |
nuclear_proximity_risk |
M6.5+ events within 50km of any nuclear plant |
decade_pattern_analysis |
Event counts and deaths grouped by decade |
fault_zone_lethality |
Total deaths attributed to each fault zone |
the_hamaoka_question |
Hamaoka nuclear plant specific risk analysis |
region_vulnerability_score |
Composite risk score per prefecture |
graph_summary |
Node and relationship counts across the full schema |
Text2Cypher
Natural language β Cypher generation. Examples:
-
"Which prefectures on the Nankai Trough also have nuclear plants?"
-
"What M7+ earthquakes struck Miyagi in the 2000s?"
-
"Which fault zone has caused the most deaths?"
-
"Show me every earthquake that triggered a tsunami and hit an active nuclear plant"
Similarity Search
Given a simulated earthquake, the agent finds historical analogs by magnitude, depth, and location:
MATCH (e:Earthquake)
WHERE abs(e.lat - $lat) < 3 AND abs(e.lon - $lon) < 3
AND abs(e.magnitude - $mag) < 1.5
OPTIONAL MATCH (e)-[:ORIGINATED_ON]->(fz:FaultZone)
OPTIONAL MATCH (e)-[:TRIGGERED]->(t:Tsunami)
RETURN e.id, e.magnitude, e.year, e.place, fz.name, t.max_height_m
ORDER BY abs(e.magnitude - $mag) + abs(e.lat - $lat) + abs(e.lon - $lon)
LIMIT 5
Vector semantic search is also available over node embeddings using Voyage AI voyage-3 (1024-dim) across all five node types: Earthquake, FaultZone, NuclearFacility, Prefecture, and Tsunami.



