Author here. I'm using Svelte, which is great for interactive applications. For the event handling I'm very influenced by what https://mlu-explain.github.io/ does.
The 3d plot is made with Threejs through the Threlte wrapper. One challenge was animating the 20k points in the 3d plot, which is handled by a custom vertex shader.