Tier: S (1-2 days) | Type: ux
Context. The PWA installs but does not surface the install prompt, cannot receive stellar: URIs shared from other apps, and the app session stays unlocked forever on mobile. QRCodeModal.tsx already calls navigator.share (lines 41-59) for Receive's meta-address / stellar: URI variants with a clipboard fallback, so share-out is covered. The gap is share-IN and install / relock. KeyVault.ts has an idleTimeoutMs timer (lines 346-373) but it only locks the encrypted vault when the vault is unlocked; the whole app session has no relock, which this issue adds.
Scope.
beforeinstallprompt capture with a header "Install" affordance that hides after install.
- Register as a Web Share Target for
text/plain in the manifest so stellar: URIs pasted from other apps land on /send with the recipient pre-filled.
- App-level auto-relock after 5 minutes of inactivity, unlocked via the passkey when present, otherwise a passphrase. Reuse
KeyVault's existing idle timer as the trigger; extend it to relock the whole app session, not just the vault.
Acceptance.
Files. public/manifest.webmanifest, src/components/Header.tsx, src/App.tsx, src/vault/KeyVault.ts, src/lib/idleLock.ts (new).
Tier: S (1-2 days) | Type: ux
Context. The PWA installs but does not surface the install prompt, cannot receive
stellar:URIs shared from other apps, and the app session stays unlocked forever on mobile.QRCodeModal.tsxalready callsnavigator.share(lines 41-59) for Receive's meta-address /stellar:URI variants with a clipboard fallback, so share-out is covered. The gap is share-IN and install / relock.KeyVault.tshas anidleTimeoutMstimer (lines 346-373) but it only locks the encrypted vault when the vault is unlocked; the whole app session has no relock, which this issue adds.Scope.
beforeinstallpromptcapture with a header "Install" affordance that hides after install.text/plainin the manifest sostellar:URIs pasted from other apps land on/sendwith the recipient pre-filled.KeyVault's existing idle timer as the trigger; extend it to relock the whole app session, not just the vault.Acceptance.
chrome://web-app-internalsstellar:URI pre-fills/sendrecipientFiles.
public/manifest.webmanifest,src/components/Header.tsx,src/App.tsx,src/vault/KeyVault.ts,src/lib/idleLock.ts(new).