First-party build example
What goes into a small inquiry form before it is safe to publish
The inquiry forms on the corporate AI training page and the hire Evan page are small, but they take a visitor's contact details. This page describes how they are specified and checked. It is a build example, with no private screenshots or client information.
Both public forms were checked: the pages load with a 200 response and show the four fields below.
The specification: four fields, two services
One shared form component serves both pages. It sends the service as an identifier, corporate-training for workshops and ai-development for project inquiries, so only the labels and wording differ.
| Field name | Visible label | Rule |
|---|---|---|
| name | Your name | Required, 2 to 100 characters |
| Required, valid email format, up to 254 characters | ||
| company | Company or organization | Required, 2 to 150 characters |
| details | What should your team learn? / What are you trying to build or improve? | Required, 20 to 4,000 characters |
Browser checks
Required fields, an email input type, and minimum and maximum lengths are set on the inputs, so the browser stops most mistakes before anything is sent. Autocomplete hints help visitors fill in their own details.
Server checks
- Values are trimmed, then length-checked again. Details must be 20 to 4,000 characters, name and company at least 2.
- The email must match a simple address pattern and contain no line breaks.
- Requests from other origins are refused.
- A hidden honeypot field catches simple bots. A filled value is rejected.
- A per-email limiter caps repeated submissions in an hour.
The server never trusts the browser. The same rules apply even if someone bypasses the page.
What the visitor sees
- Idle
- The form is ready. The browser blocks submission until every required field is valid.
- Sending
- The button is disabled and reads that the inquiry is sending. A second click does nothing.
- Success
- Shown only when the server returns accepted true and a reference string. The message says the email service accepted it for Evan and that no booking or payment was made.
- Error
- Shown with an alert role. The typed text stays in the form so nothing has to be retyped.
When the request takes too long
The form waits 20 seconds. If nothing is confirmed by then, it keeps the visitor's text and says the send could not be confirmed. It asks them to email Evan directly instead of retrying, because the first message may still have gone through and a retry could create a duplicate. Accepted means the server received confirmation from the email provider. It does not guarantee inbox delivery.
What happens to an inquiry
The API sends a notification email to the owner and returns an accepted flag with a reference only after the provider confirms it. A person reads the message and, if it fits, talks through scope with the sender.
These service inquiries are emailed to Evan for a personal response and are not enrolled in the site's automated follow-up sequences. The privacy policy covers how details are used.
Where Replit and AI coding fit
An AI coding tool can draft a form like this quickly. The judgment is in the specification above and the review below: what counts as valid, what to do on failure, and what to promise the visitor. That is the skill taught in Replit training, AI coding training, and Claude Code training.
Live release checklist
- Canonical tag on each form page points at the page's own address.
- Every field has a visible label connected to its input, and the help text is announced with the details field.
- Both pages return HTTP 200 and the four fields are present in the page.
- The hidden honeypot field is empty for real visitors and is not reachable by keyboard.
- Internal links, the privacy link, and the email fallback all work.
- On a phone-sized screen the form is usable, the button is reachable, and links are tappable.
- A staging review covers the invalid, too-short, and valid-looking states.
- No test email is sent and no payment is made until the owner authorizes a real test.
Questions about this build
Does this form store inquiries in a CRM?
No. These service inquiries are emailed to Evan for a personal response, not stored in a CRM or enrolled in the site's automated follow-up sequences.
Does a success message guarantee the email reached an inbox?
No. It means the email service confirmed it accepted the message. Delivery to an inbox can still depend on things outside the site, which is why the page shows a direct email address.
What happens after someone submits?
These service inquiries are emailed to Evan for a personal response. They are not enrolled in the site's automated follow-up sequences. Nothing is quoted or scheduled automatically.
Use the forms or talk it through
Need your team to learn this process? Request a team workshop quote. Want a tool built? Use the developer inquiry form. You can also read about corporate AI training.