Back to Integrations
Next.js logo

Next.js Integration Guide

The React framework for production with server-side rendering, static generation, and more.

Quick Start

Get started with Next.js and StaticBox in minutes:

npx create-next-app@latest my-staticbox-app

Setup Steps

1

Install Dependencies

Create a new Next.js project or use your existing one.

npx create-next-app@latest my-staticbox-app
cd my-staticbox-app
npm install
2

Create a Contact Form

Add a contact form component that submits to StaticBox.

// components/ContactForm.tsx
'use client';

import { useState } from 'react';

export default function ContactForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [isSubmitted, setIsSubmitted] = useState(false);

  const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
    e.preventDefault();
    setIsSubmitting(true);
    
    const form = e.currentTarget;
    const formData = new FormData(form);
    
    try {
      const response = await fetch('https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit', {
        method: 'POST',
        body: formData,
      });
      
      if (response.ok) {
        setIsSubmitted(true);
        form.reset();
      }
    } catch (error) {
      console.error('Error submitting form:', error);
    } finally {
      setIsSubmitting(false);
    }
  };

  if (isSubmitted) {
    return (
      <div className="p-6 bg-green-50 rounded-lg">
        <h3 className="text-lg font-semibold text-green-800">Thank you!</h3>
        <p className="text-green-600">Your message has been sent successfully.</p>
      </div>
    );
  }

  return (
    <form onSubmit={handleSubmit} className="space-y-4">
      <div>
        <label htmlFor="name" className="block text-sm font-medium mb-1">
          Name
        </label>
        <input
          type="text"
          id="name"
          name="name"
          required
          className="w-full px-3 py-2 border rounded-md"
        />
      </div>
      <div>
        <label htmlFor="email" className="block text-sm font-medium mb-1">
          Email
        </label>
        <input
          type="email"
          id="email"
          name="email"
          required
          className="w-full px-3 py-2 border rounded-md"
        />
      </div>
      <div>
        <label htmlFor="message" className="block text-sm font-medium mb-1">
          Message
        </label>
        <textarea
          id="message"
          name="message"
          rows={4}
          required
          className="w-full px-3 py-2 border rounded-md"
        />
      </div>
      <button
        type="submit"
        disabled={isSubmitting}
        className="w-full bg-blue-600 text-white py-2 px-4 rounded-md hover:bg-blue-700 disabled:opacity-50"
      >
        {isSubmitting ? 'Sending...' : 'Send Message'}
      </button>
    </form>
  );
}
3

Use the Component

Import and use your contact form in any page.

// app/contact/page.tsx
import ContactForm from '../components/ContactForm';

export default function ContactPage() {
  return (
    <div className="max-w-md mx-auto py-12">
      <h1 className="text-2xl font-bold mb-6">Contact Us</h1>
      <ContactForm />
    </div>
  );
}

Advanced Examples

Server Actions Integration

Use Next.js Server Actions for form submission.

// app/actions.ts
'use server';

export async function submitContact(formData: FormData) {
  const response = await fetch('https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit', {
    method: 'POST',
    body: formData,
  });
  
  return response.ok;
}

// app/contact/page.tsx
import { submitContact } from '../actions';

export default function ContactPage() {
  return (
    <form action={submitContact}>
      <input name="name" placeholder="Name" required />
      <input name="email" type="email" placeholder="Email" required />
      <textarea name="message" placeholder="Message" required />
      <button type="submit">Send</button>
    </form>
  );
}

API Routes Integration

Proxy form submissions through Next.js API routes.

// app/api/contact/route.ts
import { NextRequest } from 'next/server';

export async function POST(request: NextRequest) {
  const formData = await request.formData();
  
  const response = await fetch('https://staticbox.io/api/forms/[your-project-id]/[slug-name]/submit', {
    method: 'POST',
    body: formData,
  });
  
  return Response.json({ success: response.ok });
}

Deployment

Deploy to Vercel

  1. 1
    Connect your GitHub repository to Vercel
  2. 2
    Set your StaticBox project ID in environment variables
  3. 3
    Deploy with automatic builds on every commit
  4. 4
    Your forms will work immediately in production

Additional Resources

Ready to get started?

Create your StaticBox project and start building with Next.js today.

Create Project