Back to templates

Template details

Zeitlist

Vercel-ready Next.js waitlist app using Arcjet for email validation and Upstash Redis for signup storage.

About this template

Zeitlist is a minimal waitlist application built with Next.js and TypeScript that validates emails through Arcjet before storing them in an Upstash Redis list and displays a live signup count.

What is Zeitlist?

Zeitlist is a single-purpose waitlist template for collecting email signups. It accepts an email address through a simple form, sends it to Arcjet for validation, and only stores approved addresses in a Redis list managed by Upstash. It runs on Next.js API routes, is styled with Tailwind CSS, and is open sourced under the MIT license.

Key Features

  • Arcjet email validation — Every form submission is checked by Arcjet before being added to storage, filtering invalid or abusive addresses.
  • Upstash Redis storage — Valid emails are appended to a Redis list using the Upstash REST SDK, giving you a persistent queue of signups.
  • Live signup counter — A dedicated /api/waitlist/count endpoint reads the Redis list length so the frontend displays the current total in real time.
  • Next.js API routes — The /api/waitlist/ route handles new submissions and the /api/waitlist/count route serves the count, keeping all server logic off the client.
  • Tailwind CSS styling — The UI uses Tailwind for a clean, utility-first visual design with minimal custom CSS.
  • TypeScript codebase — Both page components and API routes are written in TypeScript, providing type safety across the project.
  • Vercel-ready deployment — The repository is tagged with Vercel, and setup only requires two environment variables: Upstash REST URL and token, plus an Arcjet site key.

Who should use Zeitlist?

  • Indie hackers testing product ideas — Launch a waitlist in minutes to measure demand before building a full product.
  • Startups in pre-launch — Collect early adopters and show a growing signup count as social proof.
  • Developers learning API integration — Study a small, readable codebase that combines Next.js API routes with Arcjet and Upstash.

What can you do with Zeitlist?

  • Collect validated emails at scale — Arcjet blocks invalid submissions, so your Redis list only contains actionable signups.
  • Display live signup totals — The count endpoint and frontend number update automatically as new emails arrive.
  • Deploy a production waitlist quickly — Set two environment variables, run bun dev, and push to Vercel for a public instance.

How does Zeitlist work?

  1. A user submits an email through the frontend form.
  2. The /api/waitlist/ route passes the email to Arcjet for validation.
  3. If Arcjet approves it, the email is added to the Upstash Redis list.
  4. The /api/waitlist/count route reads the length of that list, and the frontend fetches it to display the signup total.

screenshot of Zeitlist on template0.com