Gather Emails on Your Next.js Site with StaticKit and Vercel

Use StaticKit and Next.js to collect emails from a landing page deployed with Vercel.

StaticKit provides configurable backend services for front-end developers.

In this guide, you will discover how to create a simple Next.js landing page to gather email addresses using StaticKit. Before getting started, sign up for a free StaticKit account.

Step 1: Set Up Your Next.js Project

Run the following command to create and enter into a Next.js project:

npm init next-app next-landing-page && cd next-landing-page

Bootstrapping a Next.js project with create-next-app and moving into the /next-landing-page directory.

Step 2: Install StaticKit

Run the following command to install the StaticKit CLI and React helper library:

npm install -g @statickit/cli && npm install @statickit/react

Installing the StaticKit CLI and adding @statickit/react to the project.

Then, create a /pages/_app.js file with the following contents and replace {your-site-id} with the ID from your Site Settings in StaticKit:

import { StaticKitProvider } from '@statickit/react'

function App({ Component, pageProps }) {
  return (
    <StaticKitProvider site="{your-site-id}">
      <Component {...pageProps} />

export default App

An example /pages/_app.js file with the StaticKit provider.

Finally, run the following command to create a statickit.json file (if it doesn't already exist):

statickit init

Initializing a StaticKit config file.

Step 3: Configure Your StaticKit Function

In your statickit.json file, add a function for handling the email opt-in. StaticKit currently integrates with Mailchimp and ConvertKit for email marketing. Here's a function definition for adding a contact to Mailchimp:

  "functions": {
    "addToMailchimp": {
      "app": "mailchimp",
      "type": "addOrUpdateListMember"

A statickit.json file with a function for adding to Mailchimp.

Then, deploy your changes to StaticKit. You'll be prompted with instructions on how to save your Mailchimp API key and audience:

statickit deploy -k <your-deploy-key>

You can find your deploy key in your StaticKit settings.

Step 4: Build Your Opt-In Form

Here's an example of a simple OptInForm component that uses your StaticKit function:

import React, { useState } from 'react'
import { useStaticKit } from '@statickit/react'
import { addToMailchimp } from '@statickit/functions'

function OptInForm() {
  const client = useStaticKit()
  const [emailAddress, setEmailAddress] = useState('')
  const [isSubmitted, setIsSubmitted] = useState(false)

  const handleSubmit = async e => {
    let { status } = await addToMailchimp(client, { emailAddress })
    if (status === 'ok') setIsSubmitted(true)

  if (isSubmitted) {
    return <p>Thanks for signing up!</p>

  return (
    <form onSubmit={handleSubmit}>
        onChange={e => setEmailAddress(}
      <button type="submit">Sign up</button>

export default OptInForm

An OptInForm React component that submits to Mailchimp.

For a more advanced example (with validations and styling), check out the OptInForm component in the Mailchimp React Example on GitHub.

Step 5: Deploying with Vercel

To deploy your StaticKit + Next.js app with a Vercel for Git Integration, make sure it has been pushed to a Git repository.

Import the project into Vercel using your Git Integration of choice:

After your project has been imported, all subsequent pushes to branches will generate Preview Deployments, and all changes made to the Production Branch (commonly "main") will result in a Production Deployment.

For more information, you can find the source code for this example on GitHub along with the live example.

Written By
Written by mcsdevmcsdev