All resources

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.

Static site forms

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.

5 min read
Static site forms

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.

5 min read
Static site forms

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.

5 min read
Static site forms

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.

2 min read
Static site forms

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.

2 min read
Static site forms

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.

3 min read
Static site forms

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.

2 min read
Static site forms

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.

3 min read
Static site forms

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.

5 min read
Static site forms

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.

4 min read
Static site forms

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.

4 min read
Static site forms

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.

3 min read
Static site forms

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.

4 min read
Static site forms

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.

3 min read
Static site forms

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.

4 min read
Static site forms

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.

3 min read

Other topics