Why this is a good first issue
The CopyButton in web/src/Landing.tsx calls navigator.clipboard.writeText(text) and only handles success. When the clipboard API is unavailable or the browser rejects the write, the user gets no explanation and the handler throws or leaves an unhandled rejection.
This is a small React/TypeScript task on the public landing page. No account or cryptography changes are needed.
What to do
- Handle both an unavailable clipboard API and a rejected clipboard write.
- Show a short, accessible message asking the user to select and copy the command manually when copying fails. Keep the command selectable.
- Only show
Copied after a successful write. Keep the existing two-second success reset, and allow retrying after a failure.
- Clear stale failure feedback after a successful retry.
Start in web/src/Landing.tsx, at CopyButton. Browser checks live in web/e2e/funnel.spec.ts; its landing-page tests are useful examples. The current Playwright config discovers that spec, so place regression cases there.
Done when
- Browser regression checks cover success, rejected writes, an unavailable clipboard API, and successful retry. Override the browser clipboard API in the test to make these deterministic.
- The failure message is visible and exposed to assistive technology, with no unhandled browser error.
- From
web/, run npm run build:wasm, npm run typecheck, npm run build, and the relevant Playwright checks using the setup in web/e2e/README.md.
Scope
Keep the installer command and clipboard permissions unchanged. No new clipboard dependency or deprecated copy fallback is needed. Keep the initial landing-page copy consistent with its static snapshot in web/vite.config.ts if you change initial markup or text. This is independent of the Windows installer issue #140.
Use British English and plain hyphens. Link this issue in the PR and sign off commits with git commit -s as described in CONTRIBUTING.md.
Why this is a good first issue
The
CopyButtoninweb/src/Landing.tsxcallsnavigator.clipboard.writeText(text)and only handles success. When the clipboard API is unavailable or the browser rejects the write, the user gets no explanation and the handler throws or leaves an unhandled rejection.This is a small React/TypeScript task on the public landing page. No account or cryptography changes are needed.
What to do
Copiedafter a successful write. Keep the existing two-second success reset, and allow retrying after a failure.Start in web/src/Landing.tsx, at
CopyButton. Browser checks live inweb/e2e/funnel.spec.ts; its landing-page tests are useful examples. The current Playwright config discovers that spec, so place regression cases there.Done when
web/, runnpm run build:wasm,npm run typecheck,npm run build, and the relevant Playwright checks using the setup inweb/e2e/README.md.Scope
Keep the installer command and clipboard permissions unchanged. No new clipboard dependency or deprecated copy fallback is needed. Keep the initial landing-page copy consistent with its static snapshot in
web/vite.config.tsif you change initial markup or text. This is independent of the Windows installer issue #140.Use British English and plain hyphens. Link this issue in the PR and sign off commits with
git commit -sas described inCONTRIBUTING.md.