We build Formgong (disclosure), a hosted form backend. This is the Next.js / v0 side of it, in case it saves someone an evening.
The v0 route. v0 can generate a form that's wired to nothing, or one that wants Server Actions + Resend + secrets. For a plain contact form you can skip all of that: a client component that fetches one endpoint is enough. Our v0 prompt tells it exactly that:
- a
"use client"component; - POST to
https://formgong.com/submitwithAccept: application/json; - a public
access_key; - a
botcheckhoneypot; - an inline thank-you message when
success === true; - no API route, no database, no email code.
Prompt: https://formgong.com/en/docs/v0/?ref=vercel-community
The Next.js route. @formgong/next has three options:
// app/contact/page.tsx: browser-direct, no server codeimport { ContactForm } from "@formgong/next/client";
export default function Page() { return <ContactForm accessKey={process.env.NEXT_PUBLIC_FORMGONG_ACCESS_KEY!} />;}// app/api/contact/route.ts: or a Route Handlerimport { formgongRoute } from "@formgong/next/server";export const POST = formgongRoute({ subject: "Website lead" });There's also a Server Action helper (submitToFormgong + <ActionForm>, useActionState on React 19, useFormState on Next 14). Or run npx formgong init to add a form to an existing project.
Where the lead goes: email (Reply-To set to the visitor) and Telegram, both on the free plan. Signed webhooks if you want n8n/Make/Zapier. Spam handling is a honeypot plus cookie-free checks, and your own Turnstile if you want it; plain HTML posts are never penalised. Data is stored in the EU.
Free: 300 submissions a month (as of Oct 2026).
More: https://formgong.com/en/for/next/?ref=vercel-community
Feedback welcome, especially on the Server Action helper API. Would you rather get a thrown error than a { status, message } object?