Skip to main content
← All notes
Tip

The intake forms validate when you leave, not while you type

softwareaccessibility

Every service has an intake form — audio asks for genre and track count, software asks for budget and project type, accessibility asks for compliance target. All five forms share one component called ServiceIntakeForm. It takes a FieldConfig array and renders the right inputs for each service. Validation runs on blur, not on change. You type your email, tab to the next field, and if the address is invalid the error appears under the field you just left. No red borders while you are still typing. No error messages that flash and disappear as you correct a character. The error uses role alert so screen readers announce it immediately. Each field tracks whether it has been touched. Errors only display when both conditions are true — the field has been touched and the field has an error. When you hit submit, every field is marked as touched at once so any remaining errors surface together. A useRef flag prevents double submission the same way the booking form does — synchronous check before any async work starts. A honeypot field sits off-screen with aria-hidden and tabIndex -1 so bots fill it out but real users and assistive technology skip it entirely. If the honeypot has a value, the form silently returns without sending. No error, no feedback, nothing for the bot to learn from. Five services, five different field configurations, one form component, one validation pattern.

Comments coming soon

Sign in with TikTok to leave a comment. Coming soon.