front-end validation