Commit c1fd856
Rebrand to NaN community — v1 landing with waitlist
Full rebranding from the v0 subscription scaffold to v1: a closed
community landing page with passive waitlist, no payments yet.
v0 removal:
- Delete magic-link auth, session middleware, login/verify flows
- Delete Stripe checkout + webhooks, Discord OAuth2 link, email/Resend
- Delete D1 + Drizzle schema and migrations
- Delete portal pages (benefits, cron, members count)
- Trim package.json deps and .env.example to the waitlist-only surface
v1 landing:
- Hero with live "X of 25 seats remaining" counter read from KV
- About, Server (hardware/stack/garantías), ModelVoting, Founder,
Pricing (single 70€/mes tier), FAQ accordion, CTA + WaitlistForm
- Dark minimalist design, JetBrains Mono + Inter, violet accents,
motion-reduce support, focus-visible rings, WCAG-correct ARIA
Waitlist backend:
- Cloudflare KV namespace (WAITLIST) bound in wrangler.jsonc
- /api/waitlist POST with JSON-only content type check
- Strict input validation: ReDoS-safe email regex, 254 char email cap,
100 char handle cap, HTML-dangerous char blacklist for handles
- Honeypot `_hp` field trap (returns 200 without persisting)
- Per-IP rate limit (60s TTL) via KV, using trustable cf-connecting-ip
only (no x-forwarded-for fallback to prevent bypass)
- Idempotent dedupe on main + overflow buckets
- MAX_SEATS=25 with overflow status for late signups
- Opaque server errors, no PII in logs
Islands:
- WaitlistForm (client:load) — Preact form with client-side validation,
honeypot short-circuit, typed error codes, success/overflow states
- FaqAccordion (client:visible) — one-at-a-time accordion with correct
aria-expanded/aria-controls semantics
Rendering:
- index.astro in SSR mode to read KV counter server-side via the
`cloudflare:workers` env import (Astro.locals.runtime.env was
removed in Astro v6 and throws on access)
- All other sections static, zero unnecessary JS
Testing + tooling:
- 69 Vitest tests across src/tests/lib, src/tests/api, and the
landing helpers (kept out of src/pages to avoid route bundling)
- Build script hardened to `astro check && astro build` so type
errors fail CI (caught a latent Hero counter bug during rollout)
- Base layout ships CSP via meta (pre-prod follow-up: move to headers)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent cfccbfa commit c1fd856
62 files changed
Lines changed: 4289 additions & 7322 deletions
File tree
- db
- migrations
- meta
- public
- src
- components
- landing
- portal
- ui
- layouts
- lib
- pages
- api
- auth
- discord
- benefits
- checkout
- cron
- members
- webhooks
- auth
- discord
- portal
- tests
- api
- lib
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | 1 | | |
24 | 2 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
14 | 24 | | |
15 | 25 | | |
16 | 26 | | |
| |||
This file was deleted.
This file was deleted.
This file was deleted.
0 commit comments