rewrite as a SPA with ethercalc as the backend