I think starting with contract and working up is a good approach. Layers. In theory you should be able to produce a UI generator that is compatible with a contract definition. Trying to build a "big UI thing" that doesn't allow separation of the two seems risky. You're also definitely going to want to be able to do at least portions of the UI fully native. Obviously a non-trivial problem.