Next.jsReactSaaSStarter

Waitlist-For-Saas — Next.js SaaS Template

By shubh-io

Waitlist-For-Saas is a Next.js-based SaaS waitlist template that uses Supabase to store emails and Upstash Redis for rate limiting, with the README providing table creation SQL and local run steps.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-14View source

What stands out

A quick read of the recorded project description.

01

The email subscription form writes data to the "Email collection" table in Supabase

02

The table structure includes an auto-incrementing id, a unique email, and a created_at field, with an index on email

03

Row-level security policies are enabled, allowing the anonymous role to insert and query the table

04

Rate limiting is implemented via Upstash Redis, requiring configuration of the REST URL and Token

05

The README provides two initialization methods: table creation SQL for the Supabase SQL Editor and the setup-database.js script

Template Details

This template is used to build a waitlist page for a SaaS product, with an email subscription form at its core. Data is written to the "Email collection" table in Supabase; the table structure includes an auto-incrementing id, a unique email, and a created_at field, and row-level security policies are enabled to allow the anonymous role to insert and query. The README also mentions using Upstash Redis for rate limiting, requiring the corresponding REST URL and Token to be configured in environment variables.

Before first use, the database table must be created: it is recommended to execute the SQL provided in the README in the Supabase SQL Editor; if you have a service role key, you can also add it to .env.local and then run node setup-database.js to complete table creation. After that, run yarn install and yarn dev, then visit http://localhost:3000 to test the subscription form. The README does not describe the deployment process, page visual structure, form validation details, or any features other than email subscription.

Next.jsSaaSStarter

Is it right for your project?

Use Cases

  • Collecting potential user emails for a SaaS product that has not yet launched
  • Running locally according to the README steps and testing the subscription form's write flow
  • Viewing collected waitlist email records in Supabase

Suitable For

  • Developers who need to quickly build a SaaS waitlist page
  • Teams already using or willing to sign up for Supabase and Upstash Redis
  • Developers who want to host an email subscription form in a Next.js project

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    First execute the table creation SQL provided in the README in the Supabase SQL Editor, or add SUPABASE_SERVICE_ROLE_KEY to .env.local and run node setup-database.js

  2. 2

    Configure NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, UPSTASH_REDIS_REST_URL, and UPSTASH_REDIS_REST_TOKEN in .env.local

  3. 3

    Run yarn install and yarn dev in sequence, then visit http://localhost:3000 to test the subscription form

  4. 4

    If "Could not find the table" or "Database not set up" appears, the table has not been created; execute the SQL from Option 1 in the README

  5. 5

    If rate limiting-related errors occur, check the Redis credentials in .env.local

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version under the MIT license in the public repository; the free scope is the code of that version and does not mean external services or third-party assets are free.

Must comply with when using

  • Free use, modification, commercial use, and distribution of this version's code are permitted.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur separate charges.
  • The database table must be created in Supabase before use, otherwise the application will not work properly.
  • If initializing the database via the script, SUPABASE_SERVICE_ROLE_KEY must be configured in .env.local.
  • The Supabase project URL environment variable must be configured.
  • The Supabase anonymous key environment variable must be configured.
  • The Upstash Redis REST URL environment variable must be configured for rate limiting.
  • The Upstash Redis REST Token environment variable must be configured for rate limiting.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

Before using this app, you NEED to create the database table in Supabase:

Original README

1. Add `SUPABASE_SERVICE_ROLE_KEY` to your `.env.local`

Original README

NEXT_PUBLIC_SUPABASE_URL=your_supabase_url

Original README

NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key

Original README

UPSTASH_REDIS_REST_URL=your_redis_url

Original README

UPSTASH_REDIS_REST_TOKEN=your_redis_token

Original README
https://github.com/shubh-io/Waitlist-For-Saas/blob/master/LICENSEhttps://github.com/shubh-io/Waitlist-For-Saas/blob/master/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-14. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 88 / 100
Technologies
Next.js · React
Website type
SaaS · Starter
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2025-11-29
Screenshot last checked
2026-10-14

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Review declaration: codex-user-requested-batch-review-20261015 · 2026-10-15

Inspect the recorded source material

SHA-256: a458e67dd5e0e4a331d9389559ea0c19fb5aa98467c9994fc1e360e84c754f39

2026-10-14T11:41:55.337Z

Source file / repository
# Quick Setup Guide

## First Time Setup

Before using this app, you NEED to create the database table in Supabase:

### Option 1: Using Supabase Dashboard (Recommended - 1 minute)

1. Go to [Supabase SQL Editor](https://supabase.com/dashboard/project/_/sql)
2. Paste the SQL below and click "Run"
3. And you're DONE!

```sql
CREATE TABLE IF NOT EXISTS "Email collection" (
  id BIGSERIAL PRIMARY KEY,
  email TEXT UNIQUE NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_email_collection_email ON "Email collection"(email);

ALTER TABLE "Email collection" ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Allow public insert" ON "Email collection"
  FOR INSERT TO anon WITH CHECK (true);

CREATE POLICY "Allow public select" ON "Email collection"
  FOR SELECT TO anon USING (true);

GRANT INSERT, SELECT ON "Email collection" TO anon;
GRANT USAGE, SELECT ON SEQUENCE "Email collection_id_seq" TO anon;
```

### Option 2: Using Setup Script (If you have service role key)

1. Add `SUPABASE_SERVICE_ROLE_KEY` to your `.env.local`
2. Run: `node setup-database.js`
3. Done

---

## Environment Variables Required

Make sure your `.env.local` has:

```bash
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
UPSTASH_REDIS_REST_URL=your_redis_url
UPSTASH_REDIS_REST_TOKEN=your_redis_token
```

---

## After Setup

1. Run `yarn install`
2. Run `yarn dev`
3. Visit `http://localhost:3000`
4. Test the email subscription form!!

---

## Troubleshooting

**Error: "Could not find the table"**
- Run the SQL above in your Supabase SQL Editor

**Error: "Database not set up"**
- The table doesn't exist. Follow Option 1 above.

**Rate limiting errors**
- Check your Redis credentials in `.env.local`

Enjoyyy!
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.