The repo can’t receive a POST
Keystatic sites deploy static or near-static. Furrow supplies the live endpoint so your architecture doesn’t grow a server just for the contact page.
Git-based CMS · works with Furrow Forms
Repo-native content, endpoint-backed forms — the whole stack stays in code.
paste this into your agent
Fetch furrowforms.com/ai and set up a contact form backend for my Keystatic site.agent-readable recipe: /forms-for/keystatic.md
prefer clicking? start in the dashboard
---
const endpoint = 'https://api.furrowforms.com/s/fp_k7m2';
---
<form action={endpoint} method="POST">
<input type="text" name="_gotcha" style="display:none" tabindex="-1" />
<input type="hidden" name="_ft" value="" />
<script is:inline>document.currentScript.previousElementSibling.value = Date.now();</script>
<input name="name" type="text" required />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<button>Send</button>
</form>The gap
Keystatic is the git-based CMS for people who want everything in the codebase: schema in TypeScript, content in Markdown and JSON, editing in a local or hosted admin UI, all committed to the same repo as your Astro or Next.js site. Furrow Forms is the matching answer for the one thing the repo can’t hold — form submissions. The form is markup in your components; the backend is one endpoint with spam filtering, storage, notifications, and signed webhooks; and the whole thing is provisionable from the command line or by an agent, in keeping with the workflow.
Keystatic sites deploy static or near-static. Furrow supplies the live endpoint so your architecture doesn’t grow a server just for the contact page.
You define collections in keystatic.config.ts; you can define forms just as declaratively through Furrow’s API or MCP — created idempotently by slug, so re-running setup never duplicates.
Honeypot, Turnstile, allowed domains, and rate limits live on the Furrow project — not as middleware you write. Astro and Next.js deployments get the same protection from the same config.
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 Keystatic site.free tier: 100 subs/mo · unlimited forms · full API + MCP · pricing →
FAQ
Add a form component to your Astro or Next.js code with its action pointed at a Furrow Forms endpoint. Keystatic keeps managing content in the repo; Furrow receives submissions, filters spam, and notifies you.
Yes. Furrow’s whole control plane is an API and MCP server: an agent (or a script) can register the account, create the project and form, and emit the snippet — the only human step is reading a 6-digit email verification code.
No — the classic HTML POST works with zero JavaScript and redirects to your thank-you page. If you prefer inline success states, submit via fetch() and read the JSON response instead.
paste this into your agent
Fetch furrowforms.com/ai and set up forms for this site.