SIGN IN SIGN UP

docs: replace waitlist form with Loops.so integration (#447)

## Summary

Replace the FormSubmit.co waitlist form on the website with a Loops.so
newsletter form integration.

## Changes

### Backend
- **FormSubmit.co** ``` ``` **Loops.so**
(`https://app.loops.so/api/newsletter-form/...`)
- Content-Type: `application/x-www-form-urlencoded` (Loops requirement)
- Progressive enhancement: `action` + `method` on `<form>` so native
POST works without JS

### UI/UX
- **Three-view state system**: form (default), success, error — only one
visible at a time via `.cta-form-view`/`.show` toggle
- **Retry support**: error view shows a "Try Again" button that restores
the form with email preserved
- **Loading state**: button shows "Sending..." and disables during
fetch, restores in `finally`
- **Rate limiting**: 60s cooldown via localStorage timestamp (matches
Loops embed behavior)

### Robustness
- `res.json()` failure (non-JSON response like 502) caught cleanly —
falls to network error
- `localStorage` wrapped in try/catch for Safari private browsing
compatibility
- Rate-limit timestamp only recorded on **success** (not on API error
responses)
- Email input preserved on error (only cleared on success)
- "Email already on list" treated as success

### Accessibility
- `aria-live="polite"` on success view for screen reader announcements
- `role="alert"` on error view for immediate screen reader notification
- Focus management: retry button focused on error, email input focused
on retry

### Styling
- All inline styles from Loops embed stripped — uses existing CSS
variables (`--g0`, `--c0`, `--c2`, etc.)
- No Inter font import — inherits site's DM Sans
- New classes: `.cta-form-view`, `.cta-error`, `.cta-back`,
`.cta-submit:disabled`
- Mobile responsive: `.cta-back` added to full-width rule
- Editorial aesthetic preserved (2px border-radius, uppercase
letter-spacing, cream/green palette)
B
Burak Yigit Kaya committed
8dfe1f1cf5ed03b0ad501404fbe8b93199cc8706
Parent: 398be4c
Committed by GitHub <noreply@github.com> on 5/21/2026, 10:24:12 AM