Furrow Forms

Frameworks & SSGs · works with Furrow Forms

Contact forms for Jekyll sites

The classic GitHub Pages pairing finally gets a working contact form.

paste this into your agent

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

agent-readable recipe: /forms-for/jekyll.md

prefer clicking? start in the dashboard

_includes/contact-form.html
<form action="https://api.furrowforms.com/s/fp_k7m2" method="POST">
  <input type="text" name="_gotcha" style="display:none" tabindex="-1" />
  <input type="hidden" name="_ft" value="" />
  <script>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 Jekyll sites need a form backend

Jekyll is the elder statesman of static sites and the engine behind classic GitHub Pages — which means millions of sites with markdown content, Liquid templates, and no way to receive a message. GitHub Pages runs no server code at all, and Jekyll wouldn’t offer any anyway. Furrow Forms completes the picture with one include: a plain HTML form posting to a managed endpoint that filters spam, stores the submission, emails you, and sends the visitor to your thank-you page. No plugins, no build changes, no JavaScript.

01

GitHub Pages will never run your form handler

Pages serves files, full stop. The only way a Jekyll site on GitHub Pages gets a working form is an external backend — Furrow is one built for exactly this.

02

No plugin, no gem, no build change

The form is markup in an include. It works with the default GitHub Pages build, safe-mode restrictions and all.

03

Old site, modern spam pressure

Long-lived Jekyll sites are exactly the ones bots have found. Honeypot, optional Turnstile, domain allowlisting, and rate limits handle it — configured once, not fought in your inbox.

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 Jekyll 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 include and reference it from your contact page: {% include contact-form.html %}.
  3. 03Set your domain (username.github.io or custom), notify email, and thank-you URL on the project.
  4. 04git push — GitHub Pages rebuilds, and the form works.

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

FAQ

Jekyll + Furrow Forms, answered

How do I add a contact form to a Jekyll site on GitHub Pages?

Add a plain HTML form in an include with its action pointed at a Furrow Forms endpoint. GitHub Pages keeps serving static files; Furrow receives the POST, filters spam, emails you, and redirects the visitor to your thank-you page.

Do Jekyll form plugins exist?

Server-side form handling can’t exist as a Jekyll plugin — Jekyll runs at build time and GitHub Pages runs plugins in safe mode anyway. Form backends are the standard answer, and Furrow requires no build integration at all.

Will this work on a custom domain?

Yes — add the domain to your Furrow project’s allowlist. The allowlist is also what keeps other sites from borrowing your endpoint.

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 →