SounnyForms
API Online
Client Portal
REACT & NEXT.JS INTEGRATION

React Contact Form Backend Without Server Setup

Add lightning-fast contact form handling, resume uploads, and lead capture to any React app in seconds with zero backend code. Includes the official sounny-forms React hook.

Create Your Free Form Endpoint View Code Example
📦 1. Install SDK via npm
npm install sounny-forms
⚛️ 2. ContactForm.jsx (using useSounnyForm Hook)
import React from 'react';
import { useSounnyForm } from 'sounny-forms/react';

export default function ContactForm() {
  // Pass your email address or custom form ID from the SounnyForms dashboard
  const { submitting, succeeded, error, handleSubmit } = useSounnyForm('hello@yourcompany.com');

  if (succeeded) {
    return (
      <div style={{ padding: '24px', background: '#ecfdf5', color: '#065f46', borderRadius: '12px', border: '1px solid #a7f3d0' }}>
        <h3 style={{ fontSize: '18px', fontWeight: 700, marginBottom: '6px' }}>Message Sent Successfully!</h3>
        <p>Thank you for reaching out. We will get back to you shortly.</p>
      </div>
    );
  }

  return (
    <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '16px', maxWidth: '480px' }}>
      <label style={{ fontSize: '14px', fontWeight: 600, color: '#334155' }}>
        Your Name
        <input type="text" name="name" required style={{ width: '100%', marginTop: '4px', padding: '10px 14px', borderRadius: '8px', border: '1px solid #cbd5e1' }} />
      </label>

      <label style={{ fontSize: '14px', fontWeight: 600, color: '#334155' }}>
        Your Email Address
        <input type="email" name="email" required style={{ width: '100%', marginTop: '4px', padding: '10px 14px', borderRadius: '8px', border: '1px solid #cbd5e1' }} />
      </label>

      <label style={{ fontSize: '14px', fontWeight: 600, color: '#334155' }}>
        Message
        <textarea name="message" rows="4" required style={{ width: '100%', marginTop: '4px', padding: '10px 14px', borderRadius: '8px', border: '1px solid #cbd5e1' }}></textarea>
      </label>

      {error && <p style={{ color: '#dc2626', fontSize: '14px', fontWeight: 500 }}>{error.message}</p>}

      <button
        type="submit"
        disabled={submitting}
        style={{
          background: '#ff4d00',
          color: '#ffffff',
          fontWeight: 700,
          padding: '12px 24px',
          borderRadius: '8px',
          border: 'none',
          cursor: 'pointer',
          marginTop: '6px'
        }}
      >
        {submitting ? 'Transmitting...' : 'Send Inquiry'}
      </button>
    </form>
  );
}
Zero API Keys or Servers
You do not need to configure Node.js servers, Resend API keys, or Docker containers. Submissions are delivered to your inbox with 1-click Reply-To headers.
🛡️
Invisible Anti-Spam Defense
Includes automated honeypot inputs and sub-second velocity timers. Blocks 100% of malicious crawler bots without frustrating human visitors with reCAPTCHAs.
📱
Real-Time Mobile PWA
Every submission is stored in Cloud Firestore. Receive live sound chimes and triage client leads immediately on your smartphone or desktop.
HELP & FAQS

Frequently Asked Questions

Can I upload file attachments like resumes or PDFs in React?

Yes! Simply add an <input type="file" name="attachment" /> to your React form. The useSounnyForm hook automatically detects multipart form data and generates signed download links for attachments up to 10MB.

How does the free tier compare to Formspree or Basin?

SounnyForms offers 50 submissions/mo completely free with unlimited forms, whereas competitors restrict you to 1 form and force upgrades at $12–$15/month. Our paid Starter plan is only $4/month for 1,000 submissions.

Can I use this with Next.js 14 / 15 App Router?

Yes. Add 'use client'; at the top of your component file, and useSounnyForm will manage form states without needing Next.js Server Actions or route handlers.