UnderMine Risk — Geotechnical Risk Operator Dashboard
An interactive operator dashboard that turns weekly geotechnical risk model output into an actionable mine map. Per-extraction-point risk on a deck.gl view, aggregation layers, per-lever actionables, and printable monthly reports. A portfolio demo running on fully synthetic data.
Business Context
In mining, geotechnical risk information often lives in models and spreadsheets that operations teams can not act on directly. Risk that is summarized as an average hides the single escalating point that matters most, and explanations that live in a data-science notebook never reach the people making shift decisions. The result is information that exists but is not operational.
Strategic Value
UnderMine Risk is an engineering demonstration of the operator-facing last mile for explainable risk. Two design choices carry it: aggregation layers roll up by riskMax + maxDelta (not the mean), because in a safety context an escalating point must never be buried in an average; and every view exports to a print-optimized monthly report, because the audience for mine-safety risk includes people who sign off on paper. SHAP history makes each score auditable week over week, and a per-lever actionables engine turns risk into response. It runs on fully synthetic data behind authentication — it shows the dashboard engineering (deck.gl, aggregation, actionables, audit-ready reporting), not a claim that any production mine runs on it. Next.js 16 + React 19 front end over a weekly Python data pipeline.
The Challenge
A geotechnical risk model produces numbers; an operator needs a decision. The gap every mining-safety ML project hits is the last mile: turning weekly per-point risk scores and their explanations into something a shift can act on — see where risk is rising, why, and what to do — without reading a notebook.
Our Approach
A Next.js 16 / React 19 web app renders per-PEX (extraction point) weekly risk on a deck.gl OrthographicView of the mine, with aggregation layers (street / sub-sector / cluster) driven by riskMax + maxDelta so escalating points never hide inside an average. SHAP history per point explains the drivers, an actionables engine suggests responses by lever, and any view exports to a print-optimized monthly report. Multi-area (Amatista + Zafiro), bilingual ES/EN, fed by a weekly synthetic GeoJSON pipeline.
Key Performance Indicators
| KPI | Baseline | Result | Impact |
|---|---|---|---|
| Last Mile | Risk score in a notebook | Interactive operator map + actionables | Risk becomes a decision |
| Aggregation | Mean (hides escalations) | riskMax + maxDelta roll-up | Escalating points stay visible |
From a Risk Score to an Operator Decision
A geotechnical risk model outputs a number per point per week. UnderMine Risk is the operator dashboard that closes the last mile — putting that risk on an interactive mine map where a shift can see where it is rising, why, and what to do. It is a portfolio/demo piece built on fully synthetic data for a fictional underground mine, behind authentication; the point is the operator-facing engineering, not a production safety claim.
A Map, Not a Table
Every extraction point (PEX) gets its weekly risk rendered on a deck.gl 2D top-down view of the mine, across multiple areas (Amatista + Zafiro). The defining design choice is the aggregation: street, sub-sector, and cluster roll-ups are driven by riskMax + maxDelta, never the mean — because in a safety context the whole reason to summarize is exactly the one escalating point a mean would bury.
Explainable and Auditable
Each point carries its SHAP history, so an operator can see why the risk moved week over week, and a per-lever actionables engine turns elevated risk into concrete responses. Any view exports to a print-optimized monthly report (Print / Save as PDF) — because the audience for mine-safety risk still includes people who sign off on paper.
Stack
A Next.js 16 + React 19 bilingual (ES/EN) front end with deck.gl + Plotly visualizations, Auth.js v5 sessions, and Drizzle/SQLite persistence, fed by a weekly Python synthetic-data pipeline that writes GeoJSON per area and date. Live (auth-gated) at underrisk.fasl-work.com.
Technology Stack
Visual assets for this project are not publicly available.