# Lotus Chat — Master Feature TODO **Location:** `/root/code/cinny/LOTUS_TODO.md` **Repo:** `lotus` branch at `https://code.lotusguild.org/LotusGuild/cinny` **Deploy:** push to `lotus` → CI → auto-deploy to `chat.lotusguild.org` (~11 min) This file is the single source of truth for all planned, in-progress, and backlog features. Update it as features are completed or reprioritized. --- ## ⚠️ TDS DESIGN LAW — READ BEFORE TOUCHING ANY UI > **ALL Lotus Terminal Design System (TDS) styling — colors, animations, glows, borders, fonts, spacing — MUST come exclusively from `/root/code/web_template/base.css` CSS variables.** > Do NOT hardcode hex values. Do NOT invent new variable names. Do NOT deviate from the design tokens defined in that file. > The canonical variable reference: `--lt-accent-orange`, `--lt-accent-cyan`, `--lt-accent-green`, `--lt-glow-orange`, `--lt-box-glow-*`, `--lt-border-color`, etc. > Reference implementation for code patterns: `/root/code/tinker_tickets/` (markdown.js, base.js, ticket.css) > This rule applies to EVERY task in this file without exception. --- Legend: - `[AUDIT REQUIRED]` — at least one assumption needs code/server verification before implementing - `[SERVER CHECK]` — depends on a Synapse feature or MSC; verify on `matrix.lotusguild.org` - `[LOW PRIORITY]` — implement after all higher-priority items - `[EXTREME COMPLEXITY]` — multi-sprint, plan separately before touching - `[BLOCKED]` — cannot build until a server upgrade, upstream MSC, or dependency resolves - `[IMPROVE]` — feature exists in upstream Cinny; this task enhances it for Lotus Chat Status: `[ ]` pending · `[~]` in progress · `[x]` completed --- ## AUDIT RESULTS — completed June 2026 ### Server Status - **Synapse version:** `1.153.0` (released 2026-05-19) — **FULLY UP TO DATE**, no upgrade needed - **Matrix spec reported:** up to `v1.12` formally, but newer MSC features available via `unstable_features` - **MSC feature flags confirmed ON:** `msc4140` (delayed messages) · `msc3771` (thread receipts) · `msc3440.stable` (threading) · `msc4133.stable` (extended profiles) · `simplified_msc3575` (sliding sync) - **MSC feature flags confirmed OFF:** `msc4306` (thread subscriptions — BLOCKED) · `msc3882` · `msc3912` · `msc4155` - **MSC3266** (room summary, v1.15): endpoint returned 404 — NOT available on this server - **MSC3765** (rich room topics, v1.15): NOT available as stable, but client-side rendering is still worth doing - **MSC3892** (relation redaction): not listed in flags — NOT supported, feature BLOCKED - **MSC4260** (report user, v1.14): server at v1.12 formally — NOT available as spec endpoint; **however** report user already exists upstream in Cinny (message reporting via `reportEvent`) - **MSC4151** (report room, v1.12): merged at exactly v1.12 — should be available ✅ ### Upstream Cinny Features Confirmed (exist in upstream — only improve, don't re-implement) | Feature | Location in upstream | Lotus improvement task | |---|---|---| | "Jump to Latest" button | `RoomTimeline.tsx:2180-2192` | #104 — add unread count + animation | | Mark rooms as read (per section) | `Home.tsx:73-102`, `DirectTab.tsx:29-61` | None needed | | Room upgrade / tombstone banner | `RoomTombstone.tsx`, `RoomUpgrade.tsx` | None needed | | Visual speaking indicator | `useCallSpeakers.ts:8-60`, `MemberSpeaking.tsx:1-78` | #107 — TDS animated ring | | Image + video spoilers (blur/reveal) | `ImageContent.tsx`, `VideoContent.tsx` | #105 — smooth CSS transition | | Report message per event | `Message.tsx:588-709` — `mx.reportEvent()` | #106 — add category selector | | Drag-and-drop file upload | `useFileDrop.ts` — works but overlay bug | #73 — fix overlay dismiss | | Typing indicator (animated dots) | `TypingIndicator.tsx`, `TypingIndicator.css.ts` | #108 — TDS orange dots | | Pinned messages count badge | Confirmed in upstream header icon | None needed | ### Upstream Cinny Features Confirmed MISSING (we should build these) Quick Switcher, Sidebar filter, Favorite rooms, Invite link generator, Edit history modal, Export history, Room preview before joining, Suggested rooms display, Server notices styling, DM last-message preview, Media gallery, Knock-to-join full UX ### Code Architecture Facts (relevant to implementation) | Finding | Impact | |---|---| | `folds AvatarImage` does NOT accept children | Avatar overlays/frames must wrap the Avatar component externally, not nest inside it | | Sidebar `SidebarItem` has `translateX` on hover | CSS `backdrop-filter` won't work on sidebar items directly — apply to parent wrapper instead | | Element Call bridge has NO join/leave participant events | Join/leave sounds (#89) must use `m.call.member` Matrix room state events instead | | Element Call bridge has NO audio level events | Speaking indicator uses CSS polling of EC iframe DOM — no direct event bridge | | No in-app toast system exists anywhere | Toast redesign (#80) must build a full `ToastProvider` + queue system from scratch | | Voice message player: `AudioContent.tsx:44-223` | Speed control (#8): add `playbackRate` on the hidden `