Blog
Practical notes on forms, static sites, and connecting FormTo to your stack.

GDPR and Form Data: What Every Developer Needs to Know
Learn how to manage GDPR compliance for web forms, from data residency and retention to deletion requests, and how FormTo simplifies the process for developers.
Read article →I looked at 500 "Contact Us" pages. 80% had the same three mistakes.
A weekend of clicking through Contact pages across startups, agencies, SaaS, and e-commerce sites. The pattern is brutal and the fix takes ten minutes.
Read article →Why your contact form emails are going to spam (and six fixes that actually work)
If your contact form submissions keep landing in the spam folder, the problem is almost never the message. It is the sender. Here are the six fixes, in the order you should try them.
Read article →Deploying FormTo on a €5 Hetzner VPS (the complete walkthrough)
A step-by-step guide to running your own FormTo instance on the cheapest Hetzner box. Fifteen minutes from Hetzner signup to a working form backend with automatic HTTPS.
Read article →Form spam protection without reCAPTCHA: seven techniques that work better
reCAPTCHA is slow, creepy, conversion-killing, and not even the best defense anymore. Here are seven alternatives — from the free one-liner that blocks 74% of spam to the heavier options for high-volume sites.
Read article →A form submission journey: 280 milliseconds from click to Slack
What actually happens between a user pressing "Send" and your team seeing a ping in Slack. A walk through the pipeline, millisecond by millisecond, and the places we cut time.
Read article →FormTo Cloud vs self-hosted: which one should you pick?
The exact same code runs in both. The difference is who operates the server. Here is the honest comparison, the cost math, and the decision rule I use when friends ask.
Read article →Gatsby contact form setup in four minutes (no Netlify required)
Gatsby is still powering thousands of production sites. Here is the no-nonsense, host-agnostic way to add a working contact form to a Gatsby project in under four minutes.
Read article →GDPR for contact forms: the ten-minute compliance guide nobody wrote
A plain-English walkthrough of what your contact form actually needs to be legal in the EU. No lawyers, no vague "consult your counsel," just the checklist.
Read article →How to add a contact form to a GitHub Pages site (the complete 2026 guide)
GitHub Pages is free, fast, and stubbornly static. It will not run your form handler. Here is the exact setup for a working contact form on GitHub Pages — with email, spam protection, and a thank-you page.
Read article →How forms die: seven ways a live contact form silently stops working
A contact form does not usually die with an error message. It dies quietly, and you find out three months later from a customer. Here are the seven ways it happens, with the checks that would have caught each one.
Read article →Jotform vs Google Forms vs FormTo: which one fits your use case
Three tools that all claim to solve "I need a form." They are actually solving three different problems. Here is an honest breakdown of which one fits which job, from someone who works on one of them.
Read article →Netlify Forms alternatives: when 100 submissions a month is not enough
Netlify Forms is convenient until you hit the free tier limit and the upgrade math stops making sense. Here is when to leave, where to go, and how to migrate in an afternoon.
Read article →Nuxt contact form in four minutes (no API route, no Nitro handler)
Nuxt can spin up a server API route in about fifteen seconds. You do not need one for a contact form. Here is the four-minute setup that keeps your Nuxt site static and your inbox full.
Read article →An ode to the boring HTML form
A short manifesto in defense of the plain <form> element — the most boring, most reliable, most underrated piece of web infrastructure we still have. Stop wrapping it in frameworks. It already works.
Read article →The one optional field that doubled our reply rate
For two years our contact form had four fields. We added one optional field and our reply-to-reply rate doubled. Here is the field, why it worked, and what I think it says about contact forms in general.
Read article →Open-source form backends compared: FormTo vs Formbricks vs HeyForm vs OhMyForm
Four genuinely open-source form tools, one honest comparison. What each one is good at, where each one falls short, and which to pick depending on what you are actually building.
Read article →The economics of open-source SaaS: how FormTo makes money while giving the code away
A transparent look at how an AGPL-licensed product with a hosted twin actually keeps the lights on. No funnel charts, no "thought leadership," just the math and the reasoning.
Read article →I replaced Zapier with one webhook and a Google Sheet
A small act of defiance against monthly SaaS bills. How I took three Zaps, deleted them, and replaced the entire flow with one webhook and a fifty-line Apps Script.
Read article →I submitted a Contact form to 40 companies. Median reply time: 4 days.
I became the customer for a month. I submitted real questions through 40 contact forms and logged every reply. The results are bleaker and more interesting than I expected.
Read article →Self-hosting FormTo: the complete guide (Docker, HTTPS, backups)
Everything you need to run your own FormTo instance on your own server. Docker Compose, automatic HTTPS via Caddy, backups, updates, and the gotchas nobody writes down.
Read article →How to send HTML form submissions to email without a server (no PHP, no Node, no SMTP)
A beginner-friendly walkthrough: turn a plain HTML form into an email-delivering contact form without installing anything, setting up SMTP, or writing backend code.
Read article →The Submit button that doubled our reply rate (and the 11 labels we tried before it)
A six-week A/B test diary from our own landing page. Twelve button labels. Forty thousand page views. One clear winner and a handful of results that surprised us.
Read article →SvelteKit contact form in four minutes (no server actions required)
SvelteKit gives you server actions out of the box, which is great — and also slightly overkill for a contact form. Here is the four-minute setup that skips the backend entirely.
Read article →The 3 a.m. incident: how one contact form field nearly took down our on-call rotation
A post-mortem from the era before we built FormTo. One hidden field. One curious attacker. One extremely bad Tuesday night. And the lesson that informed most of our current defaults.
Read article →Typeform alternatives that do not price you out as you grow
Typeform is beautiful and expensive. Here are the alternatives worth considering in 2026, sorted by what you are actually trying to do — with honest notes on where each one fits.
Read article →What 10,000 form submissions taught us about how people actually write to businesses
We anonymised ten thousand real contact form submissions and read them, one by one, looking for patterns. Here is what the data says about how your customers write — and what they leave out.
Read article →Why we open-sourced FormTo (and why AGPL, specifically)
We published the entire FormTo codebase under AGPL-3.0 on GitHub. Here is why we made that choice, what it means for you, and what changes when a form backend lives in public.
Read article →How to add a contact form to WordPress without a plugin
Contact Form 7, WPForms, Ninja Forms, Gravity Forms — all fine, all bloated. Here is how to add a working contact form to any WordPress site in four minutes, without installing a single plugin.
Read article →Eleventy contact forms: the four-minute setup I use on every site
Eleventy is the static site generator I keep coming back to. Here is the exact form setup I paste into every 11ty project, with honeypots and zero build-time magic.
Read article →A Framer contact form that actually sends emails (in four minutes)
Framer ships a form component, but the default delivery is limited. Here is how to wire it to a hosted endpoint so submissions land in your inbox, a CRM, or Slack.
Read article →A contact form for your Hugo site in four minutes (no Netlify required)
Hugo is the fastest static site generator on the planet and ships with exactly zero form handling. Here is how to add one in four minutes, on any host, without lock-in.
Read article →Ship a contact form on Next.js in four minutes (no API route)
Add a working contact form to a Next.js App Router site without writing a single server action or route handler. Plain HTML, hosted endpoint, done.
Read article →Webflow contact forms without the submission cap (four-minute fix)
Webflow charges per form submission on lower plans and the default dashboard is rough. Here is how to send submissions somewhere better in under four minutes.
Read article →Ship a contact form on Astro before your coffee gets cold
A real four-minute walkthrough for adding a working contact form to an Astro site. No backend, no SSR, no excuses.
Read article →I logged every bot that hit our forms for 30 days. Here is what they wanted.
Forty-seven thousand requests. Twelve real humans. A field report on what form spam actually looks like in 2026 — and what finally stops it.
Read article →Formspree, Basin, Getform: I ran the same form through all of them
Four hosted form tools, one week, fifty submissions each. A fair, occasionally unflattering look at who wins at what — including us.
Read article →The $4,200 contact form: what a custom backend actually cost us
We built our own form endpoint to save money. A year later we added up the invoices. Here is the honest breakdown, line by line.
Read article →
More topics: Documentation, FAQ, Contact.