Move display logic into VM; use React for rendering