Add: Model-View-Intent and the Virtual DOM