19 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 Submit a Form with JavaScript fetch() (and Send It to Your Email)
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 Accept File Uploads on an HTML Form (Without a Backend)
A file input on a static site uploads nothing by itself. Here is the markup that works, the size and type limits worth enforcing on both sides, where the bytes end up, and a dated comparison of what the hosted form services allow.
How to Add a Custom Contact Form to Shopify Without an App
Shopify's built-in contact form is fixed and emails one address. Here is how to drop your own form into any Shopify page with Custom Liquid, route submissions where you want, and keep bots out, without installing an app.
How to Host a Form Without a Website
No website yet, but you need a form people can fill in from a link? Here are the honest options, what each gives up, and when a hosted form page is the right call.
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 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.