Name three separate states

Prepare different messages for processing, received and not yet confirmed. Pressing a button starts an operation; it does not establish that the sales team has read it. Show a reference when the server confirms the record. If no response arrives, avoid declaring certain failure or success. Explain the uncertainty and offer one useful next step without unnecessarily clearing the visitor’s work.

Learn from a documented implementation

MDN explains that repeated POST requests can cause additional effects. Stripe’s API demonstrates retries associated with an idempotency key. This behaviour is not automatically present in every enquiry form. A comparable design needs an explicit application and storage contract; the example is not a requirement to use Stripe.

Distinguish another attempt from another enquiry

In the example, the first submission creates request A. A retry after a connection problem retains that identity so the server can return its existing result. If the visitor changes the quantity, decide whether that means a revision or a new request. Do not silently accept changed content under an unchanged key. Ask the developer to define retention, conflicting requests and retry limits. Keep email addresses and phone numbers out of the key itself.

A disabled button is only one layer

Temporarily disabling the submit button can discourage repeated clicks, but it does not control requests from a refreshed page, another tab or a retry elsewhere. Pair the loading indicator with meaningful status text and avoid leaving the control disabled indefinitely. The designer should define visible states, the developer should define uniqueness, and the business should identify when the team actually receives the enquiry.

Make the acknowledgement precise

Once the record exists, show its reference, a short summary and the next step. Queueing a notification email, sending it and delivering it are separate events. A delayed email should not create another enquiry. Avoid promising a response time the team cannot sustain. Give the visitor a reference to quote when asking for help, while ensuring that the reference alone does not expose private enquiry details.

Test beyond one successful submission

In a test environment, submit the same request twice, delay the response after storage, and refresh the confirmation page. Count business records and notifications in each case. Then submit a genuinely different enquiry from the same person and verify that it remains possible. Keep these tests from messaging real customers. Include the acceptance conditions in the website design scope so ownership of duplicate handling is settled before launch.

Frequently asked questions

Are two enquiries from one email address always duplicates?

No. The same person may request different products or projects. An email-only uniqueness rule can block legitimate enquiries.

Sources & further reading

MDN — POST request method ↗Stripe — Idempotent requests ↗
Web design & developmentLet’s discuss this service ↗