How to Build a Contact Form Without a Backend in 2025
Building a contact form used to mean writing server-side code and configuring email servers. In 2025 you can skip all of that and be live in under 5 minutes.
formvoxo Team
Developer Relations
Quick-start guide
Have your first form live in under 5 minutes - no server required.
Building a contact form used to mean spinning up a server, writing PHP mail handlers, wrestling with SMTP configuration, and worrying about spam bots. In 2025 there is a much better way: use a form backend service to handle all of that for you.
In this guide you will build a fully functional contact form with email notifications, spam protection, and a thank-you redirect in under 5 minutes.
What you need
- An HTML file (or any website - static, React, WordPress, whatever)
- A free formvoxo account (takes 30 seconds to create)
Step 1: Create your form in the dashboard
Sign up at formvoxo.com, click Create form, give it a name like "Contact Form", and enter the email address where you want to receive submissions. You will get a unique endpoint URL like this:
https://formvoxo.com/f/abc123xyz
Step 2: Write the HTML
Point your form's action attribute at your endpoint. That is literally all you need to do:
<!-- name, email, message - that is all -->
<form
action="https://formvoxo.com/f/abc123xyz"
method="POST">
<input type="text" name="name" placeholder="Your name" required>
<input type="email" name="email" placeholder="Your email" required>
<textarea name="message" rows="4" required></textarea>
<button type="submit">Send message</button>
</form>
No PHP. No Node.js. No SMTP configuration. That is your entire contact form.
Step 3: Add honeypot spam protection
formvoxo checks for a hidden _honey field automatically. Bots fill it in; real users never see it. Add this inside your form:
<!-- honeypot - invisible to real users, bots fill it in -->
<input
type="text"
name="_honey"
style="display:none"
tabindex="-1"
autocomplete="off">
Step 4: Custom redirect (optional)
By default users land on a hosted thank-you page. To send them somewhere of your own, add a hidden _redirect field:
<input
type="hidden"
name="_redirect"
value="https://yoursite.com/thank-you">
Step 5: AJAX mode for React, Vue, Next.js
If you are building a single-page app, send the form via fetch with Accept: application/json. formvoxo returns JSON instead of redirecting the page:
const res = await fetch('https://formvoxo.com/f/abc123xyz', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({ name, email, message }),
});
const data = await res.json();
if (data.success) {
// show inline success message
} else {
// handle error
}
What you get for free
Email notifications
Get notified the moment a submission arrives.
Spam protection
Honeypot detection and per-IP rate limiting on every form.
Submissions dashboard
View, search, and export all your submissions.
Ready to try it?
Create your free formvoxo account and have your contact form live in the next 5 minutes.
Share this article