16 guides
Static site forms
Add a working form to any static or JAMstack site, no server.
A static site has no server to receive a form post, which is why a plain <form> on Astro, Hugo or GitHub Pages does nothing. These guides walk through the fix for each framework, with the markup you need and the mistakes worth skipping.
How to Add a Contact Form to a Vercel Site
Vercel doesn't do forms. Writing a function is the usual answer, and it's four surprises deep: a public POST endpoint, a stateless rate limiter, and a Hobby plan that bars commercial use.
How to Build a Multi-Step Form in HTML (No Library Needed)
One form, several steps, about 30 lines of JavaScript. Includes the whole-form validation trap that silently breaks the Enter key, and a generator that writes it all for you.
How to Convert a Google Form to HTML (and Style It Your Way)
Google Forms can't be exported as HTML or restyled in an embed. Three real options, what each one costs you, and a free converter that does the rebuild in seconds.
Vue Contact Form Without a Backend (Composition API)
Two copy-paste patterns for a Vue 3 contact form that emails you — no Express server, no credentials in the client, spam handled server-side.
Add a Contact Form to GitHub Pages (No Server Needed)
GitHub Pages is static by design, so a working contact form needs one thing: somewhere to POST. Here's the whole setup, mailto traps and all.
Make an AI-Generated Contact Form Actually Work (v0, Bolt, Lovable)
Your v0/Bolt/Lovable site has a beautiful contact form that does nothing when submitted. Here's why the button is dead — and the one line that fixes it.
React Contact Form Without a Backend (Two Patterns)
No Express server, no API route, no email credentials in your client — two copy-paste patterns for a React contact form that actually delivers.
Webflow & Framer Forms: Route Submissions Anywhere
Native Webflow and Framer forms are fine until the plan limits bite. One attribute (or one embed) routes your designed form through a real backend instead.
Request a Quote Form: Examples & Best Practices (2026)
What to put on a request-a-quote form, real examples by industry, and the best practices that turn more visitors into qualified quote requests.
Hugo Contact Form Without a Backend (2026)
A copy-paste contact form for Hugo that emails you on every submission — drop it in as a shortcode, no server needed.
How to Fix CORS Errors When Submitting a Form
'Blocked by CORS policy' on a form POST? What the error actually means, why fetch() triggers it, and the fixes — including the plain-form path that avoids CORS entirely.
How to Submit a Form with JavaScript fetch()
The vanilla-JS pattern for submitting a form without a page reload — intercept submit, fetch() the data, and render success and per-field errors from the JSON response.
How to Handle Form Submissions in SvelteKit
Two ways to handle SvelteKit forms: native form actions with use:enhance, or a form backend that works even with adapter-static and no server.
How to Add Validation to Your Form
Reject bad submissions with server-side rules — required fields, formats, and limits — in a few clicks, no backend code. fetch() callers get per-field errors.
How to Handle Form Submissions in Next.js
Three ways to handle a Next.js form — Server Actions, Route Handlers, or a form backend — with code for each and a clear rule for choosing.
Astro Contact Form Without a Backend (2026)
A copy-paste contact form for Astro that emails you on every submission — no server or API route.