A plain HTML form needs somewhere to send its data. Traditionally that means standing up a server, writing an endpoint to receive the POST, validating the input, storing it, and emailing yourself a notification. That is a lot of moving parts for a contact form.
Point the form at one endpoint
Formward replaces all of it with a single endpoint. You point your form's action attribute at your unique Formward URL, keep your fields exactly as they are, and you are done. No JavaScript is required, though an AJAX submission works just as well if you want a smoother experience.
<form action="https://forms.formward.eu/f/<form id>" method="POST">
<label>Name <input type="text" name="name" required></label>
<label>Email <input type="email" name="email" required></label>
<label>Message <textarea name="message" required></textarea></label>
<!-- Honeypot: hidden from people, left empty -->
<input type="text" name="_gotcha" style="position:absolute;left:-9999px;opacity:0" tabindex="-1" autocomplete="off">
<button type="submit">Send</button>
</form>const form = document.querySelector("form");
form.addEventListener("submit", async (event) => {
event.preventDefault();
const res = await fetch(form.action, {
method: "POST",
headers: { Accept: "application/json" },
body: new URLSearchParams(new FormData(form)),
});
const data = await res.json().catch(() => ({ ok: false, error: "Unexpected response" }));
if (res.ok && data.ok) form.reset();
else console.error(res.status, data.error);
});What happens to a submission
When a submission arrives, Formward validates it, filters spam, stores it in the EU, and sends you a notification email. You read submissions in the dashboard, export them to CSV, or forward them to your team. Your site stays a static site, with no server for you to patch, scale, or secure.
This is the whole pitch: the form backend you would otherwise have built, run for you, in Europe, without the maintenance. Drop in the endpoint and ship.