Hey Ross,
Since the inputs are sumbitted to the dataset, just move your code for creating and emailing a contact to onAfterSave event handler of the dataset (see wix-dataset - Velo API Reference - Wix.com) instead of running the code on button click :
export function dataset1_afterSave(itemBeforeSave, itemAfterSave) {
// ...
}
The dataset won’t be submitted if there’s a validation error, so the code will only run if the validation passes.
And you can get the entered data from the item itself instead of getting it from the inputs.