Form validationintermediate
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.
A contact form with React Hook Form and Zod: real rules, real messages, no double submits.
Submitting empty shows a message per field; a valid submit disables the button while it runs.
Published in full, before you start — every point is one of these and there is nothing else.
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.
Anything that talks to a network can be slow or fail; a screen with no loading state and no error state is a screen that looks broken the first time the wifi drops.
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.