From d17c40e79f66f6d9ed2019c53edf4a9b3d0b9ec3 Mon Sep 17 00:00:00 2001 From: Lotus CI Date: Tue, 13 Oct 2026 02:36:25 -0400 Subject: [PATCH] landing: describe SSO sign-up, drop dashes and hyphens from the page text The "How to Join" steps still said to register with a token from Jared; accounts now come from LLDAP and people sign in with Lotus SSO. The steps now read: ask Jared for a Lotus Guild account, open chat.lotusguild.org and sign in with Lotus SSO, join the space. The contact line asks "Questions or need an account?" and the server details say "Invite only". Visible text no longer uses em dashes, en dashes or hyphens (dashes became colons, commas, full stops or "to"; compounds became separate words), in the hand-written parts and in data/features.json / comparison.json, with index.html regenerated by build.py. Package names (matrix-js-sdk, matrix-rust-sdk, matrix-dart-sdk, matrix-sdk-crypto-wasm) and D-Bus keep their hyphens; markup, URLs and are untouched. The reviewed date displays as "September 26, 2026" (datetime attribute stays ISO). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5 --- landing/build.py | 10 +- landing/data/comparison.json | 128 ++++++++++----------- landing/data/features.json | 46 ++++---- landing/index.html | 216 +++++++++++++++++------------------ landing/style.css | 4 +- 5 files changed, 206 insertions(+), 198 deletions(-) diff --git a/landing/build.py b/landing/build.py index 8e8a34c..75433e5 100644 --- a/landing/build.py +++ b/landing/build.py @@ -23,6 +23,14 @@ import sys from pathlib import Path ROOT = Path(__file__).resolve().parent + + +def human_date(iso): + """2026-09-26 -> September 26, 2026 (the page avoids hyphens in visible text).""" + from datetime import date + + d = date.fromisoformat(iso) + return f"{d:%B} {d.day}, {d.year}" INDEX = ROOT / "index.html" MARK = {"yes": "✓", "no": "✗", "part": "~"} @@ -96,7 +104,7 @@ def main(): new = replace_block(new, "features", render_features(features)) new = replace_block(new, "comparison", render_comparison(comparison)) new = replace_block( - new, "reviewed", f'Client comparison last reviewed ' + new, "reviewed", f'Client comparison last reviewed ' ) if "--check" in sys.argv: if new != html: diff --git a/landing/data/comparison.json b/landing/data/comparison.json index 46367cb..952e2cb 100644 --- a/landing/data/comparison.json +++ b/landing/data/comparison.json @@ -190,18 +190,18 @@ }, { "mark": "part", - "note": "Linux: click opens chat, Mark-as-read/Mute actions; no inline reply" + "note": "Linux: click opens chat, Mark as read/Mute actions; no inline reply" }, { "mark": "yes", - "note": "Windows & Linux: click-to-open, inline reply, call accept/decline" + "note": "Windows & Linux: click to open, inline reply, call accept/decline" }, { "mark": "part" }, { "mark": "yes", - "note": "Linux inline reply (D-Bus), macOS quick reply, click-to-open" + "note": "Linux inline reply (D-Bus), macOS quick reply, click to open" } ] }, @@ -232,7 +232,7 @@ ] }, { - "feature": "Taskbar + volume-flyout call controls", + "feature": "Taskbar + volume flyout call controls", "cells": [ { "mark": "yes" @@ -258,7 +258,7 @@ ] }, { - "feature": "Focus Assist → auto Do-Not-Disturb", + "feature": "Focus Assist → auto Do Not Disturb", "cells": [ { "mark": "yes" @@ -311,7 +311,7 @@ ] }, { - "feature": "Recursive folder drag-drop upload", + "feature": "Recursive folder drag drop upload", "cells": [ { "mark": "yes" @@ -404,7 +404,7 @@ "cells": [ { "mark": "yes", - "note": "SAS emoji, cross-client requests show inline card" + "note": "SAS emoji, cross client requests show inline card" }, { "mark": "part", @@ -501,27 +501,27 @@ "cells": [ { "mark": "yes", - "note": "3 tiers: off / browser-native /
on-device ML (RNNoise, Speex,
DTLN, DeepFilterNet 3),
works on self-hosted SFU" + "note": "3 tiers: off / browser native /
on device ML (RNNoise, Speex,
DTLN, DeepFilterNet 3),
works on self hosted SFU" }, { "mark": "part", - "note": "browser-native
via Element Call" + "note": "browser native
via Element Call" }, { "mark": "part", - "note": "browser-native" + "note": "browser native" }, { "mark": "part", - "note": "WebRTC-native" + "note": "WebRTC native" }, { "mark": "part", - "note": "browser-native (WebRTC)" + "note": "browser native (WebRTC)" }, { "mark": "part", - "note": "browser-native (WebRTC noiseSuppression toggle)" + "note": "browser native (WebRTC noiseSuppression toggle)" }, { "mark": "no" @@ -529,15 +529,15 @@ ] }, { - "feature": "Push-to-Talkhold key to transmit", + "feature": "Push to Talkhold key to transmit", "cells": [ { "mark": "yes", - "note": "configurable hold key,
PTT badge in call bar;
M = push-to-deafen;
system-wide on Windows desktop" + "note": "configurable hold key,
PTT badge in call bar;
M = push to deafen;
system wide on Windows desktop" }, { "mark": "part", - "note": "hold Space while muted (Element Call built-in); no configurable key" + "note": "hold Space while muted (Element Call built in); no configurable key" }, { "mark": "no" @@ -558,11 +558,11 @@ ] }, { - "feature": "AFK auto-mutesilence mic after idle timeout", + "feature": "AFK auto mutesilence mic after idle timeout", "cells": [ { "mark": "yes", - "note": "1–30 min timeout,
toast notification" + "note": "1 to 30 min timeout,
toast notification" }, { "mark": "no" @@ -585,11 +585,11 @@ ] }, { - "feature": "Voice channel user limitadmin-set max participants", + "feature": "Voice channel user limitadmin set max participants", "cells": [ { "mark": "yes", - "note": "per-room cap,
server-enforced
for all clients" + "note": "per room cap,
server enforced
for all clients" }, { "mark": "no" @@ -678,7 +678,7 @@ "cells": [ { "mark": "yes", - "note": "DMs & group chats;
ring tone, auto-dismiss" + "note": "DMs & group chats;
ring tone, auto dismiss" }, { "mark": "yes", @@ -715,11 +715,11 @@ "cells": [ { "mark": "yes", - "note": "best-in-class sub-space nav" + "note": "best in class subspace nav" }, { "mark": "yes", - "note": "best-in-class sub-space nav" + "note": "best in class subspace nav" }, { "mark": "yes", @@ -730,11 +730,11 @@ }, { "mark": "yes", - "note": "Discord-like categories" + "note": "Discord like categories" }, { "mark": "yes", - "note": "sub-spaces clunky" + "note": "subspaces clunky" }, { "mark": "part", @@ -747,7 +747,7 @@ "cells": [ { "mark": "yes", - "note": "side panel + Slack-style per-thread notifications" + "note": "side panel + Slack style per thread notifications" }, { "mark": "part", @@ -869,7 +869,7 @@ "cells": [ { "mark": "yes", - "note": "best-in-class" + "note": "best in class" }, { "mark": "yes" @@ -898,7 +898,7 @@ "cells": [ { "mark": "yes", - "note": "Giphy, Terminal TDS themed,
click-outside to close" + "note": "Giphy, Terminal TDS themed,
click outside to close" }, { "mark": "no" @@ -926,7 +926,7 @@ "cells": [ { "mark": "yes", - "note": "local cache scan; load-more
buttons extend history per room" + "note": "local cache scan; load more
buttons extend history per room" }, { "mark": "part", @@ -937,11 +937,11 @@ }, { "mark": "part", - "note": "per-room; downloads & decrypts history client-side" + "note": "per room; downloads & decrypts history client side" }, { "mark": "yes", - "note": "client-side; auto-fetches +
decrypts history during search" + "note": "client side; auto fetches +
decrypts history during search" }, { "mark": "part", @@ -988,7 +988,7 @@ "title": "UX & Extras", "rows": [ { - "feature": "Multi-account", + "feature": "Multi account", "cells": [ { "mark": "no" @@ -1001,7 +1001,7 @@ }, { "mark": "yes", - "note": "account switcher; multi-account push since v2.6.0" + "note": "account switcher; multi account push since v2.6.0" }, { "mark": "yes" @@ -1046,11 +1046,11 @@ ] }, { - "feature": "Discord-like UI", + "feature": "Discord like UI", "cells": [ { "mark": "yes", - "note": "best-in-class for web" + "note": "best in class for web" }, { "mark": "yes" @@ -1064,7 +1064,7 @@ }, { "mark": "yes", - "note": "Discord-like layout" + "note": "Discord like layout" }, { "mark": "no" @@ -1106,7 +1106,7 @@ "cells": [ { "mark": "yes", - "note": "5–80% intensity slider,
Settings → Appearance" + "note": "5 to 80% intensity slider,
Settings → Appearance" }, { "mark": "no" @@ -1129,7 +1129,7 @@ ] }, { - "feature": "Animated chat backgroundsCSS-only, GPU-accelerated", + "feature": "Animated chat backgroundsCSS only, GPU accelerated", "cells": [ { "mark": "yes", @@ -1230,7 +1230,7 @@ }, { "mark": "yes", - "note": "Forward action; multi-room on Android" + "note": "Forward action; multi room on Android" }, { "mark": "yes" @@ -1247,7 +1247,7 @@ ] }, { - "feature": "Per-message read receiptswho read each message", + "feature": "Per message read receiptswho read each message", "cells": [ { "mark": "yes", @@ -1281,7 +1281,7 @@ "cells": [ { "mark": "yes", - "note": "hover tooltip with names;
right-click for full avatar modal" + "note": "hover tooltip with names;
right click for full avatar modal" }, { "mark": "yes", @@ -1289,11 +1289,11 @@ }, { "mark": "yes", - "note": "long-press reaction for summary sheet" + "note": "long press reaction for summary sheet" }, { "mark": "yes", - "note": "long-press reaction" + "note": "long press reaction" }, { "mark": "yes" @@ -1342,7 +1342,7 @@ "cells": [ { "mark": "yes", - "note": "emoji picker, auto-clear timer
(30 min – 7 days), 64-char limit" + "note": "emoji picker, auto clear timer
(30 min to 7 days), 64 char limit" }, { "mark": "no" @@ -1370,11 +1370,11 @@ ] }, { - "feature": "Online presence trackingidle/away auto-detection", + "feature": "Online presence trackingidle/away auto detection", "cells": [ { "mark": "yes", - "note": "online on start, idle after 10 min,
unavailable when tab hidden,
offline on close; hide-status toggle" + "note": "online on start, idle after 10 min,
unavailable when tab hidden,
offline on close; hide status toggle" }, { "mark": "part", @@ -1390,11 +1390,11 @@ }, { "mark": "part", - "note": "sets 'unavailable' 15s after the app loses focus; no input-idle timer" + "note": "sets 'unavailable' 15s after the app loses focus; no input idle timer" }, { "mark": "part", - "note": "3-min idle → away; no hide toggle" + "note": "3 min idle → away; no hide toggle" }, { "mark": "part", @@ -1407,7 +1407,7 @@ "cells": [ { "mark": "yes", - "note": "right-side drawer;
Images/Videos/Files tabs" + "note": "right side drawer;
Images/Videos/Files tabs" }, { "mark": "no" @@ -1524,11 +1524,11 @@ ] }, { - "feature": "Custom notification soundsper-category sound selector", + "feature": "Custom notification soundsper category sound selector", "cells": [ { "mark": "yes", - "note": "per-category sound selector; ▶ preview" + "note": "per category sound selector; ▶ preview" }, { "mark": "no" @@ -1599,11 +1599,11 @@ }, { "mark": "part", - "note": "manual drag-reorder; no sort selector" + "note": "manual drag reorder; no sort selector" }, { "mark": "yes", - "note": "Activity, A-Z or Unread-first" + "note": "Activity, A to Z or Unread first" }, { "mark": "yes", @@ -1645,7 +1645,7 @@ "cells": [ { "mark": "yes", - "note": "txt/json/html, date range,
E2EE-aware" + "note": "txt/json/html, date range,
E2EE aware" }, { "mark": "no" @@ -1700,7 +1700,7 @@ "cells": [ { "mark": "yes", - "note": "right-click bookmark,
sidebar panel, syncs across devices" + "note": "right click bookmark,
sidebar panel, syncs across devices" }, { "mark": "no" @@ -1723,7 +1723,7 @@ ] }, { - "feature": "Collapsible long messagesauto-collapse >20 lines", + "feature": "Collapsible long messagesauto collapse >20 lines", "cells": [ { "mark": "yes", @@ -1751,7 +1751,7 @@ ] }, { - "feature": "Inline GIF previewGiphy / Tenor links auto-embed", + "feature": "Inline GIF previewGiphy / Tenor links auto embed", "cells": [ { "mark": "yes", @@ -1833,7 +1833,7 @@ ] }, { - "feature": "Quick emoji reactions on hover1-click react, no menu needed", + "feature": "Quick emoji reactions on hoverone click react, no menu needed", "cells": [ { "mark": "yes", @@ -1850,23 +1850,23 @@ }, { "mark": "yes", - "note": "hover bar shows up to 4 recent reactions, 1-click" + "note": "hover bar shows up to 4 recent reactions, one click" }, { "mark": "no" }, { "mark": "yes", - "note": "hover bar shows recent reactions, 1-click" + "note": "hover bar shows recent reactions, one click" } ] }, { - "feature": "In-app notification toastsTDS-styled, when window focused", + "feature": "In app notification toastsTDS styled, when window focused", "cells": [ { "mark": "yes", - "note": "slides in bottom-right;
4 s auto-dismiss, click to jump" + "note": "slides in bottom right;
4 s auto dismiss, click to jump" }, { "mark": "no" @@ -1889,11 +1889,11 @@ ] }, { - "feature": "On-device message translationread foreign messages in your language", + "feature": "On device message translationread foreign messages in your language", "cells": [ { "mark": "yes", - "note": "100% on-device browser AI;
works in E2EE rooms, no cloud;
Chromium desktop & Lotus app" + "note": "100% on device browser AI;
works in E2EE rooms, no cloud;
Chromium desktop & Lotus app" }, { "mark": "no" diff --git a/landing/data/features.json b/landing/data/features.json index 08bd904..c033c83 100644 --- a/landing/data/features.json +++ b/landing/data/features.json @@ -2,56 +2,56 @@ { "title": "Calls & Voice", "items": [ - "Voice rooms with our own Element Call fork on a self-hosted LiveKit SFU", - "Push-to-talk and push-to-deafen, with system-wide hotkeys on the Windows app (work while a game has focus)", - "Mic level meter on the mute button; per-person call volume that's remembered between calls", - "On-device noise suppression: Off, browser-native, or ML (RNNoise, Speex, DTLN, DeepFilterNet 3)", - "In-call soundboard with your own clips, synced across your devices", - "Incoming-call ring with Answer/Decline, join/leave sounds, draggable picture-in-picture window", - "Screenshare fullscreen and audio mute; per-user mic/screenshare bitrate and framerate caps", - "Server-enforced room limits and permissions (max participants, audio-only, no screenshare) for every Matrix client", - "AFK auto-mute after a configurable idle time" + "Voice rooms with our own Element Call fork on a self hosted LiveKit SFU", + "Push to talk and push to deafen, with system wide hotkeys on the Windows app (work while a game has focus)", + "Mic level meter on the mute button; per person call volume that's remembered between calls", + "On device noise suppression: Off, browser native, or ML (RNNoise, Speex, DTLN, DeepFilterNet 3)", + "In call soundboard with your own clips, synced across your devices", + "Incoming call ring with Answer/Decline, join/leave sounds, draggable picture in picture window", + "Screenshare fullscreen and audio mute; per user mic/screenshare bitrate and framerate caps", + "Server enforced room limits and permissions (max participants, audio only, no screenshare) for every Matrix client", + "AFK auto mute after a configurable idle time" ] }, { "title": "Messaging", "items": [ - "Threads with a side panel, unread chips, “Mark all read” and per-thread notification overrides", + "Threads with a side panel, unread chips, “Mark all read” and per thread notification overrides", "Search operators: from:, in:, before:/after: (dates or 7d), has:link|image|video|file, is:pinned", - "Voice messages with 0.75×–2× playback (MSC3245, E2EE)", + "Voice messages with 0.75× to 2× playback (MSC3245, E2EE)", "Polls, message scheduling (MSC4140), forwarding, captions and location sharing", "Pinned messages, saved messages/bookmarks and private notes on people, synced across devices", - "Who-reacted viewer, read receipt avatars, quick reactions on hover", + "Who reacted viewer, read receipt avatars, quick reactions on hover", "GIF picker (Giphy), custom emoji & sticker packs, math/LaTeX (KaTeX)", "Pasted code is offered as a formatted code block, with the language detected", - "On-device message translation: text never leaves your machine, works in encrypted rooms" + "On device message translation: text never leaves your machine, works in encrypted rooms" ] }, { "title": "Media & Links", "items": [ - "Click-to-play inline embeds: YouTube, Vimeo, Twitch, TikTok, X, Instagram, Reddit, Bluesky, Spotify, SoundCloud, Apple Music, Tidal and more", + "Click to play inline embeds: YouTube, Vimeo, Twitch, TikTok, X, Instagram, Reddit, Bluesky, Spotify, SoundCloud, Apple Music, Tidal and more", "Rich link cards for GitHub, Steam, Wikipedia, IMDb, npm and others; animated GIF previews", - "Full-screen viewer with pinch-zoom, swipe/arrow-key navigation and captions; media gallery for every file shared in a room", - "Optional image compression, folder drag-and-drop upload" + "Full screen viewer with pinch zoom, swipe/arrow key navigation and captions; media gallery for every file shared in a room", + "Optional image compression, folder drag and drop upload" ] }, { "title": "Privacy & Security", "items": [ "Private read receipts, hide typing, hide online status", - "Tracking-parameter stripping (utm_*, fbclid, YouTube si= and ~40 more), on your device", - "Opt-in on-device search index for encrypted rooms, wiped on logout", - "Device verification fixes (cross-client emoji SAS) and a per-member session panel" + "Tracking parameter stripping (utm_*, fbclid, YouTube si= and ~40 more), on your device", + "Opt in on device search index for encrypted rooms, wiped on logout", + "Device verification fixes (cross client emoji SAS) and a per member session panel" ] }, { "title": "Look & Feel", "items": [ - "Lotus Terminal theme, night-light filter, glassmorphism sidebar", + "Lotus Terminal theme, night light filter, glassmorphism sidebar", "Animated chat backgrounds and 11 seasonal overlays (all respect reduced motion)", "629 animated avatar decorations in 28 categories, visible to other Lotus users (MSC4133)", - "Custom status with emoji and auto-clear, Discord-style presence rings", + "Custom status with emoji and auto clear, Discord style presence rings", "Settings sync across devices (theme, layout, notification and privacy preferences)" ] }, @@ -67,9 +67,9 @@ { "title": "Rooms & Moderation", "items": [ - "Knock-to-join with an admin approve/deny panel and live pending-count badge", + "Knock to join with an admin approve/deny panel and live pending count badge", "Invite links with QR codes, favourites, room filter, room history export (txt/json/html)", - "Room activity & mod log, stats panel, server ACL editor, policy-list viewer", + "Room activity & mod log, stats panel, server ACL editor, policy list viewer", "Room widgets, with a permission prompt before a widget may read or send in the room" ] } diff --git a/landing/index.html b/landing/index.html index 15e1d2b..5901cc7 100644 --- a/landing/index.html +++ b/landing/index.html @@ -426,12 +426,12 @@ background: #111; } tr.section-header td { - /* section headers span full width — override sticky bg */ + /* section headers span full width: override sticky bg */ position: static; background: rgba(152,0,0,0.06); } - /* Scroll hint — visible only on mobile via JS class */ + /* Scroll hint: visible only on mobile via JS class */ .scroll-hint { display: none; font-size: 0.72rem; @@ -543,11 +543,11 @@
  1. 1 - Open chat.lotusguild.org — your homeserver is pre-configured + Ask @jared:matrix.lotusguild.org for a Lotus Guild account
  2. 2 - Register with a token from Jared — @jared:matrix.lotusguild.org + Open chat.lotusguild.org and sign in with Lotus SSO
  3. 3 @@ -569,14 +569,14 @@ @@ -586,56 +586,56 @@

    Calls & Voice

      -
    • Voice rooms with our own Element Call fork on a self-hosted LiveKit SFU
    • -
    • Push-to-talk and push-to-deafen, with system-wide hotkeys on the Windows app (work while a game has focus)
    • -
    • Mic level meter on the mute button; per-person call volume that's remembered between calls
    • -
    • On-device noise suppression: Off, browser-native, or ML (RNNoise, Speex, DTLN, DeepFilterNet 3)
    • -
    • In-call soundboard with your own clips, synced across your devices
    • -
    • Incoming-call ring with Answer/Decline, join/leave sounds, draggable picture-in-picture window
    • -
    • Screenshare fullscreen and audio mute; per-user mic/screenshare bitrate and framerate caps
    • -
    • Server-enforced room limits and permissions (max participants, audio-only, no screenshare) for every Matrix client
    • -
    • AFK auto-mute after a configurable idle time
    • +
    • Voice rooms with our own Element Call fork on a self hosted LiveKit SFU
    • +
    • Push to talk and push to deafen, with system wide hotkeys on the Windows app (work while a game has focus)
    • +
    • Mic level meter on the mute button; per person call volume that's remembered between calls
    • +
    • On device noise suppression: Off, browser native, or ML (RNNoise, Speex, DTLN, DeepFilterNet 3)
    • +
    • In call soundboard with your own clips, synced across your devices
    • +
    • Incoming call ring with Answer/Decline, join/leave sounds, draggable picture in picture window
    • +
    • Screenshare fullscreen and audio mute; per user mic/screenshare bitrate and framerate caps
    • +
    • Server enforced room limits and permissions (max participants, audio only, no screenshare) for every Matrix client
    • +
    • AFK auto mute after a configurable idle time

    Messaging

      -
    • Threads with a side panel, unread chips, “Mark all read” and per-thread notification overrides
    • +
    • Threads with a side panel, unread chips, “Mark all read” and per thread notification overrides
    • Search operators: from:, in:, before:/after: (dates or 7d), has:link|image|video|file, is:pinned
    • -
    • Voice messages with 0.75×–2× playback (MSC3245, E2EE)
    • +
    • Voice messages with 0.75× to 2× playback (MSC3245, E2EE)
    • Polls, message scheduling (MSC4140), forwarding, captions and location sharing
    • Pinned messages, saved messages/bookmarks and private notes on people, synced across devices
    • -
    • Who-reacted viewer, read receipt avatars, quick reactions on hover
    • +
    • Who reacted viewer, read receipt avatars, quick reactions on hover
    • GIF picker (Giphy), custom emoji & sticker packs, math/LaTeX (KaTeX)
    • Pasted code is offered as a formatted code block, with the language detected
    • -
    • On-device message translation: text never leaves your machine, works in encrypted rooms
    • +
    • On device message translation: text never leaves your machine, works in encrypted rooms

    Media & Links

      -
    • Click-to-play inline embeds: YouTube, Vimeo, Twitch, TikTok, X, Instagram, Reddit, Bluesky, Spotify, SoundCloud, Apple Music, Tidal and more
    • +
    • Click to play inline embeds: YouTube, Vimeo, Twitch, TikTok, X, Instagram, Reddit, Bluesky, Spotify, SoundCloud, Apple Music, Tidal and more
    • Rich link cards for GitHub, Steam, Wikipedia, IMDb, npm and others; animated GIF previews
    • -
    • Full-screen viewer with pinch-zoom, swipe/arrow-key navigation and captions; media gallery for every file shared in a room
    • -
    • Optional image compression, folder drag-and-drop upload
    • +
    • Full screen viewer with pinch zoom, swipe/arrow key navigation and captions; media gallery for every file shared in a room
    • +
    • Optional image compression, folder drag and drop upload

    Privacy & Security

    • Private read receipts, hide typing, hide online status
    • -
    • Tracking-parameter stripping (utm_*, fbclid, YouTube si= and ~40 more), on your device
    • -
    • Opt-in on-device search index for encrypted rooms, wiped on logout
    • -
    • Device verification fixes (cross-client emoji SAS) and a per-member session panel
    • +
    • Tracking parameter stripping (utm_*, fbclid, YouTube si= and ~40 more), on your device
    • +
    • Opt in on device search index for encrypted rooms, wiped on logout
    • +
    • Device verification fixes (cross client emoji SAS) and a per member session panel

    Look & Feel

      -
    • Lotus Terminal theme, night-light filter, glassmorphism sidebar
    • +
    • Lotus Terminal theme, night light filter, glassmorphism sidebar
    • Animated chat backgrounds and 11 seasonal overlays (all respect reduced motion)
    • 629 animated avatar decorations in 28 categories, visible to other Lotus users (MSC4133)
    • -
    • Custom status with emoji and auto-clear, Discord-style presence rings
    • +
    • Custom status with emoji and auto clear, Discord style presence rings
    • Settings sync across devices (theme, layout, notification and privacy preferences)
    @@ -651,16 +651,16 @@

    Rooms & Moderation

      -
    • Knock-to-join with an admin approve/deny panel and live pending-count badge
    • +
    • Knock to join with an admin approve/deny panel and live pending count badge
    • Invite links with QR codes, favourites, room filter, room history export (txt/json/html)
    • -
    • Room activity & mod log, stats panel, server ACL editor, policy-list viewer
    • +
    • Room activity & mod log, stats panel, server ACL editor, policy list viewer
    • Room widgets, with a permission prompt before a widget may read or send in the room

    Full list in LOTUS_FEATURES.md.

    -

    Prefer the unmodified upstream? cinny.in works with our homeserver — set it to matrix.lotusguild.org.

    +

    Prefer the unmodified upstream? cinny.in works with our homeserver: set it to matrix.lotusguild.org.

    Already signed in? Jump straight into the community:

    @@ -674,7 +674,7 @@

    Other Clients

    -

    Web & Desktop — Official Cinny

    +

    Web & Desktop: Official Cinny

    @@ -687,13 +687,13 @@ Voice, Video & Screenshare
    -

    The upstream open-source Cinny client, on the web and as a desktop app for Windows, macOS and Linux. It has the same Discord-like UI and space navigation as Lotus Chat, and now includes voice/video calls, voice rooms and screenshare through embedded Element Call, with ringing for DM calls. It lacks our custom additions (no GIF picker, no PiP window, no message forwarding). Set homeserver to matrix.lotusguild.org.

    +

    The upstream open source Cinny client, on the web and as a desktop app for Windows, macOS and Linux. It has the same Discord like UI and space navigation as Lotus Chat, and now includes voice/video calls, voice rooms and screenshare through embedded Element Call, with ringing for DM calls. It lacks our custom additions (no GIF picker, no PiP window, no message forwarding). Set homeserver to matrix.lotusguild.org.

    -

    Mobile — iOS & Android

    +

    Mobile: iOS & Android

    @@ -705,7 +705,7 @@ Voice & Video
    -

    Element's next-generation mobile client for iOS and Android, built on the Rust SDK with Simplified Sliding Sync for near-instant startup (the iOS app also runs on Apple Silicon Macs). Voice and video calls, 1:1 and group, via embedded Element Call (MatrixRTC). It can view but not start screenshares. Live location sharing, media captions, polls, pinned messages, a media browser and spaces with create and management, plus custom status on supported homeservers. Threads are in Labs. Rust crypto (Vodozemac).

    +

    Element's next generation mobile client for iOS and Android, built on the Rust SDK with Simplified Sliding Sync for near instant startup (the iOS app also runs on Apple Silicon Macs). Voice and video calls, 1:1 and group, via embedded Element Call (MatrixRTC). It can view but not start screenshares. Live location sharing, media captions, polls, pinned messages, a media browser and spaces with create and management, plus custom status on supported homeservers. Threads are in Labs. Rust crypto (Vodozemac).

    @@ -719,13 +719,13 @@ Voice & Video (Experimental)
    -

    Simple, beginner-friendly Matrix client with a WhatsApp/Telegram-style design, available on Android, iOS, web and Linux desktop. Built on the Dart SDK with Vodozemac encryption. Supports threads, polls, image captions, custom sticker packs, voice messages and spaces. 1:1 voice and video calls exist but remain experimental: they are off by default, DM-only, legacy WebRTC, and there are no group calls.

    +

    Simple, beginner friendly Matrix client with a WhatsApp/Telegram style design, available on Android, iOS, web and Linux desktop. Built on the Dart SDK with Vodozemac encryption. Supports threads, polls, image captions, custom sticker packs, voice messages and spaces. 1:1 voice and video calls exist but remain experimental: they are off by default, DM only, legacy WebRTC, and there are no group calls.

    -

    Discord-like — Android, Windows, Linux & Web

    +

    Like Discord: Android, Windows, Linux & Web

    @@ -739,13 +739,13 @@ Voice, Video & Screenshare
    -

    Discord-style client built with Flutter. Multi-account support with all accounts signed in at once, built-in GIF search (Tenor through a privacy proxy, uploaded to your homeserver), shared calendar and photo-album rooms, polls, threads and widgets (new in v0.5.0). 1:1 calls use WebRTC and voice channels use MatrixRTC/LiveKit, with screenshare on desktop, Android and web. Encrypted group calls are experimental. Available for Windows, Linux, Android and on the web at app.commet.chat. Actively developed; macOS and iOS are planned.

    +

    Discord style client built with Flutter. Multi account support with all accounts signed in at once, built in GIF search (Tenor through a privacy proxy, uploaded to your homeserver), shared calendar and photo album rooms, polls, threads and widgets (new in v0.5.0). 1:1 calls use WebRTC and voice channels use MatrixRTC/LiveKit, with screenshare on desktop, Android and web. Encrypted group calls are experimental. Available for Windows, Linux, Android and on the web at app.commet.chat. Actively developed; macOS and iOS are planned.

    -

    Desktop — Windows, macOS & Linux

    +

    Desktop: Windows, macOS & Linux

    @@ -785,7 +785,7 @@

    Client Feature Comparison

    -Client comparison last reviewed +Client comparison last reviewed

    ← swipe to compare →

    @@ -861,10 +861,10 @@ Client comparison last reviewed ✓ ✗ ✗ - ~Linux: click opens chat, Mark-as-read/Mute actions; no inline reply - ✓Windows & Linux: click-to-open, inline reply, call accept/decline + ~Linux: click opens chat, Mark as read/Mute actions; no inline reply + ✓Windows & Linux: click to open, inline reply, call accept/decline ~ - ✓Linux inline reply (D-Bus), macOS quick reply, click-to-open + ✓Linux inline reply (D-Bus), macOS quick reply, click to open Windows Jump List (recent rooms) @@ -877,7 +877,7 @@ Client comparison last reviewed ✗ - Taskbar + volume-flyout call controls + Taskbar + volume flyout call controls ✓ ✗ ✗ @@ -887,7 +887,7 @@ Client comparison last reviewed ✗ - Focus Assist → auto Do-Not-Disturb + Focus Assist → auto Do Not Disturb ✓ ✗ ✗ @@ -907,7 +907,7 @@ Client comparison last reviewed ✗ - Recursive folder drag-drop upload + Recursive folder drag drop upload ✓ ✗ ✗ @@ -939,7 +939,7 @@ Client comparison last reviewed Device verification - ✓SAS emoji, cross-client requests show inline card + ✓SAS emoji, cross client requests show inline card ~own devices only (emoji + recovery key) ✓ ✓ @@ -970,18 +970,18 @@ Client comparison last reviewed Noise suppressionfilter background noise from mic - ✓3 tiers: off / browser-native /
    on-device ML (RNNoise, Speex,
    DTLN, DeepFilterNet 3),
    works on self-hosted SFU
    - ~browser-native
    via Element Call
    - ~browser-native - ~WebRTC-native - ~browser-native (WebRTC) - ~browser-native (WebRTC noiseSuppression toggle) + ✓3 tiers: off / browser native /
    on device ML (RNNoise, Speex,
    DTLN, DeepFilterNet 3),
    works on self hosted SFU
    + ~browser native
    via Element Call
    + ~browser native + ~WebRTC native + ~browser native (WebRTC) + ~browser native (WebRTC noiseSuppression toggle) ✗ - Push-to-Talkhold key to transmit - ✓configurable hold key,
    PTT badge in call bar;
    M = push-to-deafen;
    system-wide on Windows desktop
    - ~hold Space while muted (Element Call built-in); no configurable key + Push to Talkhold key to transmit + ✓configurable hold key,
    PTT badge in call bar;
    M = push to deafen;
    system wide on Windows desktop
    + ~hold Space while muted (Element Call built in); no configurable key ✗ ✗ ✗ @@ -989,8 +989,8 @@ Client comparison last reviewed ✗ - AFK auto-mutesilence mic after idle timeout - ✓1–30 min timeout,
    toast notification
    + AFK auto mutesilence mic after idle timeout + ✓1 to 30 min timeout,
    toast notification
    ✗ ✗ ✗ @@ -999,8 +999,8 @@ Client comparison last reviewed ✗ - Voice channel user limitadmin-set max participants - ✓per-room cap,
    server-enforced
    for all clients
    + Voice channel user limitadmin set max participants + ✓per room cap,
    server enforced
    for all clients
    ✗ ✗ ✗ @@ -1030,7 +1030,7 @@ Client comparison last reviewed Incoming call notificationring + Answer/Decline - ✓DMs & group chats;
    ring tone, auto-dismiss
    + ✓DMs & group chats;
    ring tone, auto dismiss
    ✓rings for DM calls (Answer/Reject); silent prompt for group calls ✓native push ~experimental @@ -1041,17 +1041,17 @@ Client comparison last reviewed Core Features Spaces - ✓best-in-class sub-space nav - ✓best-in-class sub-space nav + ✓best in class subspace nav + ✓best in class subspace nav ✓dedicated spaces tab,
    full management
    ✓ - ✓Discord-like categories - ✓sub-spaces clunky + ✓Discord like categories + ✓subspaces clunky ~limited Threads - ✓side panel + Slack-style per-thread notifications + ✓side panel + Slack style per thread notifications ~basic, no dedicated view ~Labs flag ✓thread view since v2.3.0 @@ -1091,7 +1091,7 @@ Client comparison last reviewed Custom emoji & stickers - ✓best-in-class + ✓best in class ✓ ~ ✓ @@ -1101,7 +1101,7 @@ Client comparison last reviewed GIF search / picker - ✓Giphy, Terminal TDS themed,
    click-outside to close
    + ✓Giphy, Terminal TDS themed,
    click outside to close
    ✗ ✗ ✗ @@ -1111,11 +1111,11 @@ Client comparison last reviewed Message search (encrypted) - ✓local cache scan; load-more
    buttons extend history per room
    + ✓local cache scan; load more
    buttons extend history per room
    ~server search only;
    no E2EE support
    ✗ - ~per-room; downloads & decrypts history client-side - ✓client-side; auto-fetches +
    decrypts history during search
    + ~per room; downloads & decrypts history client side + ✓client side; auto fetches +
    decrypts history during search
    ~desktop only, not web ~local DB scan @@ -1131,11 +1131,11 @@ Client comparison last reviewed UX & Extras - Multi-account + Multi account ✗ ✗ ✗ - ✓account switcher; multi-account push since v2.6.0 + ✓account switcher; multi account push since v2.6.0 ✓ ✗ ✗CLI profiles only @@ -1151,12 +1151,12 @@ Client comparison last reviewed ~ - Discord-like UI - ✓best-in-class for web + Discord like UI + ✓best in class for web ✓ ✗ ✗WhatsApp/Telegram style - ✓Discord-like layout + ✓Discord like layout ✗ ✗ @@ -1172,7 +1172,7 @@ Client comparison last reviewed Night Light / Blue Light Filterwarm overlay, adjustable intensity - ✓5–80% intensity slider,
    Settings → Appearance
    + ✓5 to 80% intensity slider,
    Settings → Appearance
    ✗ ✗ ✗ @@ -1181,7 +1181,7 @@ Client comparison last reviewed ✗ - Animated chat backgroundsCSS-only, GPU-accelerated + Animated chat backgroundsCSS only, GPU accelerated ✓5 animated wallpapers (rain,
    stars, grid pulse, aurora,
    fireflies); pause toggle
    ✗ ✗ @@ -1214,14 +1214,14 @@ Client comparison last reviewed Message forwarding ✓forward to any room ✗ - ✓Forward action; multi-room on Android + ✓Forward action; multi room on Android ✓ ✗ ✓ ✓ - Per-message read receiptswho read each message + Per message read receiptswho read each message ✓avatar pill below message,
    click for list + timestamps
    ✓'Read Receipts' in message menu lists readers ✓avatar thumbnails @@ -1232,10 +1232,10 @@ Client comparison last reviewed Who reactedsee who reacted with each emoji - ✓hover tooltip with names;
    right-click for full avatar modal
    + ✓hover tooltip with names;
    right click for full avatar modal
    ✓hover tooltip + 'View Reactions' viewer - ✓long-press reaction for summary sheet - ✓long-press reaction + ✓long press reaction for summary sheet + ✓long press reaction ✓ ✓hover tooltip lists reactors ✓ @@ -1252,7 +1252,7 @@ Client comparison last reviewed Custom status messageshown below username - ✓emoji picker, auto-clear timer
    (30 min – 7 days), 64-char limit
    + ✓emoji picker, auto clear timer
    (30 min to 7 days), 64 char limit
    ✗ ~emoji + text status (needs server support) ✓Set status; shown under DM header & in profile @@ -1261,18 +1261,18 @@ Client comparison last reviewed ✓shown next to sender name in timeline & in profile - Online presence trackingidle/away auto-detection - ✓online on start, idle after 10 min,
    unavailable when tab hidden,
    offline on close; hide-status toggle
    + Online presence trackingidle/away auto detection + ✓online on start, idle after 10 min,
    unavailable when tab hidden,
    offline on close; hide status toggle
    ~shows others' status; no idle detection ~reports own presence; doesn't show others' ~basic online/offline only - ~sets 'unavailable' 15s after the app loses focus; no input-idle timer - ~3-min idle → away; no hide toggle + ~sets 'unavailable' 15s after the app loses focus; no input idle timer + ~3 min idle → away; no hide toggle ~auto: unavailable ~30 s after losing focus Media Gallerybrowse room images/videos/files - ✓right-side drawer;
    Images/Videos/Files tabs
    + ✓right side drawer;
    Images/Videos/Files tabs
    ✗ ✓"Media and files" browser in room info ✓Gallery & Files tabs in chat search @@ -1311,8 +1311,8 @@ Client comparison last reviewed ✗ - Custom notification soundsper-category sound selector - ✓per-category sound selector; ▶ preview + Custom notification soundsper category sound selector + ✓per category sound selector; ▶ preview ✗ ~iOS: choose alert tone (global) ✗ @@ -1336,8 +1336,8 @@ Client comparison last reviewed ✗ ~sort by activity only ~activity only (favourites first, low priority last) - ~manual drag-reorder; no sort selector - ✓Activity, A-Z or Unread-first + ~manual drag reorder; no sort selector + ✓Activity, A to Z or Unread first ✓by importance/unread or alphabetical @@ -1352,7 +1352,7 @@ Client comparison last reviewed Export room historydownload messages as file - ✓txt/json/html, date range,
    E2EE-aware
    + ✓txt/json/html, date range,
    E2EE aware
    ✗ ✗ ✗ @@ -1372,7 +1372,7 @@ Client comparison last reviewed Message bookmarks / saved messages - ✓right-click bookmark,
    sidebar panel, syncs across devices
    + ✓right click bookmark,
    sidebar panel, syncs across devices
    ✗ ✗ ✗ @@ -1381,7 +1381,7 @@ Client comparison last reviewed ✗ - Collapsible long messagesauto-collapse >20 lines + Collapsible long messagesauto collapse >20 lines ✓"Read more" toggle,
    threshold configurable
    ✗ ✗ @@ -1391,7 +1391,7 @@ Client comparison last reviewed ✗ - Inline GIF previewGiphy / Tenor links auto-embed + Inline GIF previewGiphy / Tenor links auto embed ✓via homeserver proxy,
    no direct CDN contact
    ✗ ✗ @@ -1421,18 +1421,18 @@ Client comparison last reviewed ✗ - Quick emoji reactions on hover1-click react, no menu needed + Quick emoji reactions on hoverone click react, no menu needed ✓3 recent emoji in hover bar;
    dismisses emoji picker
    ✗ ✗ ✗ - ✓hover bar shows up to 4 recent reactions, 1-click + ✓hover bar shows up to 4 recent reactions, one click ✗ - ✓hover bar shows recent reactions, 1-click + ✓hover bar shows recent reactions, one click - In-app notification toastsTDS-styled, when window focused - ✓slides in bottom-right;
    4 s auto-dismiss, click to jump
    + In app notification toastsTDS styled, when window focused + ✓slides in bottom right;
    4 s auto dismiss, click to jump
    ✗ ✗ ✗ @@ -1441,8 +1441,8 @@ Client comparison last reviewed ✗ - On-device message translationread foreign messages in your language - ✓100% on-device browser AI;
    works in E2EE rooms, no cloud;
    Chromium desktop & Lotus app
    + On device message translationread foreign messages in your language + ✓100% on device browser AI;
    works in E2EE rooms, no cloud;
    Chromium desktop & Lotus app
    ✗ ~iOS only (Apple Translation) ✗ @@ -1456,7 +1456,7 @@ Client comparison last reviewed
    - Encryption architecture: Element X uses the native matrix-rust-sdk with Vodozemac. FluffyChat and Commet use matrix-dart-sdk, which also wraps Vodozemac for its crypto — all three benefit from Vodozemac's stronger security track record over the older JavaScript SDK. Cinny and Element Web/Desktop currently use matrix-js-sdk; Element is actively migrating to the Rust SDK. Clients using Vodozemac were not affected by historical js-sdk vulnerabilities. + Encryption architecture: Element X uses the native matrix-rust-sdk with Vodozemac. FluffyChat and Commet use matrix-dart-sdk, which also wraps Vodozemac for its crypto, so all three benefit from Vodozemac's stronger security track record over the older JavaScript SDK. Cinny and Element Web/Desktop currently use matrix-js-sdk; Element is actively migrating to the Rust SDK. Clients using Vodozemac were not affected by historical js-sdk vulnerabilities.
    @@ -1473,7 +1473,7 @@ Client comparison last reviewed
    Access
    -
    Invite-only
    +
    Invite only
    Max Upload
    @@ -1499,16 +1499,16 @@ Client comparison last reviewed
    No ads or tracking No data sold - E2EE — server cannot read encrypted rooms + E2EE: the server cannot read encrypted rooms
    -

    Questions or need a registration token?

    +

    Questions or need an account?

    Reach out to @jared:matrix.lotusguild.org

    diff --git a/landing/style.css b/landing/style.css index 06417ab..0db0d28 100644 --- a/landing/style.css +++ b/landing/style.css @@ -418,12 +418,12 @@ th:first-child { background: #111; } tr.section-header td { - /* section headers span full width — override sticky bg */ + /* section headers span full width: override sticky bg */ position: static; background: rgba(152,0,0,0.06); } -/* Scroll hint — visible only on mobile via JS class */ +/* Scroll hint: visible only on mobile via JS class */ .scroll-hint { display: none; font-size: 0.72rem; -- 2.47.3