What lessons did I learn from this first prototype ?
On the bright side, browsers are now quite fast and I think that a full featured editor is truly feasible. Browsers can even provide the basis for advances in the UI for this kind of programs: for instance, in vectomatic, the compass-like widget enables working on documents from any orientation ; transparency effects keep the drawing visible when one moves elements around. Developing such an application within a browser enables leveraging the browser native 2D functionalities and reduces the amount of code which has to be written. Newer GWT technologies like code splitting enable the application to grow in size and load incrementally.
Regarding things which ought to be done differently, I see mostly two. Lesson 1: canvas is not the best technology for this kind of program, SVG makes much more sense in this area. SVG offers features which are more advanced than canvas: things like pick correlation, gradients with an orientation, clipping, dashed lines, even animation; the persistence format is no longer an issue since SVG IS the format; it comes with a rich ecosystem of resources, libraries, tools and knowledgeable people. Lesson 2: GWT native library of widgets is the framework’s weak spot at the moment: there are not enough widgets and they are not good or customizable enough ; thus you need to rewrite a lot of code on your own (things like sliders or spinners); on the plus side, it now has the UiBinder, which does things the right way (like InterfaceBuilder on NeXT, but with open formats). I see a parallel between GWT widgets library and AWT in the Java world. To get started on a large scale project, a more powerful widget library is needed. At the moment GXT seems the more complete, but it comes with strings attached. I hope the GWT team comes up with a Swing or SWT of their own quickly.