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/countendpoint 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/countroute 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?
- A user submits an email through the frontend form.
- The
/api/waitlist/route passes the email to Arcjet for validation. - If Arcjet approves it, the email is added to the Upstash Redis list.
- The
/api/waitlist/countroute reads the length of that list, and the frontend fetches it to display the signup total.








