integrations · static site generator

A contact form for Jekyll: no plugin, no server, works on GitHub Pages.

Jekyll builds static HTML, so there's no server to receive a form post, and GitHub Pages, where most Jekyll sites live, won't run one for you. The standard fix is a form endpoint: point a plain HTML form at mailcontact and submissions land in your project's inbox, with a notification in Discord, Slack, email, or a webhook.

No Gemfile changes, no plugin to smuggle past the GitHub Pages whitelist, no JavaScript required. Save the form as an include once, then drop {% include contact-form.html %} into any page or layout.

the snippet

A working form for Jekyll, in one paste.

Point the form at your project's mailcontact endpoint. Submissions land in your project inbox. No server, no API route, no email service to wire up.

_includes/contact-form.html
<form action="https://mailcontact.app/api/forms/your-form-id" method="POST">
  <label for="name">Name</label>
  <input type="text" id="name" name="name" />

  <label for="email">Email</label>
  <input type="email" id="email" name="email" required />

  <label for="message">Message</label>
  <textarea id="message" name="message" required></textarea>

  <button type="submit">Send</button>
</form>

how it works

Three steps, start to finish.

01

Create an inbox

One inbox per site. Name it after your Jekyll project and you get a form endpoint and a project email address immediately.

02

Add the include

Save the snippet as _includes/contact-form.html, then include it from your contact page, a layout, or the footer. It's your markup. Your theme styles it.

03

Get notified

Add a Discord, Slack, email, or webhook channel. Every submission pings you where you already are, no checking a dashboard.

why mailcontact

Built to pair well with Jekyll.

GitHub Pages safe

GitHub Pages runs Jekyll with a fixed plugin whitelist and zero server code. A form that posts to an external endpoint sidesteps both limits: nothing to install, nothing to build.

One include, every page

Jekyll's include system means you write the form once in _includes/ and reuse it across pages and layouts. Change the endpoint in one file, every page follows.

One inbox per site

A blog, a project docs site, a landing page: each Jekyll site gets its own inbox and its own address, instead of everything landing in your personal email.

faq

Jekyll + mailcontact, answered

Can Jekyll handle form submissions by itself?

No. Jekyll generates static HTML at build time. There's no server process to receive a POST. You need an external endpoint like mailcontact to accept the submission and store it.

Does this work on GitHub Pages?

Yes. GitHub Pages runs no server code and only allows whitelisted plugins, but this form needs neither: it posts straight to mailcontact's servers from the visitor's browser.

How do I show a thank-you message after submitting?

Submit with a few lines of fetch in a submit handler to keep the visitor on the page and show an inline success state. A configurable redirect for native form posts is coming with the launch.

Can I style the form to match my Jekyll theme?

Yes. The snippet is plain HTML in your include, so Minima, Chirpy, or any custom theme styles it like the rest of your site. Add classes and CSS however you normally would.

related

Also works with

One inbox for every Jekyll project you ship.

Forms and a real email address, together, with notifications where you live. Launching soon. Be the first to know.

No spam. It's kind of our thing.