The domain (SemaEHS) defines what is learned. The platform (3D-ILP) defines how learning works. This map shows the full system: the 3D-ILP platform architecture (the machine), the SemaEHS domain layer (the content), the event system that connects them, and the tech stack underneath.
SemaEHS is not a standalone app. It is a content & configuration layer running on top of 3D-ILP.
RISK_IDENTIFIED, PPE_SELECTED, …)The 3D scene is the application stage — not the whole experience.
Components define what the learner must demonstrate. Blocks define how it is delivered.
Layers never skip past their boundary. Blocks emit; the platform decides.
emit fn), advances/branches based on platform state, handles transitions.emit function. Zero knowledge of evaluation.{ type, blockId, payload, timestamp }. Delivers events from blocks into platform state; never delivers logic back.Blocks emit semantic events. The platform interprets them. State mutates. React re-renders. Nothing is ever lost — events.push() before the switch.
LearningEvent{ id: "missing_guardrail_01" }{ questionId, value }{ itemId, correct }All blocks share the same interface: receive context, emit events. They have no idea what they are teaching.
Babylon is a 3D engine, not a React component. It runs in a <canvas>, imperatively. Scenes must dispose completely — memory leaks degrade long sessions fast.
SCENE_COMPLETED; platform takes control.Small team, balancing productivity and long-term flexibility. Starting points, not contracts.
dynamic() import for Babylon.ActionManager for clicks.Three roles, distinct dashboards. Thin REST API at MVP.
POST /auth/login, POST /auth/logoutGET /modules, GET /modules/:idGET /components/:id — definition + blocksGET /progress/:userIdPOST /progress/:userId/event — record a learning eventPOST /admin/modules, GET /admin/usersThe flow is the same regardless of domain. Content changes; structure does not.
RISK_IDENTIFIED array vs required targetsCOMPONENT_COMPLETEDWork at Heights module, scaffold hazard scene. Validate — do not over-engineer.