// project · terraforge

TerraForge

An open map of 440,000 geotechnical investigation points across the Netherlands — plus a proof that heavy engineering calculations can run entirely in the browser, in Rust, compiled to WebAssembly.

Rust + WASMMap-firstOpen dataLive

Note: this page is an AI-generated summary of the project. The product, the code, and the data behind it are real — the prose isn't hand-written.

// why

Geotechnical analysis is a desktop-software world: heavy binaries, license servers, Windows-only. TerraForge is an experiment in the other direction. Every calculation — CPT interpretation, bearing capacity, settlement, FEM, slope stability — lives in a Rust crate that compiles to WebAssembly and runs in the browser. No server round-trip, no install, no account needed to watch the heatmap render. It's deliberately a POC for browser-native engineering compute, wrapped around a useful artefact: the full BRO open-data registry, plotted as a single-glance map.

// look

Heatmap of 440K geotechnical points across the Netherlands
One glance, 440,000 investigations. The glow is the country.
TerraForge signup page
Signup. The map is the hero, not a screenshot of a dashboard.
TerraForge signup on mobile
Same story, smaller glass.
Heatmap zoomed into Rotterdam
Zoom in and the infrastructure draws itself — each dot is a real investigation.
TerraForge dashboard with heatmap tile
Dashboard. The map is the front door; projects live below.
Heatmap on mobile
Pinch and the density tells you where the data is.
Heatmap zoomed into Amsterdam
Amsterdam. Canals, polders, the Zuidas — all visible in geotech density.
Individual CPT, borehole and well markers
At street zoom the glow resolves into individual CPTs, boreholes, and wells.

// the WASM bit

Ten Rust crates — one per engineering module — compile through wasm-bindgen into a single WebAssembly binary that the browser loads on demand. A CPT interpretation that would normally hit a desktop solver runs locally in milliseconds. FEM, bearing capacity, settlement curves, slope factor-of-safety, pile and retaining design — all executed client-side, with numeric parity to the Rust native test suite.

  • terraforge-cpt — CPT interpretation
  • terraforge-bearing — Bearing capacity
  • terraforge-settlement — Settlement
  • terraforge-slope — Slope stability
  • terraforge-fem — Finite elements
  • terraforge-pile — Pile design
  • terraforge-retaining — Retaining walls
  • terraforge-lateral — Lateral earth pressure
  • terraforge-ground — Ground modelling
  • terraforge-core — Shared primitives

// stack

how it's built
  • Rust (10 crates)CPT, bearing, settlement, FEM, slope, pile…
  • WebAssemblyEvery calc runs in the browser, zero server
  • wasm-bindgenTyped bridge from Rust to TS
  • Mapbox GL v3Vector tiles, three base styles
  • deck.glAdditive-blend scatterplot for the glow
  • PMTiles440K points packed into a 20 MB archive
  • TanStack RouterFile-based routing, React 19
  • Hono + CloudflareD1 for auth, R2 for tiles
  • Vite 7 + Tailwind 4Custom PMTiles dev middleware
  • shadcn/uiEvery primitive, dark-first

The map ships 440,000 points as a 20 MB PMTiles archive, complemented by a JSON blob of raw coordinates for the deck.gl glow layer. Authentication gates the app but tile requests carry a JWT, so the heatmap itself is the product demo.

// status

  • Map and WASM modules are live. Request access to use the analysis side.
  • Data: Netherlands first. Other countries need a different ingest — the pipeline is designed to accept them.
  • Next: 3D ground models in Three.js, stitched from CPTs on the map.

// work together

Like what you see? I build products like this end-to-end — idea to shipped, front-end to infra. Hiring, have an idea you want made, or just want to poke at what I built here? Drop me a line — I reply.