Stack

How the platform is built

37 scenes and 89 demos share one shell. Every demo is a registry entry (typed controls, legend, assumptions, library credits) plus one engine component that runs in the browser. Nothing redirects; heavy engines load lazily.

Routing

app/[domain]/[scene] with ?demo= selection. Domain and scene pages are statically generated from the registry; the shell hydrates on the client.

Shell

SceneShell: demo tabs, transport (space / r), controls (range, toggle, select, text, file, action), telemetry strip, JSON export, key gating for map providers, Built-with panel.

Engines

One component per demo under app/scenes/engines/<domain>. Three.js stages via createStage, canvas plots via kit/plot, real engines (MuJoCo WASM, Rapier, deck.gl, MapLibre, Cesium, @mcap/core, urdf-loader) behind shared kits.

Assets

scripts/copy-assets.mjs copies MuJoCo and Cesium runtime files into public/vendor before dev/build; both are loaded at runtime to keep them out of the bundle.

Libraries and engines credited across demos

LibraryVersionRoleDemos
Canvas 2D—Rasterized plots and overlays43
Three.jsr184WebGL scene, instancing, controls33
D37Scales, layouts, force graphs7
MapLibre GL JS5.xVector-tile basemap7
Applied Intuition triage—Reference triage workflow5
Xtreme1—Reference annotation UX5
Foxglove—Reference layout for log review4
deck.gl9.4GPU geospatial layers4
LeRobot—Episode/dataset conventions4
@mcap/core2.2MCAP read/write3
ASAM OpenDRIVE1.8Road network format3
CARLA ScenarioRunner—Reference for closed-loop scenarios3
MuJoCo WASM3.1Physics engine in the browser3
urdf-loader0.13URDF → Three.js articulated model3
CVAT—Reference 2D/3D labeling3
uPlot1.6Dense time-series plots2
Mapbox GL JS3.xStandard style, 3D terrain2
AMap Loca2.0Data visualization on AMap2
AMap JSAPI2.0Basemap, buildings2
CesiumJS1.145Globe, terrain, 3D Tiles2
Isaac Lab—Reference for parallel RL training2
SUMO—Reference traffic simulator2
Foxglove schemas—Message layouts for PointCloud, Image, TF1
AntV L72.xGeospatial layers on any basemap1
satellite.js—SGP4 orbit propagation1
Baidu MapVGL—WebGL layers on Baidu Maps1
Rerun—Reference viewer for episodes1
Viser—Reference for multi-env web viewers1
ASAM OpenSCENARIO—Scenario description reference1
Rapier0.19Rigid-body physics (WASM)1
NVIDIA Cosmos—World foundation model reference1
TransformControls—Gizmo manipulation1
KITTI format—Label export reference1
nuScenes devkit—Export schema reference1
Plotly.js—Reference for statistical charts1
GLTFLoader—glTF 2.0 import1
Gaussian splatting (three.js)—Splat rendering reference1
Lightweight Charts—Reference financial charting1

Scenes by domain

DomainScenesDemos
Autonomous drivingPerception · Planning & prediction · Log replay (MCAP) · Sensor calibration · HD map (OpenDRIVE)15
TriageEvent mining · Review workbench · Log sim (counterfactual) · Fleet dashboard12
Map enginesdeck.gl · MapLibre GL · Mapbox GL JS · AMap Loca · AntV L7 · CesiumJS · Baidu MapVGL14
Embodied AIEpisode review · MuJoCo in the browser · Robot inspector (URDF) · Kinematics · Policy monitor14
Simulation & world modelsScenario editor & sweep · Physics · Traffic · World model7
AnnotationLiDAR cuboid labeling · Tracking & propagation · Image tools · Quality control & export12
Data loopPipeline status · Dataset statistics · Training runs3
3D & neural rendering3D viewer2
AI systemsInside models3
MarketsMarket microstructure3
ScienceDynamics & fields2
IndustryIndustrial networks2

Adding a demo

Add a DemoDef to a scene in app/scenes/domains/*.ts and an engine component. The engine receives parameters, a play flag, a reset counter, an optional uploaded asset and action commands, and reports telemetry.

export type EngineProps = {
  params: Record<string, number | boolean | string>;
  playing: boolean;
  resetKey: number;
  asset: ArrayBuffer | null;
  command: { name: string; seq: number } | null;
  onTelemetry: (t: Record<string, string | number>) => void;
};