completed user auth from scratch