Skip to content
← All writing

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.

Next step

Have a project in mind? Let's make it happen.

Tell me what you're trying to build or fix — I'll reply with honest scope and next steps.

Start a Project