Deployment-mode-proof forms
nuxt generate today, edge rendering tomorrow — a form that talks to Furrow instead of a Nitro route survives every switch without a refactor.
Frameworks & SSGs · works with Furrow Forms
One composable-friendly endpoint — no server/api/contact.post.ts to babysit.
paste this into your agent
Fetch furrowforms.com/ai and set up a contact form backend for my Nuxt site.agent-readable recipe: /forms-for/nuxt.md
prefer clicking? start in the dashboard
<script setup>
const loadedAt = Date.now();
const sent = ref(false);
async function submit(e) {
const res = await fetch('https://api.furrowforms.com/s/fp_k7m2', {
method: 'POST',
body: new FormData(e.target),
});
sent.value = (await res.json()).ok;
}
</script>
<template>
<p v-if="sent">Thanks — we’ll be in touch.</p>
<form v-else @submit.prevent="submit">
<input type="text" name="_gotcha" style="display:none" tabindex="-1" />
<input type="hidden" name="_ft" :value="loadedAt" />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<button>Send</button>
</form>
</template>The gap
Nuxt gives you three ways to deploy — static, server, edge — and a contact form should survive all of them. Writing a server/api/contact.post.ts handler ties the form to the one deployment mode that has a server, and hands you spam filtering and mail delivery as ongoing chores. Furrow Forms keeps the form in the component where it belongs: POST the FormData to your endpoint, read back { ok, id }, show your success state. Static generate, SSR, or edge — the form neither knows nor cares.
nuxt generate today, edge rendering tomorrow — a form that talks to Furrow instead of a Nitro route survives every switch without a refactor.
Validation, honeypot, captcha, rate limits, mail provider, retries: Furrow’s defaults replace the whole server/api file and its dependencies.
Submit with $fetch or plain fetch, get JSON back, drive your reactive success state. Or skip JS entirely with a classic form action and redirect.
Two ways in
Furrow’s whole control plane is an API and MCP server. Paste this prompt into Claude Code, Cursor, or any agent — it does the rest:
paste this into your agent
Fetch furrowforms.com/ai and set up a contact form backend for my Nuxt site.free tier: 100 subs/mo · unlimited forms · full API + MCP · pricing →
FAQ
POST the form’s FormData to a Furrow Forms endpoint from your component — no server/api route needed. Furrow filters spam, stores the submission, emails your team, and returns JSON you can use for an inline success state.
Yes — that is the ideal case. The static site has no server, and it doesn’t need one: the browser talks directly to Furrow, and CORS is honored for the domains you allow on the project.
Configure a webhook on the project: every delivery is HMAC-signed with a timestamp header, retried with backoff up to 8 attempts, and visible in a delivery log — verify and route into whatever your team uses.
paste this into your agent
Fetch furrowforms.com/ai and set up forms for this site.