The wedge // AI-built websites

The form backend
for AI-built websites

AI builders got very good at generating the form. They still don’t give it anywhere to go. MakeTheForm is the last mile: one endpoint that receives, filters, emails, and stores every submission: no Supabase, no Resend, no server.

The short answer

An AI website builder generates the form’s interface but not the backend that receives it, so submissions have nowhere to land. A form backend is a hosted endpoint you point the form at. It spam-filters, emails, and stores each submission, so an AI-built site gets a production-ready contact form with no server code.

Why AI-built forms send nothing

The markup is almost always fine. The failure is in the three lines that decide what happens on submit, and it takes one of three shapes.

  1. 01

    The handler blocks the submit and posts nowhere

    The most common one by far. The generated handler calls preventDefault to stop the page navigating, sets a success message in state, and never makes a network request at all. The form looks like it works, the visitor is thanked, and nothing has left the browser. Open the network tab and submit: if no request appears, this is what you have.

    Fix: Give the handler somewhere to post. Either restore the native submit by setting the form action to your endpoint, or add the fetch call the agent left out.

  2. 02

    It invents an API key that does not exist

    Agents assume any integration needs a secret, so they add an environment variable, wire it into a header, and leave you looking for a key to paste. There is nothing to find. A form endpoint is public by design because it ships inside client-side HTML, and a value visible in the page was never a credential.

    Fix: Delete the invented variable and put the endpoint URL straight into the client code, where it belongs.

  3. 03

    It wires the form to a backend it also invented

    On builders that can scaffold server code, the agent sometimes writes an API route, a database table, and a mail integration to go with your contact form. It compiles and it deploys, and now you own a mail provider reputation, a spam problem, and a schema migration, for a form that collects a name and a message.

    Fix: Point the form at an endpoint instead and delete the scaffolding. The three jobs it was doing are the ones you were trying not to take on.

None of these are bugs in the builder. An agent writing a form has no way to know which backend you intend to use, so it produces something that looks complete and defers the one decision it cannot make. Giving it the endpoint up front removes the guess, which is what the prompt below does.

The backend you’d otherwise build

Every AI builder eventually offers to scaffold this for you. Here’s what that actually signs you up to own, versus what the endpoint already handles.

The jobDo it yourselfMakeTheForm
Receive the POSTWrite + host a route or edge functionBuilt in
Stop spamAdd honeypot, captcha, rate limits yourselfHoneypot + Turnstile + rate limits
Email youWire Resend/SES, verify a domain, watch deliverabilityAuthenticated sending, sender in Reply-To
Store submissionsProvision a database, model a table, secure itSearchable inbox + CSV export
Know it workedBuild logging + retry + alertingVisible delivery timeline + retries

One prompt, any builder

Paste this into your builder with your own endpoint URL. It pins the guardrails agents get wrong: inventing API keys, hiding the endpoint as a secret, or wiping the form on error.

AI builder prompt
Connect the existing contact form on this site to the MakeTheForm endpoint:

https://mtform.co/f/your-form-key

Requirements:
- Submit with fetch as JSON (Content-Type: application/json). Do not add a backend route.
- Keep the current design and markup structure. Do not restyle the form.
- Disable the submit button while the request is in flight.
- Treat any HTTP 2xx as success; show an inline success message and reset the form.
- On failure, show the message from the JSON response at error.message, and PRESERVE the values
  the user already entered. Do not reset the form on error.
- Include a hidden honeypot field named exactly "_mtf_honeypot". It must be visually hidden with
  position:absolute;left:-9999px, have tabindex="-1", autocomplete="off", and aria-hidden="true".
  Never make it display:none, and never make it required.
- This endpoint URL is public and safe to put in client-side code. Do NOT invent, request, or
  reference an API key, and do not move it into an environment variable.
- Do not add any analytics or logging of the submitted field values.

Frequently asked questions

What is a form backend for an AI-built website?

It’s a hosted endpoint that receives your form’s submissions, filters spam, emails them to you, and stores them. AI builders generate the form’s interface but not this backend, so you point the form at an endpoint instead of writing and hosting server code.

Why doesn’t my Lovable / Bolt / v0 form send anything?

Because the builder only created the front end. The submit button has nothing to POST to. Wiring the form to a form endpoint gives it a real destination that delivers and stores each submission.

Do I need Supabase, Firebase, or Resend for a contact form?

Not for a contact or lead form. Those are worth it when you need your own database or full control of email. To simply receive submissions by email and keep a searchable copy, one endpoint is far less to build and secure.

Is the endpoint safe to expose in AI-generated client code?

Yes. The public form key is a non-secret address designed for the browser. Your destination email never appears in the page source, and abuse is handled by rate limits, origin rules, and spam filtering.

Which AI builders are supported?

Any that output standard HTML/JS: Lovable, Bolt.new, v0, Cursor, Replit, Framer, and more. Each has a dedicated guide with a copy-paste prompt, and they all POST to the same kind of endpoint.

Ship the backend in 3 minutes

Your AI builder did the hard-looking part. Give the form somewhere to go.

Create free endpoint