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.
Svelte has some pretty nice built-in scroll animation support: https://svelte.dev/repl/051cd352ce284d15b55c91c8b30fa32f?ver...