Web Development · March 14, 2026 · 5 min read
Forms that get replies: what I cut from every contact flow
Most contact forms ask too much, validate too late, and confirm too vaguely. Here's the short checklist I apply to every form I build.
A contact form is a negotiation. The visitor offers attention and personal details; you offer a fast, useful reply. Every extra field raises the price. Most forms I inherit are overpriced — [replace with your own observations as you publish real posts].
1. Ask for the minimum that lets you reply well
Name, email, and one open question beat eight precise fields. Project type as a single-select helps you triage without interrogating. Budget and timeline can be optional — interested people will volunteer them.
- Required: name, email, message (with a real minimum length)
- Single-select: project type, so replies can be specific
- Optional: budget range, timeline, links
- Never required on first contact: phone number, company size, 'how did you hear about us'
2. Validate inline, confirm explicitly
Errors should appear next to the field, on submit, written like a person: 'Enter a valid email address' beats 'Invalid input'. And the success state must answer three questions: did it send, what happens next, and when.
A form's success state is a promise. 'Message received — I reply within 1–2 business days' is a promise. 'Thank you for your submission' is a shrug.
3. The contact form on this site
This site's own form follows the checklist: labeled fields, inline errors, a project-type selector, and a confirmation that sets expectations. The submission is currently simulated — the validation and states are real, the backend hookup is one function in ContactForm.tsx.
Placeholder series — swap in your real voice and stories as you publish.