From 7618b3b09149a7239610aadfa19f96e1ef09561b Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Wed, 1 Jul 2026 22:41:04 -0400 Subject: [PATCH] docs: Slack-style per-thread notifications (P4-1) Landing: thread row + prose note the participating-default notifications with per-thread All/Mentions/Mute. README: Lotus Cinny threads row extended. Co-Authored-By: Claude Opus 4.8 --- README.md | 2 +- landing/index.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a80c8a0..57a28da 100644 --- a/README.md +++ b/README.md @@ -521,7 +521,7 @@ All custom code lives in `src/app/` on the `lotus` branch of `code.lotusguild.or | **Document title unread count** | `src/app/pages/client/ClientNonUIFeatures.tsx` | Tab title updates to `(N) Lotus Chat` for mentions, `· Lotus Chat` for unreads, `Lotus Chat` when clear | | **Message draft persistence** | `src/app/features/room/RoomInput.tsx` | Unsent messages survive page reload via `localStorage` (`draft-msg-`). Jotai in-memory atom remains the primary store; localStorage used as fallback on reload. Cleared on send | | **PiP position persistence + snap** | `src/app/components/CallEmbedProvider.tsx` | PiP position saved to `localStorage` on drag end; restored on next PiP enter (clamped to viewport). Double-click snaps to nearest corner with 180ms CSS transition | -| **Threads (P3-8)** | `src/app/features/room/thread/`, `state/room/thread.ts`, `hooks/useThreadSummary.ts` | Full m.thread support: side panel (own composer, per-thread drafts), "N replies" unread chips on roots, threaded receipts; SDK `threadSupport` on, markAsRead unthreaded. Replies no longer render inline | +| **Threads (P3-8 + P4-1)** | `src/app/features/room/thread/`, `state/room/thread.ts`, `utils/threadNotifications.ts`, `hooks/useRoomsListener.ts` | Full m.thread support: side panel (own composer, per-thread drafts), "N replies" unread chips, threaded receipts; SDK `threadSupport` on, markAsRead unthreaded; replies no longer render inline. **Slack-style notifications**: default = participating-only, per-thread All/Mentions/Mute in `io.lotus.thread_notifications` account data; muted threads subtracted from room badges client-side | | **KaTeX math + encrypted-search cache + session hardening + crypto diagnostics** | `utils/{mathParse,searchCache,cryptoDiagLog}.ts`, `state/sessions.ts`, `LOTUS_E2EE_INVESTIGATION.md` | July 2026 batch: `$…$`/`$$…$$` + `data-mx-maths` via lazy KaTeX; opt-in IndexedDB search index for E2EE rooms (wiped on logout); atomic `cinny_session_v1` blob + cross-tab logout sync; KE-1→4 diagnostics capture card in Developer Tools | | **Desktop app (Tauri)** | `cinny-desktop` → `src-tauri/src/native/*.rs`, `src-tauri/src/lib.rs`; cinny `src/app/hooks/useTauri*.ts`, `src/app/components/TauriDesktopFeatures.tsx` | Tauri v2 native shell: rich WinRT toast notifications (click → open room, inline quick reply), Windows Focus Assist → DND sync, taskbar Jump List of recent rooms, taskbar thumbnail + volume-flyout call controls (mute/deafen/end), no-sleep during calls, network-change awareness (`mx.retryImmediately`), opt-in TDS window chrome, recursive folder drag-drop, auto-update toast. Windows-native pieces compile in CI (Gitea `windows` runner + GitHub `windows-latest`); detail in cinny `LOTUS_FEATURES.md` → Desktop App Features | | **LiveKit codec config** | `/etc/livekit/config.yaml` (LXC 151) | `enabled_codecs`: VP8, H264, VP9, Opus, RED for better quality and redundancy | diff --git a/landing/index.html b/landing/index.html index aa0b1c6..b3bff6e 100644 --- a/landing/index.html +++ b/landing/index.html @@ -555,7 +555,7 @@

Our Lotus Guild fork of Cinny adds: voice message recording & playback with 0.75×/1×/1.5×/2× speed control (MSC3245, E2EE), device verification fix (cross-client SAS emoji + inline cards), per-member device session panel with per-device verify buttons, full Discord-style presence tracking (online on startup, idle/away after 10 min inactivity, unavailable when tab hidden, offline on close — with a “Hide Online Status” privacy toggle), presence status indicators (online/busy/away dots) in member lists, incoming call ring + Answer/Decline (DMs & group chats), GIF picker (Giphy), emoji & sticker picker (custom packs, stickers send as m.sticker events), pinned messages panel (pin icon in room header, pin/unpin from message menu), who-reacted viewer (hover any reaction for a name tooltip; right-click for a full avatar list), draggable+resizable picture-in-picture call window, poll creation & voting (single or multiple choice, 2–10 options), message forwarding, image/video captions, location sharing (map view + send), deleted message placeholders, per-message read receipt avatars (click for full list with timestamps), private read receipts toggle (Settings → Privacy), screenshare fullscreen button, screenshare audio mute (mute a screenshare’s audio without leaving the call), PTT (Push-to-Talk with configurable hold key), push-to-deafen (M key, configurable in Settings → Calls), custom status messages with emoji picker + auto-clear timer (30 min – 7 days) shown below usernames, encrypted room search via local cache scan with per-room “Load more” history buttons, a dedicated Privacy settings section (hide typing, hide online status), sidebar room filter (search rooms by name in Home and DMs tabs), favorite rooms (star any room, syncs across devices via m.favourite tag), media gallery drawer (browse all images/videos/files shared in a room), invite link + QR code (in both invite modal and room settings), knock-to-join support (Request to Join button + admin Approve/Deny panel), code syntax highlighting in Lotus Terminal mode (keywords, strings, numbers, comments, functions), night light / blue light filter (warm orange overlay with adjustable intensity in Settings → Appearance), message length counter in the composer, and the Lotus Terminal design theme (with TDS-styled orange typing indicator dots). - Also added in June 2026: message scheduling (MSC4140, datetime picker, cancel tray), saved messages / bookmarks (right-click any message, sidebar panel, syncs across devices), room history export (txt/json/html, date range, E2EE-aware), room activity & mod log (joins, kicks, bans, power level changes), server ACL editor (allow/deny lists, wildcard validation, power-level gated), room stats panel (top members, top reactions, media breakdown, 24h activity heatmap), opt-in image compression (Canvas API at 0.82 quality, shows before/after sizes), 13 domain-specific URL preview cards (YouTube, Vimeo, Twitch, Reddit, X/Twitter, Spotify, Steam, IMDb, Wikipedia, GitHub, Discord, npm, Stack Overflow), inline GIF preview (Giphy & Tenor share links auto-embed as animated GIFs via the homeserver proxy), policy list viewer (admin panel for m.policy.rule.* ban list rooms — complements Draupnir), collapsible long messages (auto-collapse > 20 lines with “Read more” toggle, threshold configurable), message send animation (0.15 s fade+scale on own messages, respects prefers-reduced-motion), right-click room context menu improvements (Mute with duration submenu 15 min–indefinite, Copy Room Link, Mark as Read, Leave Room, Room Settings), quick emoji reactions directly on message hover (3 most-recent emoji in the hover bar, single click to react), in-app notification toasts (TDS-styled slide-in card from bottom-right when the window is focused, 4 s auto-dismiss, click to navigate), presence avatar border ring (2px green/yellow/red ring on user avatars in the timeline, members list, @mention autocomplete, and notifications), room emoji prefix support (leading emoji renders at 1.15× in the sidebar; emoji picker button on all room name inputs), glassmorphism sidebar toggle (Settings → Appearance, off by default; frosted blur effect lets chat backgrounds show through the sidebar — fixed in June 2026 to mirror the background onto document.body so the blur has content to work through), and 5 CSS-only animated chat backgrounds: Digital Rain (two-layer vertical stripe scroll with parallax), Star Drift (three-layer radial-gradient dots drifting diagonally), Grid Pulse (neon grid lines expanding/contracting), Aurora Flow (sweeping radial gradient ellipses on a 200% canvas), and Fireflies (three layers of glowing dots drifting). All respect prefers-reduced-motion and include a "Pause Background Animations" toggle in Settings → Appearance. Also added: AFK auto-mute for voice calls (mic silenced after a configurable idle timeout of 1–30 min detected via Web Audio AnalyserNode; in-app toast confirms the action; toggle + duration selector in Settings → Calls), knock-to-join admin badge (a live warning badge on the Members button in the room header counts pending knock requests in real time, visible only to users with sufficient invite permissions), voice channel user limit (admins set a max-participant cap per room via the io.lotus.voice_limit state event; enforced server-side for every Matrix client by a guard that fronts the LiveKit JWT issuer and refuses tokens once a room is full, with a “Channel Full (N/N)” message and disabled Join button in Lotus Chat, while members already in the call can always rejoin), and custom call join/leave sound effects (a local cue plays when someone enters or leaves a call you’re in — tracked via MatrixRTC membership changes, synthesized in-browser with the Web Audio API so no assets are bundled; choose Chime, Soft, Retro, or off in Settings → Calls). Also shipped in June 2026: 11 seasonal & holiday theme overlays (Halloween, Christmas, New Year, Autumn, Valentine’s Day, St. Patrick’s Day, Earth Day, Lunar New Year, April Fools’, Deep Space, and Retro Arcade — auto-selected by date with a manual override in Settings → Appearance; CSS-only particle systems, fully animated, all respect prefers-reduced-motion), improved chat background animations (phosphor-flicker brightness layer on Digital Rain, seamless per-tile star looping, per-layer independent aurora positions for a true fluid sweep, organic firefly bioluminescence via independent brightness+opacity pulses), user-to-user private notes (freeform text note on any user’s profile, visible only to you, auto-saves after 800 ms, syncs across devices via io.lotus.user_notes account data), presence status revert fix (status message now re-read from storage on every activity event so changing your custom status in Profile Settings is never silently overwritten), and voice ringing fix for public space channels (joining a persistent voice room no longer triggers the incoming-call ring; the m.space.parent state key lookup was corrected to use getStateEvents instead of the single-key variant that always returned undefined), and avatar decorations (99 curated APNG overlay frames — Gaming, Cyber, Space, Fantasy, Elements, Japanese, Nature, Spooky, Cozy — that animate around your avatar in the message timeline, members list, and @mention autocomplete; decoration is stored in your public Matrix profile via MSC4133 so other Lotus Chat users see it on your avatar in real time; select from Settings → Account → Avatar Decoration; includes a Lotus Flower decoration), and a 3-tier call noise-suppression control (Settings → General → Calls — Off, Browser-native, or on-device ML) where the ML tier runs a choice of on-device models (RNNoise, Speex, DTLN, or DeepFilterNet 3) entirely in your browser to strip keyboard clatter, fans, and background chatter from your mic before it reaches the call; unlike Krisp-style cloud filters it needs no LiveKit Cloud subscription and works on our self-hosted SFU. Powered by our own self-built fork of Element Call, so call behavior is tuned for Lotus Guild rather than locked to an upstream bundle. Most recently: an in-call soundboard (upload your own short audio clips — like custom emojis, synced across your devices — and play them into a call so everyone hears them, mixed in as a real call track), per-user call quality controls (cap your microphone/screenshare bitrate and screenshare framerate for slower connections, in Settings → Calls), and server-enforced room call permissions (admins can turn off screen sharing or make a room audio-only, enforced for every Matrix client by the same LiveKit token guard — and it stops an in-progress screenshare within seconds of being switched off). Also new — a native desktop app (Windows/macOS/Linux, built on Tauri): rich Windows toast notifications you can click to open the room or reply to inline, Windows Focus Assist sync (auto-silences Lotus while Windows is in Do-Not-Disturb), a taskbar Jump List of your most-active rooms, taskbar thumbnail call controls (mute/deafen/end) plus call status in the volume flyout, the system stays awake during calls, prompt reconnect on network changes, an opt-in Lotus-styled window title bar, recursive folder drag-drop (drop a whole folder to upload everything inside), a drag-to-reorder composer toolbar, a draft-saved indicator, and automatic background updates with a one-click update toast. Newest (July 2026): full thread support (a dedicated side panel with its own composer, "N replies" chips with unread badges on root messages, per-thread read tracking), math/LaTeX rendering (KaTeX — $inline$ and $$block$$, lazy-loaded), an opt-in persistent search index for encrypted rooms (survives reloads; stored only on your device, clearable, wiped on logout), hardened atomic session storage with cross-tab logout sync, and a built-in crypto-diagnostics capture tool for debugging E2EE issues. + Also added in June 2026: message scheduling (MSC4140, datetime picker, cancel tray), saved messages / bookmarks (right-click any message, sidebar panel, syncs across devices), room history export (txt/json/html, date range, E2EE-aware), room activity & mod log (joins, kicks, bans, power level changes), server ACL editor (allow/deny lists, wildcard validation, power-level gated), room stats panel (top members, top reactions, media breakdown, 24h activity heatmap), opt-in image compression (Canvas API at 0.82 quality, shows before/after sizes), 13 domain-specific URL preview cards (YouTube, Vimeo, Twitch, Reddit, X/Twitter, Spotify, Steam, IMDb, Wikipedia, GitHub, Discord, npm, Stack Overflow), inline GIF preview (Giphy & Tenor share links auto-embed as animated GIFs via the homeserver proxy), policy list viewer (admin panel for m.policy.rule.* ban list rooms — complements Draupnir), collapsible long messages (auto-collapse > 20 lines with “Read more” toggle, threshold configurable), message send animation (0.15 s fade+scale on own messages, respects prefers-reduced-motion), right-click room context menu improvements (Mute with duration submenu 15 min–indefinite, Copy Room Link, Mark as Read, Leave Room, Room Settings), quick emoji reactions directly on message hover (3 most-recent emoji in the hover bar, single click to react), in-app notification toasts (TDS-styled slide-in card from bottom-right when the window is focused, 4 s auto-dismiss, click to navigate), presence avatar border ring (2px green/yellow/red ring on user avatars in the timeline, members list, @mention autocomplete, and notifications), room emoji prefix support (leading emoji renders at 1.15× in the sidebar; emoji picker button on all room name inputs), glassmorphism sidebar toggle (Settings → Appearance, off by default; frosted blur effect lets chat backgrounds show through the sidebar — fixed in June 2026 to mirror the background onto document.body so the blur has content to work through), and 5 CSS-only animated chat backgrounds: Digital Rain (two-layer vertical stripe scroll with parallax), Star Drift (three-layer radial-gradient dots drifting diagonally), Grid Pulse (neon grid lines expanding/contracting), Aurora Flow (sweeping radial gradient ellipses on a 200% canvas), and Fireflies (three layers of glowing dots drifting). All respect prefers-reduced-motion and include a "Pause Background Animations" toggle in Settings → Appearance. Also added: AFK auto-mute for voice calls (mic silenced after a configurable idle timeout of 1–30 min detected via Web Audio AnalyserNode; in-app toast confirms the action; toggle + duration selector in Settings → Calls), knock-to-join admin badge (a live warning badge on the Members button in the room header counts pending knock requests in real time, visible only to users with sufficient invite permissions), voice channel user limit (admins set a max-participant cap per room via the io.lotus.voice_limit state event; enforced server-side for every Matrix client by a guard that fronts the LiveKit JWT issuer and refuses tokens once a room is full, with a “Channel Full (N/N)” message and disabled Join button in Lotus Chat, while members already in the call can always rejoin), and custom call join/leave sound effects (a local cue plays when someone enters or leaves a call you’re in — tracked via MatrixRTC membership changes, synthesized in-browser with the Web Audio API so no assets are bundled; choose Chime, Soft, Retro, or off in Settings → Calls). Also shipped in June 2026: 11 seasonal & holiday theme overlays (Halloween, Christmas, New Year, Autumn, Valentine’s Day, St. Patrick’s Day, Earth Day, Lunar New Year, April Fools’, Deep Space, and Retro Arcade — auto-selected by date with a manual override in Settings → Appearance; CSS-only particle systems, fully animated, all respect prefers-reduced-motion), improved chat background animations (phosphor-flicker brightness layer on Digital Rain, seamless per-tile star looping, per-layer independent aurora positions for a true fluid sweep, organic firefly bioluminescence via independent brightness+opacity pulses), user-to-user private notes (freeform text note on any user’s profile, visible only to you, auto-saves after 800 ms, syncs across devices via io.lotus.user_notes account data), presence status revert fix (status message now re-read from storage on every activity event so changing your custom status in Profile Settings is never silently overwritten), and voice ringing fix for public space channels (joining a persistent voice room no longer triggers the incoming-call ring; the m.space.parent state key lookup was corrected to use getStateEvents instead of the single-key variant that always returned undefined), and avatar decorations (99 curated APNG overlay frames — Gaming, Cyber, Space, Fantasy, Elements, Japanese, Nature, Spooky, Cozy — that animate around your avatar in the message timeline, members list, and @mention autocomplete; decoration is stored in your public Matrix profile via MSC4133 so other Lotus Chat users see it on your avatar in real time; select from Settings → Account → Avatar Decoration; includes a Lotus Flower decoration), and a 3-tier call noise-suppression control (Settings → General → Calls — Off, Browser-native, or on-device ML) where the ML tier runs a choice of on-device models (RNNoise, Speex, DTLN, or DeepFilterNet 3) entirely in your browser to strip keyboard clatter, fans, and background chatter from your mic before it reaches the call; unlike Krisp-style cloud filters it needs no LiveKit Cloud subscription and works on our self-hosted SFU. Powered by our own self-built fork of Element Call, so call behavior is tuned for Lotus Guild rather than locked to an upstream bundle. Most recently: an in-call soundboard (upload your own short audio clips — like custom emojis, synced across your devices — and play them into a call so everyone hears them, mixed in as a real call track), per-user call quality controls (cap your microphone/screenshare bitrate and screenshare framerate for slower connections, in Settings → Calls), and server-enforced room call permissions (admins can turn off screen sharing or make a room audio-only, enforced for every Matrix client by the same LiveKit token guard — and it stops an in-progress screenshare within seconds of being switched off). Also new — a native desktop app (Windows/macOS/Linux, built on Tauri): rich Windows toast notifications you can click to open the room or reply to inline, Windows Focus Assist sync (auto-silences Lotus while Windows is in Do-Not-Disturb), a taskbar Jump List of your most-active rooms, taskbar thumbnail call controls (mute/deafen/end) plus call status in the volume flyout, the system stays awake during calls, prompt reconnect on network changes, an opt-in Lotus-styled window title bar, recursive folder drag-drop (drop a whole folder to upload everything inside), a drag-to-reorder composer toolbar, a draft-saved indicator, and automatic background updates with a one-click update toast. Newest (July 2026): full thread support (a dedicated side panel with its own composer, "N replies" chips with unread badges on root messages, per-thread read tracking, and Slack-style thread notifications — by default you're only pinged for threads you're in or where you're mentioned, with per-thread All/Mentions/Mute overrides that sync across devices), math/LaTeX rendering (KaTeX — $inline$ and $$block$$, lazy-loaded), an opt-in persistent search index for encrypted rooms (survives reloads; stored only on your device, clearable, wiped on logout), hardened atomic session storage with cross-tab logout sync, and a built-in crypto-diagnostics capture tool for debugging E2EE issues. Prefer the unmodified upstream? cinny.in works with our homeserver — set it to matrix.lotusguild.org.

@@ -950,7 +950,7 @@ Threads - full side panel + unread chips + side panel + Slack-style per-thread notifications ~basic, no dedicated view ~Labs flag shows as regular messages