This has not been validated by team consensus. More discussion is needed.
Don’t disable buttons, have them enabled and then show an error message when the user clicks them.
It is a bad practice to disable buttons. Disabling the button prevents our chance to tell the user what is wrong. The user keeps clicking the button and is totally in the dark why nothing happens. Keep the button enabled. Let the user click the button. Then show the message why it can’t proceed.
If you really, really want to indicate that a button is disabled, do some CSS magic and make it look a bit grey (but with sufficient contrasts). And then turn it green or blue when everything is filled in correctly. But keep the button enabled in the code at all times and put focus on an error message if it’s clicked and there’s something wrong.