Build components, not pages.
Components can consist of other components.
Components communicate exclusively through events (fully decoupled, as in Twitter Flight).
Make sure multiple instances of the same component can live independently on the same page (think two list views).
Don’t make assumptions about the HTML structure. Leave it up to the individual component to use data attributes, IDs or CSS classes for identification.
There will be components with no corresponding HTML (think an auto-refresh timer) and components that affect HTML in multiple places.
Send Ajax calls to a clean and powerful JSON API (I’m looking into JSON-LD), and offer that same API to external developers.