basic checkout functionality including validation