Interesting! I've done some visual node based editors in the past. One design principle I might suggest: develop a DSL and have the editor just be editing programs in that DSL. You might be able to use Racket—not sure—but alternatively you could copy what I've done here (https://ohayo.computer) and design a Tree Language (https://jtree.treenotation.org/designer/).
It makes the problem simpler IMO, as then you get to iterate on the language and capabilities independently of the UI.
It makes the problem simpler IMO, as then you get to iterate on the language and capabilities independently of the UI.