Depending on one's skillset, you could use a dcc tool like Blender + three.js to make creation of these visuals and interactions much simpler. Have a look at gltfjsx + react-three-fiber [1] combination, which themselves are abstractions over vanilla three.js.
With that said, the raw webGL approach here is arguably more educational, so goal achieved I think!
[1] https://docs.pmnd.rs/react-three-fiber/getting-started/examp...
Edit: there's actually a 50 LOC watch example with r3f: https://codesandbox.io/s/bouncy-watch-qyz5r