Back to Templates

Zeitlist
this is a waitlist app. it uses redis. and arcjet to validate emails.
Core Functionality
- Provides a simple form for users to submit their email.
- Validates submitted emails using Arcjet before processing.
- Stores valid emails in a Redis list managed by Upstash.
- Displays a live count of total signups.
Tech Used
- Framework: Next.js
- Database: Upstash (Redis)
- Email Validation: Arcjet
- Styling: Tailwind CSS
- Language: TypeScript
Local Setup
To get this running on your machine:
- 
Clone it: git clone ``https://github.com/zeitgg/zeitlist.git`cd zeitlist
- 
Install dependencies: bun i
- 
Set up environment variables: You'll need API keys/URLs. Create a .env.localfile in the root directory and dd these variables:# Get from your Upstash dashboardUPSTASH_REDIS_REST_URL="YOUR_UPSTASH_REDIS_URL"UPSTASH_REDIS_REST_TOKEN="YOUR_UPSTASH_REDIS_TOKEN"# Get from your Arcjet dashboardARCJET_SITE_KEY="YOUR_ARCJET_SITE_KEY"
- 
Run the dev server: bun dev
- 
Open in browser: http://localhost:3000
How it Works (Quick Overview)
- User submits their email via the frontend.
- The submission hits an API route (e.g., /api/waitlist/).
- This API route first passes the email to Arcjet for validation.
- If Arcjet approves, the email is added to a list in Redis using the Upstash SDK.
- A separate API route (e.g., /api/waitlist/count) reads the length of the Redis list to get the current signup count.
- The frontend fetches from the count endpoint and displays the number.
Contributing
Issues and PRs welcome.
