root f3c2babd4b fix(call): show mic-denied error before joining instead of crashing
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>
2026-05-14 11:56:38 -04:00
2022-12-20 20:47:51 +05:30
2022-01-30 20:58:38 +05:30
2022-12-20 20:47:51 +05:30
2024-05-22 21:56:44 +10:00
2024-09-07 19:15:55 +05:30
2026-02-22 18:15:23 +11:00
2023-02-24 17:28:04 +05:30

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.txt to lotus-keys.txt
  • manifest.json updated 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.tsx sets data-theme attribute 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 cameraOnJoin setting 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 noiseSuppression URL 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.json at build time — no hardcoded version strings
  • useCallEmbed.ts: noise suppression setting wired through createCallEmbedCallEmbed.getWidget() → Element Call URL params
  • CallControl.ts: added setMicrophone(enabled: boolean) public method for programmatic mic control (used by PTT)
  • callPreferences atom: never persists video: true to localStorage; camera state always resets to OFF on page load

Upstream

Based on Cinny — a Matrix client focusing on simple, elegant and secure interface.

S
Description
Lotus Guild fork of Cinny — custom Matrix web client
Readme AGPL-3.0 90 MiB
Languages
TypeScript 98.2%
JavaScript 1.4%
CSS 0.3%
HTML 0.1%