Forms

Waveform forms are first-party: created in conversation, rendered as part of your site's code, and collected into your dashboard. No external form service, no third-party scripts, no iframe embeds.

Creating a form

Ask for what you need:

"Add a contact form with name, email, and message."

"The cake request form needs a date picker and a budget dropdown."

Waveform generates the form component in your site's design language, wires the submission endpoint, and adds validation.

Reading submissions (Results)

Open the Forms / Results tab in your workspace to see submissions for each form — filter by status (new / contacted / closed), update lead state, and export CSV. Ask in chat: "any new form submissions this week?"

Spam protection

Forms ship with honeypot fields, per-IP rate limiting, and optional Cloudflare Turnstile (when TURNSTILE_SECRET_KEY is configured). Submissions that fail validation never reach your inbox.

Notifications & destinations

Set a notify email and optional autoresponder (subject/body) from Results → Settings. Changing the notify address sends a verification email; submissions are only emailed to a verified address (pending addresses show an Unverified badge — use Resend verification if you need a new link).

With lead routing enabled, each submission is delivered via the leads/deliver job to email and signed webhook destinations (HMAC X-Waveform-Signature), with retries and dead-letter visibility after repeated failures.

Conversion tracking

Form submissions can be counted as conversion goals in analytics, and used as the success metric for A/B experiments — "which headline gets more inquiries?" is a question Waveform can answer with data.