no-framework todo web app