Problem
After a successful Nuri Connect + Passkey Wallet login, the web root renders the existing repository browser. Users see This community is empty because web/src/app/routes/index.tsx mounts ReposPage; this is not a chat screen.
Production also currently has zero channels and zero active channel memberships, so a chat UI alone would still have nothing to open.
Scope
- Replace the authenticated root content with a browser-native Buzz chat: channel sidebar, selected-channel timeline, empty/error/loading states, and text composer. Preserve the repository browser under
/repos.
- Use the existing Buzz/Nostr protocol and unlocked in-memory Nuri signer: discover membership (
39002) and metadata (39000), join an open channel (9021), query/subscribe to messages (9, 40002), and publish text messages (9) over NIP-42-authenticated WebSocket with relay OK handling.
- Provision one open production
#general channel through the existing relay owner, verify a newly registered Nuri user can join/read/send/live-receive, retain /inbox, and pass web unit/type/lint/build/smoke checks.
What we are not doing
- Full Tauri desktop UI port
- Threads, reactions, file uploads, huddles, moderation, agent panels, or forum channels
- Persisting the Nostr private key outside tab memory
- Bypassing closed-relay membership or Connect verification
Security invariants
- Continue using the
nuri-expo-wallet-v1 signer already unlocked by NuriWalletGate.
- Private key remains tab-memory-only and is best-effort zeroized on lock/pagehide.
- NIP-42 authentication and relay membership remain mandatory.
- Channel join and messages are signed by the user key; no server impersonation.
References
Problem
After a successful Nuri Connect + Passkey Wallet login, the web root renders the existing repository browser. Users see
This community is emptybecauseweb/src/app/routes/index.tsxmountsReposPage; this is not a chat screen.Production also currently has zero channels and zero active channel memberships, so a chat UI alone would still have nothing to open.
Scope
/repos.39002) and metadata (39000), join an open channel (9021), query/subscribe to messages (9,40002), and publish text messages (9) over NIP-42-authenticated WebSocket with relayOKhandling.#generalchannel through the existing relay owner, verify a newly registered Nuri user can join/read/send/live-receive, retain/inbox, and pass web unit/type/lint/build/smoke checks.What we are not doing
Security invariants
nuri-expo-wallet-v1signer already unlocked byNuriWalletGate.References
@session:default/20260724_150854_84a994feat/nuri-web-chat