Platforms / Vercel

Contact form for Vercel — no serverless function required

Serverless functions for contact forms mean cold starts, secrets, and spam work you did not want.

Setup

  1. Deploy your frontend to Vercel.
  2. Create a FormHeron form.
  3. Point forms at FormHeron.
  4. Allow your production domain.

Working example

app/contact/page.tsx
export default function ContactPage() {
  return (
    <form action="https://formheron.com/f/YOUR_KEY" method="POST">
      <input type="email" name="email" required />
      <textarea name="message" required />
      <input type="text" name="_hp" tabIndex={-1} autoComplete="off" aria-hidden="true" style={{ position: "absolute", left: "-9999px" }} />
      <button type="submit">Send</button>
    </form>
  )
}

Common problems

Edge functions for forms

Skip them — FormHeron is already the edge for submissions.

Preview deployments

Add vercel.app preview hosts to the origin allowlist.

Environment secrets

Form public keys are not secrets. Never put ENCRYPTION or SMTP keys in the frontend project.

FAQ

Do I need a Vercel serverless function for contact forms?

No. Post directly to FormHeron.

Next.js on Vercel?

See the Next.js platform page.

Webhooks to my API?

Indie/Pro deliver HMAC-signed webhooks you can verify in any language.

Related platforms