splitforms.com

Booking / Appointment · Next.js

Booking / Appointment for Next.js

Time-slot booking with service selection — for salons, advisors, doctors. Free for 500 submissions per month — no backend, no SDK, no plugin.

  • 500 free / month
  • 6 fields ready
  • 60-second setup
Booking / Appointment for Next.js — copy-paste form code

Copy-paste code

Drop into any Next.js project.

Replace YOUR_ACCESS_KEY with your splitforms key, paste into a Next.js page, and ship. No build-time integration required.

Get free access key
Form.tsx
'use client';

import { useState, type FormEvent } from 'react';

export default function BookingForm() {
  const [status, setStatus] = useState<'idle' | 'sending' | 'sent' | 'error'>('idle');

  async function onSubmit(e: FormEvent<HTMLFormElement>) {
    e.preventDefault();
    setStatus('sending');

    const data = new FormData(e.currentTarget);
    data.set('access_key', 'YOUR_ACCESS_KEY');
    data.set('subject', 'New booking request');

    const res = await fetch('https://splitforms.com/api/submit', {
      method: 'POST',
      body: data,
      headers: { Accept: 'application/json' },
    });

    const json = await res.json();
    if (json.success && json.payment_url) {
      // Payment form: finish the payment on the secure Stripe page.
      window.location.href = json.payment_url;
      return;
    }
    setStatus(json.success ? 'sent' : 'error');
    if (json.success) e.currentTarget.reset();
  }

  if (status === 'sent') return <p>Thanks — we&rsquo;ll be in touch.</p>;

  return (
    <form onSubmit={onSubmit}>
      <label htmlFor="name">Full name *</label>
      <input id="name" type="text" name="name" placeholder="Jane Builder" required />
      <label htmlFor="email">Email *</label>
      <input id="email" type="email" name="email" placeholder="jane@example.com" required />
      <label htmlFor="phone">Phone *</label>
      <input id="phone" type="tel" name="phone" placeholder="+1 555 555 5555" required />
      <label htmlFor="service">Service *</label>
      <select id="service" name="service" required>
        <option value="">Choose…</option>
        <option>Consultation</option>
        <option>Standard appointment</option>
        <option>Premium / extended</option>
      </select>
      <label htmlFor="preferred_date">Preferred date *</label>
      <input id="preferred_date" type="date" name="preferred_date" required />
      <label htmlFor="notes">Notes</label>
      <textarea id="notes" name="notes" placeholder="Anything we should know in advance?" />

      <button type="submit" disabled={status === 'sending'}>
        {status === 'sending' ? 'Sending…' : 'Send'}
      </button>

      {status === 'error' && <p>Something went wrong. Try again.</p>}
    </form>
  );
}

Next.js + Booking / Appointment

Built for Next.js developers who hate operating a backend.

Next.js Server Actions handle the submit side but still leave you wiring SMTP, spam filtering, file uploads, and a dashboard. splitforms replaces all of that with one fetch('/api/submit') call. The booking / appointment works identically in App Router and Pages Router — it's just a FormData POST, no router-specific magic. Because Next.js pre-renders pages, the form HTML is in the DOM before any JavaScript executes, meaning instant Time-to-Interactive. The honeypot field is invisible to users but catches bots that scrape rendered HTML — especially important for Next.js sites where the form HTML is statically generated and predictable.

  • 500 form submissions per month, free forever
  • Unlimited forms on every plan, including Free
  • Spam protection — honeypot plus a tuned classifier
splitforms as the form backend for Next.js

Booking / Appointment fields

What every field actually does.

The posted payload contains full name, email, phone, service, preferred date, notes. Required fields are full name, email, phone, service and preferred date. Rename, remove, or add your own — splitforms accepts any name you POST.

  • Full name — Greeting + dashboard label so submissions don't all read 'anonymous'.
  • Email — Reply-to address — splitforms wires this so hitting reply goes back to the sender.
  • Phone — Faster qualification — phone leads convert ~3× higher than email-only on B2B forms.
booking / appointment fields in the splitforms dashboard

Next.js production notes

What changes when this booking / appointment lives in Next.js.

Without splitforms, you'd write a route handler at app/api/contact/route.ts, parse the FormData, configure SMTP via nodemailer or Resend (~10 minutes of secrets wrangling), add a Postgres or SQLite store for submissions, and then bolt on rate limiting, a honeypot check, an email-classifier or reCAPTCHA, and webhook fan-out. Server actions made the wiring slightly tidier in Next 14+, but the operational cost stays the same: a function with a runtime, a database, an outbound email provider, an inbox to monitor, and your name on the spam-filter incident report. Splitforms collapses all of that into a POST to a single URL.

  • Don't expose your access key client-side without domain locking
  • Server actions need `'use server'` and a real form, not fetch
  • App Router + Suspense + useSearchParams = static-prerender bailout
