f3c2babd4b4c198723440f17521f9208f3e352a8
Check navigator.permissions for microphone state before the call starts. If the user has blocked microphone access, disable the Join button and show an inline message explaining how to fix it in browser settings. Subscribes to permission change events so the UI updates if they grant access without refreshing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Lotus Chat
A Matrix client for Lotus Guild — forked from Cinny v4.11.1.
Deployed at chat.lotusguild.org.
Changes from upstream Cinny
Branding & Identity
- Package renamed to
lotus-chat, description updated to "Lotus Chat — Matrix client for Lotus Guild" - App title changed from "Cinny" to "Lotus Chat" throughout
- Favicon, PWA icons, and all icon sizes (57×57 → 180×180 Apple touch icons) replaced with Lotus.png variants
- Logo in About dialog and Auth page replaced with official Lotus.png
- Auth footer rewritten: shows dynamic version from
package.json, links to lotusguild.org, chat.lotusguild.org, and matrix.lotusguild.org - Welcome page tagline changed from "Yet another matrix client" to "A Matrix client for Lotus Guild"
- Encryption key export filename changed from
cinny-keys.txttolotus-keys.txt manifest.jsonupdated with Lotus name, description, and branding colors
LotusGuild Terminal Design System (TDS) v1.2
A full custom theme engine layered on top of Cinny's vanilla-extract theming:
Dark mode (LotusTerminalTheme):
- CRT terminal aesthetic: scanline overlay, vignette, phosphor glow
- Palette: bg
#030508, orange#FF6B00, cyan#00D4FF, green#00FF88, text#c4d9ee - Monospace font stack, terminal-style scrollbars
- Custom hex-grid and circuit-board CSS background patterns
- Matrix-style boot messages on the welcome page
- CSS variables:
--lt-*family covering colors, glow effects, borders, animations
Light mode (LotusTerminalLightTheme):
- Full light palette: bg
#edf0f5, orange#c44e00, cyan#0062b8, green#006d35, text#111827 - No CRT effects (scanlines, vignette disabled)
- Light-mode scrollbars, adjusted code block colors, semantic color overrides
- Scoped to
html[data-theme="light"] body.lotusTerminalBodyClass ThemeManager.tsxsetsdata-themeattribute based on active theme kind
Chat Backgrounds (18+ custom patterns, all TDS-aware):
- Blueprint grid, carbon fiber, starfield, topographic contours, herringbone, crosshatch
- Chevron, polka dots, triangles, plaid
- All patterns use CSS custom properties — adapt to both TDS dark and light themes
- Settings toggle for showing per-message sender profiles
Voice / Video Call Improvements
- Camera default OFF: Camera no longer persists across sessions via localStorage. Always starts disabled. Optional
cameraOnJoinsetting for explicit opt-in. - Deafen button: Tooltip corrected to "Deafen" / "Undeafen" (was "Turn Off Sound" / "Turn On Sound")
- Screenshare confirmation: A confirm dialog appears before screenshare is broadcast to call participants
- Push to Talk (PTT):
- Configurable keybind (default: Space) via Settings > General > Calls
- Mic activates on keydown, deactivates on keyup
- Visual indicator: orange "PTT — Hold SPACE" when PTT mode is on, green "● LIVE" while transmitting
- Implemented via
CallControl.setMicrophone()public method on the widget bridge
- Noise suppression toggle: Settings > General > Calls — passes
noiseSuppressionURL parameter to the embedded Element Call widget
Settings Additions
Settings > General > Calls (new section):
- Camera on join: toggle whether camera starts enabled
- Noise suppression: toggle noise suppression in calls (default: on)
- Push to Talk: enable PTT mode and configure the keybind
Editor
- Editor toolbar visibility is user-configurable (toggle added to message composer settings)
Technical
- All upstream Cinny URLs replaced (cinny.in → lotusguild.org, Cinny Matrix room → Lotus Guild room)
- Version string is dynamically read from
package.jsonat build time — no hardcoded version strings useCallEmbed.ts: noise suppression setting wired throughcreateCallEmbed→CallEmbed.getWidget()→ Element Call URL paramsCallControl.ts: addedsetMicrophone(enabled: boolean)public method for programmatic mic control (used by PTT)callPreferencesatom: never persistsvideo: trueto localStorage; camera state always resets to OFF on page load
Upstream
Based on Cinny — a Matrix client focusing on simple, elegant and secure interface.
Languages
TypeScript
98.2%
JavaScript
1.4%
CSS
0.3%
HTML
0.1%