Blog
Forms, minus the backend
Practical, no-fluff guides on wiring up contact forms for static sites - spam, GDPR, file uploads, notifications, and the decisions that quietly cost you leads.
How to transfer form ownership to a client (without handing over your whole backend)
Handing off a client's contact form usually means a CSV export or a shared login. Here's what a real one-click ownership transfer replaces, and what moves.
· 5 min readRead postContact form not working? Here's how to actually find out why
"My contact form isn't sending" has about six common causes. A step-by-step way to check the network request, the console, spam filters, and the dashboard - instead of guessing.
· 5 min readRead postEmail signup forms on a static site (without an email marketing platform)
A single email field doesn't need a Mailchimp account. When a lightweight form backend is enough to collect signups, and when it's time to move to a real ESP.
· 4 min readRead postContact form best practices that actually increase conversions
Every extra field is a chance to lose a visitor. Practical, opinionated guidance on field count, labels, mobile input types, honeypot spam protection, and success states.
· 5 min readRead postOwn your form data: exporting every submission you've ever collected
Worried about lock-in with a hosted form backend? Formhook's full-account export packages every form, submission, and uploaded file into one ZIP archive you control - here's exactly what's inside and why it isn't a CSV.
· 4 min readRead postServerless contact forms: what "serverless" actually means here
"Serverless" gets used for two different contact-form setups - a function you write, or a backend you never write at all. Here's the real distinction.
· 4 min readRead postAJAX form submission: send a form without a page reload
The default HTML form submit reloads the page. Here's how to submit a form with fetch() instead - inline success/error states, progressive enhancement, and accessible status updates.
· 4 min readRead postSend form submissions to Slack (no code required)
Email alerts get buried in the inbox. Here's how to get website form submissions posted straight into a Slack channel - the DIY way and the zero-code way.
· 4 min readRead postreCAPTCHA alternatives for contact forms (that don't need Google)
Why Google reCAPTCHA is a questionable default for a contact form, and what to use instead: honeypot fields, rate limiting, and Cloudflare Turnstile.
· 4 min readRead postHow to add a contact form to Cloudflare Pages
Cloudflare Pages has no built-in form-handling service like Netlify does. Here's why, and the fastest way to get a working contact form live anyway.
· 3 min readRead postNetlify Forms alternative: a form backend that works anywhere
Netlify Forms only works if your site is built and deployed on Netlify. Here's what that requires, why it locks your forms to your host, and how a host-agnostic form backend avoids the problem.
· 4 min readRead postContact form testing: the pre-launch checklist
A broken contact form fails silently and costs leads for weeks. The 15-minute pre-launch checklist: happy path, validation, spam, mobile, and notifications.
· 3 min readRead postGoogle Forms vs a real contact form on your website
Google Forms is free and easy - but embedding it on a business site costs you branding, UX, and data control. When it's fine and when to use a native form.
· 3 min readRead postFile uploads on a static site: your real options
Static hosting can't receive files - but your forms still can. How multipart uploads work through a form backend, plus limits, security, and GDPR storage.
· 3 min readRead postPush notifications for forms: why email alerts aren't enough
Email alerts for form submissions get buried. Web push notifications reach your phone and desktop instantly - here's how they work and how to set them up.
· 3 min readRead postGDPR-compliant contact forms: a practical checklist
What GDPR actually requires from a contact form: lawful basis, data residency, retention, and privacy policy wording. A practical checklist for developers.
· 4 min readRead postMigrating from Formspree to Formhook: the ten-minute guide
Switching form backends is a one-line change. The full Formspree to Formhook migration: export, endpoint swap, spam settings, and testing - in ten minutes.
· 3 min readRead postContact form spam: honeypots, rate limits & Turnstile
How form spam actually works and the three layers that stop it: honeypot fields, rate limiting, and Cloudflare Turnstile - without punishing real visitors.
· 3 min readRead postMailto links vs contact forms: which loses fewer leads?
Mailto links fail silently without a mail client and expose your address to spam bots. When a mailto is fine, and when a contact form pays for itself.
· 3 min readRead postHow to add a contact form to GitHub Pages
GitHub Pages can't run server code, but you can still have a working contact form. Three approaches compared, with a copy-paste solution that takes a minute.
· 3 min readRead postWhat is a form backend? (And when you need one)
A form backend receives, stores, and forwards your website's form submissions so you don't run a server. Here's how they work and when you need one.
· 3 min readRead post