Next.js production notes for booking / appointment

Setup

Generate, embed, receive.

Three actions stand between you and your first booking / appointment submission — no backend, no database, no CAPTCHA library.

Generate a free splitforms key

Sign in at splitforms.com — your access key is created instantly. No credit card, no setup wizard, no SDK to install.

Paste the booking / appointment into your Next.js project

Drop the form snippet into a Next.js page, component, or layout. Replace YOUR_ACCESS_KEY with the key from your dashboard. The form action is a hard-coded URL — no env vars or build-time wiring needed.

Receive submissions

Dashboard updates live on Free. Free includes owner email delivery; Starter adds signed webhooks, CSV export, Slack/Discord forwarding, and BCC to your team.

How SplitForms works

From form to workflow in 3 simple steps.

Connect your form, collect every submission, and send data where it needs to go — without building backend infrastructure.

A SplitForms contact form submission launching straight to your inbox

Add your endpoint

Point your form to your unique SplitForms endpoint. That's it.

HTML form pointing at a SplitForms submit endpoint

Receive submissions

We instantly capture and organize every submission in your inbox.

Submissions inbox with searchable leads and status pills

Route anywhere

Send data to email, spreadsheets, CRMs, webhooks, and 7,000+ apps.

Generic integration tiles for email, sheets, chat, CRM, automate, and webhook

No credit card required. Set up in under 60 seconds.

Connect & automate

Connect your favorite tools and automate everything

SplitForms works with the destinations you route to and the platforms you build on — from Slack and Sheets to WordPress, Shopify, and Next.js.

Connect your SplitForms form to Slack, Google Sheets, Mailchimp, Zapier and more

Trusted by indie teams and agencies shipping forms worldwide

PETAL/COKRAFT.DELINEAR-XBUILD.DEVSTUDIO 71MERIDIANFRAME&CO

Testimonials

Loved by developers shipping at every scale.

40 quotes on record — from indie hacks to agency migrations.

Common questions

Booking / Appointment on Next.js answered.

View all FAQs
Does this booking / appointment work on Next.js?

Yes. The form is plain HTML with a single POST endpoint, so it runs on any Next.js site without server-side code, plugins, or SDKs. Drop the snippet into a Next.js page or component and submissions land in your splitforms dashboard.

How much does the booking / appointment cost on Next.js?

Free for 500 submissions per month — no credit card, no trial. Pro is $5/mo for 5,000 submissions, and there's a one-time $59 3-year plan (15,000 submissions/mo for 36 months). The same pricing applies regardless of which framework hosts the form.

Can I customize the fields?

Yes. The template ships with sensible defaults (full name, email, phone, service…) — add, remove, or rename any of them. Splitforms accepts whatever fields you POST.

How does spam protection work on the booking / appointment?

A hidden honeypot field catches dumb bots, and a tuned classifier scores the rest. You only see real submissions in your dashboard. No CAPTCHA, no friction for human users — and it works the same on Next.js as on any other framework.

Can I send the booking / appointment submissions to Slack or Discord?

Yes. Webhooks are available on paid plans, with auto-formatted payloads for Slack, Discord, and WhatsApp (via CallMeBot). Or send raw signed JSON to any URL — Zapier, n8n, your own server. Configure in the splitforms dashboard.

Will it work on a static Next.js site?

Yes — the form posts directly to splitforms from the browser, so no server is involved. Works on Vercel, Netlify, GitHub Pages, Cloudflare Pages, S3, or any plain Apache host.

Simple pricing

Start free. Scale when you need more.

Choose a plan that fits your workflow — from a free form endpoint to full automations, exports, and higher submission limits.

Free

$0

Free forever

 
Best for testing

For side projects and indie devs.

  • 500 submissions / mo
  • Unlimited forms
  • Email notifications included
  • Honeypot spam filtering
  • Submissions dashboard
  • MCP setup stays free
  • No credit card required

3-Year

$59/ 36 months
was $99 · save 40% · new-user price

Pay $59. 3 years sorted.

  • 15,000 submissions / mo
  • Unlimited forms
  • Everything in Pro
  • Renews every 3 years
  • Long-term discount
  • Priority support included
  • Vote on the roadmap

No credit card required on Free • Cancel anytime