ES
← Back to Portfolio
Geotechnical & Risk March 2026

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.

Frontend
Next.js 16 · React 19 · deck.gl
Explainability
SHAP history per PEX
Coverage
Multi-area, weekly, bilingual
Data
Synthetic (demo, auth-gated)
#geotechnical #mining-safety #deckgl #nextjs #dashboard #shap #visualization

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

KPIBaselineResultImpact
Last MileRisk score in a notebookInteractive operator map + actionablesRisk becomes a decision
AggregationMean (hides escalations)riskMax + maxDelta roll-upEscalating 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

TypeScript Next.js React deck.gl Plotly Auth.js Drizzle SQLite Tailwind Python

Visual assets for this project are not publicly available.