From faca97f1ae1ba870673347f98557191fcd5c123a Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Sun, 22 Jun 2025 13:21:03 +0200 Subject: add upstash rate limiting --- apps/web/src/lib/db/schema.ts | 8 ++++++++ apps/web/src/lib/rate-limit.ts | 14 ++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 apps/web/src/lib/rate-limit.ts (limited to 'apps/web/src/lib') diff --git a/apps/web/src/lib/db/schema.ts b/apps/web/src/lib/db/schema.ts index 02df5d4a..7c38724a 100644 --- a/apps/web/src/lib/db/schema.ts +++ b/apps/web/src/lib/db/schema.ts @@ -59,3 +59,11 @@ export const verifications = pgTable("verifications", { () => /* @__PURE__ */ new Date() ), }).enableRLS(); + +export const waitlist = pgTable("waitlist", { + id: text("id").primaryKey(), + email: text("email").notNull().unique(), + createdAt: timestamp("created_at") + .$defaultFn(() => /* @__PURE__ */ new Date()) + .notNull(), +}).enableRLS(); diff --git a/apps/web/src/lib/rate-limit.ts b/apps/web/src/lib/rate-limit.ts new file mode 100644 index 00000000..bf1cce02 --- /dev/null +++ b/apps/web/src/lib/rate-limit.ts @@ -0,0 +1,14 @@ +// lib/rate-limit.ts +import { Ratelimit } from "@upstash/ratelimit"; +import { Redis } from "@upstash/redis"; + +const redis = new Redis({ + url: process.env.UPSTASH_REDIS_REST_URL!, + token: process.env.UPSTASH_REDIS_REST_TOKEN!, +}); + +export const waitlistRateLimit = new Ratelimit({ + redis, + limiter: Ratelimit.slidingWindow(5, "1 m"), // 5 requests per minute + analytics: true, +}); -- cgit v1.3.1