From a6851ae954d819b116aae6b19b175525f1488928 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 4 Sep 2026 08:55:45 -0700 Subject: Public read-only coinos community chat at /chat — a share-anywhere link that shows the live chat history to anyone, logged in or not, with a "Sign in to chat" button ("Open coinos" when the device already has an account). No server-side decoder needed: the community's join material was already public by construction (baked into the client bundle — every coinos user is meant to be a member), so the page derives the stream keys and decrypts wraps client-side exactly like the app's Chat tab, worker-offloaded with the same sliced fallback. Renders messages + edits + deletes + reactions and honors the folded control state's ban list; presence/typing/guestbook deliberately omitted. Profiles come from ONE batched kind-0 query per burst (a REQ per author tripped relay concurrency limits). Plumbing: the join material moved to src/community.js (shared with messages.js so they can never drift), /chat is excluded from the single-segment profile deep-link (which was eating the path and rewriting the URL before the route ran), and app renders stand down in public-chat mode so a feature-init render can't paint onboarding over the page. Verified headless against the live relays: 59 messages decrypt, ban-fold applies, names resolve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01MGzU12QrAA4G6BYGzGVdXz --- src/i18n.js | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/i18n.js') diff --git a/src/i18n.js b/src/i18n.js index 332ee39..1ed6abe 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -179,6 +179,11 @@ const STR = { msgNewChannel: 'New channel', msgAdmin: 'admin', msgEdited: '(edited)', + publicChatTitle: '{name} community', + publicChatDesc: 'Live chat — read along, sign in to join the conversation', + publicChatSignIn: 'Sign in to chat', + publicChatOpenApp: 'Open coinos', + publicChatLoading: 'Loading messages…', msgDelete: 'Delete message', msgNoIdentity: "Your nostr signer isn't connected — reconnect it to send as yourself", msgSendFailed: 'No relay accepted the message', -- cgit v1.2.3