Identity

Accounts, recovery, mail

Industry-standard signup, hashed verify and reset tokens, transactional mail, and the demo inbox.

Signup requires name, email, password, confirm-password, and terms. Passwords follow NIST 800-63B (8–72, letter + digit, trimmed, HIBP on the way in). Demo shortcuts (owner@ / driver@ / admin@) skip verify so a pitch still works. Every other email gets a 48-hour hashed token.

Happy path

  1. POST signup → welcome mail with confirm link.
  2. GET /verify-email?token=… consumes the sha256 token, starts the session, redirects by role.
  3. Forgot password → one-hour reset mail. Success copy never says whether the address exists.
  4. Reset consumes the token once, then a “password changed” mail.
  5. Resend confirmation is on /verify-email.

Where tokens and mail live

ThingDemoProduction
Verify / reset tokensha256 in .data/auth-tokens.jsonSame shape in Postgres
Mail body.data/mail.json and /admin/mailResend (RESEND_API_KEY, MAIL_FROM)
Sessionaether_session cookieSupabase Auth
Google / AppleDemo persona emailsSupabase OAuth
  • /signup — create account
  • /login — email, Google, Apple, demo shortcuts
  • /forgot-password
  • /reset-password?token=
  • /verify-email?token= (or resend form)
  • /admin/mail — desk outbox