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 (no shared login)
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
A contact form that isn't sending usually has one of six common causes. Check the network request, console, spam filters and dashboard step by step.
· 5 min readRead postEmail signup forms on a static site, no 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 guidance on field count, labels, mobile input types, honeypot spam protection and success states.
· 5 min readRead postOwn your form data: export every submission you've collected
Worried about form-backend lock-in? Formhook's full export packs every form, submission and uploaded file into one ZIP you control. Here's what's inside.
· 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
A default HTML form submit reloads the page. Use 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 on sites built and deployed on Netlify. Here's why that locks your forms to your host, and how a host-agnostic backend avoids it.
· 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 form: checklist, notice text & example
What GDPR requires from a contact form, plus a copy-paste privacy notice, optional checkbox wording and an HTML example. Not legal advice.
· 6 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