Furrow Forms

Git-based CMS · works with Furrow Forms

Contact forms for Pages CMS sites

Your content lives on GitHub; your forms finally have a backend.

paste this into your agent

Fetch furrowforms.com/ai and set up a contact form backend for my Pages CMS site.

agent-readable recipe: /forms-for/pages-cms.md

prefer clicking? start in the dashboard

src/components/ContactForm.astro
---
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

Why Pages CMS sites need a form backend

Pages CMS is the no-infrastructure CMS: point it at a GitHub repo, describe your content in .pages.yml, and editors get a clean UI while everything remains files in git. Sites built this way — typically Astro, Eleventy, or Hugo on static hosting — inherit git’s one blind spot: nothing in the stack can accept a form submission. Furrow Forms is the same kind of answer Pages CMS is: a hosted service doing one job well, so your architecture stays a repo and a static host. Form markup in your templates, one endpoint behind it, spam and notifications handled.

01

A repo and a static host can’t process POSTs

The entire stack is files. Furrow supplies the missing endpoint — visitors get redirected to your thank-you page, you get an email, and nothing about the deployment changes.

02

No-infrastructure should stay no-infrastructure

Adding a serverless function for forms reintroduces exactly what Pages CMS removed. Furrow keeps the operational surface at zero: config lives on the project, changes apply without a deploy.

03

Spam protection you don’t maintain

Honeypot, Cloudflare Turnstile, domain allowlisting, and rate limits come configured at the project level — and spam never counts toward your free-tier quota.

Two ways in

Set it up yourself, or don’t

Hand it to your agent

[ recommended ]

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 Pages CMS site.
  1. 1.Registers the account over POST /api/register — you read one 6-digit email code
  2. 2.Provisions the site: client, project, and forms in one idempotent bootstrap_site call
  3. 3.Pastes the generated snippet into your codebase
  4. 4.Fires test_webhook and verifies the signed delivery

Or do it by hand

  1. 01Create a free account and a project for the site.
  2. 02Add the form snippet to your template and commit — Pages CMS keeps editing content as before.
  3. 03Configure your domain, notify emails, and thank-you URL once on the project.
  4. 04Done: content changes are commits, submissions are Furrow’s problem.

free tier: 100 subs/mo · unlimited forms · full API + MCP · pricing →

FAQ

Pages CMS + Furrow Forms, answered

How do I add a contact form to a Pages CMS site?

Add a plain HTML form to your site’s template with the action pointed at a Furrow Forms endpoint. The site stays a static build from your GitHub repo; Furrow receives submissions, filters spam, and emails your team.

Do I need any serverless functions or backend code?

No. The form POSTs directly from the browser to api.furrowforms.com. That is the point: Pages CMS keeps content infrastructure at zero, and Furrow does the same for forms.

Can editors see form submissions in Pages CMS?

Submissions live in Furrow, not the repo — by design, since most raw form traffic is spam. Your team gets notification emails, the dashboard, and (if you want) signed webhooks into any tool you already use.

The form backend your agent can run.

paste this into your agent

Fetch furrowforms.com/ai and set up forms for this site.

Setup for agents →