Mert Özen's blog posts on software development, backend, frontend, and DevOps.
We collect values with form.elements and FormData, write our own rules with validity and setCustomValidity, catch the invalid event, and send the form with fetch without reloading the page.