client-side to do list app