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

How do I add a waitlist to a Base44 app?

23 September 2026 · by Nordva, who make Nordva Launch

The short answer

Copy your publishable key from Nordva Launch, paste the prompt below into Base44's AI chat with the key at the end, try the form in the preview, and publish. Every signup is stored with where it came from and gets a receipt email. The publishable key can add signups but never read them, so it's safe in browser code.

The prompt for Base44
Add a waitlist signup form to the home page, using Nordva Launch.

1. Where the form should appear (the hero of the home page), render this element, with my key from the end of this message in place of MY_KEY:
   <nordva-waitlist data-key="MY_KEY" data-button="Join the waitlist"></nordva-waitlist>
2. In the same component, load https://cdn.nordva.dev/v1/waitlist.js once, after the element is on the page (for example, append a script tag in an effect). Don't add this script to index.html.
3. Don't replace the element with a form of your own, and don't save the emails in an entity or send them through a backend function.
4. My key starts with nv_pub_live_. It is a publishable key, made for browser code: it can add signups but can't read them. Put it in the code as it is; it doesn't need to be a secret. Never put a key that starts with nv_live_sk_ in frontend code.
5. Don't change anything else. Tell me which files you changed.

My publishable key:

Why not just ask Base44 for a signup form?

You can. Base44 builds the database with the app, so the AI chat can make a form that saves emails as records in an entity. What that list won’t have is where each person came from, and a source can only be recorded when the signup happens, never afterwards. If most signups came from one subreddit and none from X, that’s where your launch post goes. Launch records the source with every signup, sends each person a receipt, and, once Stripe is connected, shows which of them paid.

Why it needs no backend function

Base44’s docs name backend functions as one place to keep API keys safe: the key sits in an environment variable on the server, the frontend calls the function, and the function calls the other service. Base44’s plans page lists backend functions from the Builder plan up, not on Free or Starter.

A Launch waitlist form doesn’t go through that route. The browser sends each signup straight to Launch with a publishable key, which is made to be public. So it needs no backend function, and nothing else Base44’s plans page lists as paid.

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, which is why the old one goes first.

  2. Paste the prompt. Copy the prompt above into Base44’s AI chat and paste your key at the end. Base44 apps are React apps built with Vite, so the form is an element on the home page and the script loads once after it; the prompt spells that out so the chat doesn’t build a form of its own instead.

  3. Try it in the preview. Join with your own email. The signup shows under Waitlist in Launch, and a receipt arrives in your inbox.

  4. Publish. Click Publish in the top bar, then Publish in the menu that opens. Until you do, your live yourapp.base44.app address keeps the old version.

Is a key in browser code safe?

Base44’s docs keep API keys on the server, which is the right rule for secret keys. A publishable key is a different kind of key, like Stripe’s: it’s made to sit in a web page. Anyone can read it, and all it lets them do is add a signup, a feedback message or a changelog subscriber. It can’t list your waitlist, export it or delete anything.

Your secret key (it starts with nv_live_sk_) is the one that can read everything. It never goes in frontend code, and a waitlist form doesn’t need it. If your app ever does need it, it belongs in a backend function’s secrets.

What each signup records

The referring site’s hostname, UTM tags (utm_source, utm_medium, utm_campaign) and the path of the page the form is on, read when the form loads. If someone arrives on another page and clicks through to the form, the tags in their first link are gone by then. The form sets no cookie and stores nothing in the browser; it reads what the page already knows, once, when the person joins. If you also add Launch’s analytics script to the app’s index.html, a signup carries the visitor’s first visit instead, which counts when someone reads your post, leaves, and comes back a week later to sign up.

Tag the links you post, such as ?utm_source=reddit&utm_campaign=launch, and each signup on Launch’s Waitlist page shows the post it came from.

What happens to the people who join

Everyone gets a receipt email with an unsubscribe link, on every plan. On Indie and up, people confirm their email first (double opt-in), and on launch day you can send one announcement to everyone who hasn’t unsubscribed, and see afterwards how many of the people you told went on to pay.

The Free plan holds 100 signups per project; Indie holds 2,500. There’s no time limit on Free and no card needed.

No code at all

If you’d rather not touch the app yet, Launch also hosts a waitlist page at launch.nordva.dev/waitlist/your-project. Share that link, and add the form to your Base44 app later; both fill the same list.

When Launch is the wrong tool

If you're collecting emails for a newsletter rather than for a product launch, a newsletter tool fits better: Launch sends a receipt and one launch announcement, not a series of emails. And if you only need a list of emails in your own app, a Base44 entity already stores them.

Base44's own docs, checked 23 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 collect emails in Base44?
  • How do I build a coming soon page with Base44?
  • Can a Base44 app call an external API from the frontend?
Read next
Start free Free plan, no time limit · No card