Instant reply: every enquiry answered in its own words
Fill in the form on this site and a reply about your task lands in your inbox, written for you, while the CRM records who you are and what you asked.
Honest label Our own system, running on this site. No client results are claimed.
- checks before any work
- 4
- services: Claude, Resend, HubSpot
- 3
- reply per lead, even if the AI fails
- 1
- Vercel Functions
- Claude
- Resend
- HubSpot
Overview
A service business lives on enquiries, and an enquiry goes cold while it waits for a person to read it. This is the system behind the "Tell me the task you are sick of doing" form: it answers the moment someone asks. The same flow, built in n8n, is the Speed to lead canvas on the Projects page.
The challenge
A fast reply is easy. A fast reply that is specific, safe and never lost is not.
- A canned "thanks, we will be in touch" reads like a template, because it is one
- A model call plus two API calls can take longer than a form will wait, and a form that waits too long sends the same lead twice
- An AI outage, a missing key or a refused answer must never mean the person gets nothing
- A public form is a target for bots, and every bot that gets through costs a model call
Our approach
Answer the form first, then do the work. The function checks the request, returns straight away, and finishes the reply in the background, so the form never times out and never sends twice.
Write the reply to the task, not to a template. The model gets the task in the sender's own words and strict rules: never invent a client, a result, a number or a price, and say plainly that an automation wrote it.
Give every failure a way out. Any error in the AI step falls back to a written reply that still names the task, and the logs record which one went out.
What we built
- A hand-built form with a short-lived token, an origin check, a hidden honeypot field and a rate limit in front of any work
- Claude writes the subject and body as strict JSON, about the task the person described
- Resend delivers the reply, with a booking link appended by the code, not the model
- HubSpot gets the contact (updated, never duplicated) and a note with the task and the reply that went out
- An owner copy of every lead and reply, marked AI or fallback, so a quiet failure is visible
The results
- The form gets its answer before any AI call starts, so a slow model cannot make it retry or double-send.
- Every failure path still sends a reply that names the person's task.
- A returning person updates their CRM contact instead of creating a second one.
- A bot that trips the honeypot gets the same answer a person gets, so it never learns what caught it.
- House style is enforced in code, not hoped for in the prompt: a dash the model slips into a reply is replaced before the email is sent.
Want this on your own enquiries?
Thirty minutes, no deck. If I cannot see anything worth automating, I will tell you that.