Skip to main content
20% off 3 months · code LAUNCH20 · until 31 October

How do I add a waitlist to a v0 app?

19 September 2026 · by Nordva, who make Nordva Launch

The short answer

Add your Nordva Launch publishable key to the v0 project as NEXT_PUBLIC_NORDVA_KEY, paste the prompt below into v0's chat, try the form in the preview, then publish to production. v0 builds a small form that posts each email to Launch, with the referring site and UTM tags, and shows the person's place in line.

The prompt for v0
Add a waitlist signup form to the home page, using the Nordva Launch API. Don't add a database or a server route for it.

1. Create a client component, WaitlistForm, with an email field and a "Join the waitlist" button.
2. On submit, POST to https://api.nordva.dev/v1/waitlist/signups with the headers Authorization: Bearer ${process.env.NEXT_PUBLIC_NORDVA_KEY} and Content-Type: application/json, and a JSON body with:
   - email
   - source: { referrer: the hostname of document.referrer when it isn't this site, utm_source, utm_medium and utm_campaign from the page URL when present, landing_path: window.location.pathname }
   Read the source values once, when the component first loads.
3. A 201 response means a new signup and a 200 with data.already_registered means they were already on the list. Show "You're #N on the list" using data.position in both cases, and a short error message otherwise.
4. Put the form in the hero of the home page. Don't change anything else, and tell me which files you changed.

Why a form of its own on v0

On v0 the cleanest waitlist is a small React form that calls Launch’s API, because the whole app is Next.js and React already. There’s no extra script to load, the form looks like the rest of your shadcn/ui components, and v0 can restyle it later without breaking anything. The prompt spells out the request exactly, so v0 doesn’t invent a database table or a server route you’d then have to keep running.

Step by step

  1. Get your publishable key. In Nordva Launch, open Developer → API keys. Every new account gets one publishable key, shown once when the account is made. If you didn’t keep it, revoke it and click New publishable key, then copy it straight away. On the Free plan you can have one publishable key per project at a time.

  2. Add it to the project. In v0, open Project menu → Settings → Environment Variables and add NEXT_PUBLIC_NORDVA_KEY with your key as the value. In Next.js, only variables whose names start with NEXT_PUBLIC_ reach browser code, which is what this form needs.

  3. Paste the prompt. Copy the prompt above into v0’s chat.

  4. Try it in the preview. Join with your own email. The signup appears under Waitlist in Launch, with its source, and a receipt lands in your inbox. Join again with the same email: the form shows your existing place instead of adding you twice.

  5. Publish. Click Publish at the top right, then Publish to Production.

Is a key in browser code safe?

This one is. A publishable key starts with nv_pub_live_ and is made to be seen: anyone can read it in your page, and all it lets them do is add a signup, a feedback message or a changelog subscriber. It can’t read, export or delete your list. Your secret key, starting with nv_live_sk_, can read everything; it never gets a NEXT_PUBLIC_ name and never goes in browser code.

What each signup records

The referring site’s hostname, the UTM tags on the link and the page the person landed on, read once when the form loads. The form sets no cookie and stores nothing in the browser. Tag the links you share, such as ?utm_source=reddit&utm_campaign=launch, and each signup on Launch’s Waitlist page shows the post it came from.

If you also add Launch’s analytics tag to the root layout, you can send the visitor’s first visit instead of the current page: ask v0 to use window.nordva?.visitor()?.first_touch as the source when it exists, and to send visitor_id from window.nordva?.visitor()?.id. Someone who read your post last week and signs up today then counts for that post.

After that

Everyone who joins gets a receipt with an unsubscribe link, on every plan. Indie adds double opt-in, invites in batches, CSV export, and one announcement on launch day with a report of how many of the people you told went on to pay.

Free holds 100 signups per project, Indie 2,500. Free has no time limit and needs no card.

When Launch is the wrong tool

If you need the signup form to also create an account in your app at the same moment, build signup into your own auth instead and send the source along with it. Launch's waitlist is for collecting interest before there's an app to sign in to.

v0's own docs, checked 19 September 2026

Builders change often. If a step no longer matches what you see, tell us and we will fix the page.

Also asked as
  • How do I make a coming soon page with v0?
  • v0 email signup form that saves emails
  • Where do I put an API key in v0?
Read next
Start free Free plan, no time limit · No card