validation and models are factored out to blue-button-model