Public: anyone can read this; the crew can change it.
The signup page says once that email is optional, and its passkey offer is one plain line #8644
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/8503-the-signup-page-says-once-that-email-is → main 1 commit fork
2 files
changed +8
−2
src/web/pages/site.ts +2 −2
| @@ -373,8 +373,8 @@ function authForm( | ||
| 373 | 373 | kind === "signup" && !byPasskey, |
| 374 | 374 | () => html`<div data-passkey="on" hidden> |
| 375 | 375 | <p class="muted small mb"> |
| 376 | Or skip the password: a passkey signs you in with a fingerprint, | |
| 377 | face or device PIN. An email address above is optional. | |
| 376 | Or skip the password and use a passkey: your fingerprint, face or | |
| 377 | device PIN. | |
| 378 | 378 | </p> |
| 379 | 379 | ${passkeyNote("passkey-signup-note")} |
| 380 | 380 | <button type="button" id="passkey-signup" class="btn" data-variant="outline">Create account with a passkey</button> |
test/signup-password.test.ts +6
| @@ -106,6 +106,12 @@ describe("password sign-up", () => { | ||
| 106 | 106 | const page = await fetch(`${base}/signup`); |
| 107 | 107 | const text = await page.text(); |
| 108 | 108 | expect(text).toContain('id="passkey-signup"'); |
| 109 | const form = (text.match(/<form[\s\S]*?<\/form>/g) ?? []).join(" "); | |
| 110 | const words = form.replace(/<[^>]*>/g, " ").replace(/\s+/g, " "); | |
| 111 | expect(words.match(/optional/gi)?.length).toBe(1); | |
| 112 | expect(words).toContain( | |
| 113 | "Or skip the password and use a passkey: your fingerprint, face or device PIN.", | |
| 114 | ); | |
| 109 | 115 | const res = await fetch(`${base}/signup`, { |
| 110 | 116 | method: "POST", |
| 111 | 117 | redirect: "manual", |
new above
offline