Accessibilityintermediate
Every input needs a label and every interactive thing needs to work from the keyboard — this is the difference between a demo and something a real person can use.
Every input needs a name a screen reader can read, every error needs to reach the person who caused it, and a group of radios needs to say what it is a group of. Placeholders are not labels.
Completable start to finish with only a keyboard, and every field announces its own name and its own error.
Published in full, before you start — every point is one of these and there is nothing else.
Every input needs a label and every interactive thing needs to work from the keyboard — this is the difference between a demo and something a real person can use.
Using header, nav, main and section instead of div everywhere is what lets screen readers, search engines and your own future self understand the page.
Validation is telling the user what is wrong before they submit, in a way your server can trust too — a schema lets you write the rule once and use it in both places.