# 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. Legend: - `[AUDIT REQUIRED]` — at least one assumption in the description needs code/server verification before implementing - `[UPSTREAM CHECK]` — may already be in upstream Cinny mainline; confirm before building - `[SERVER CHECK]` — depends on a Synapse feature or MSC that may not be enabled on `matrix.lotusguild.org` - `[LOW PRIORITY]` — agreed to add but deprioritized; implement after everything else - `[EXTREME COMPLEXITY]` — multi-sprint, architectural; plan separately before touching - `[BLOCKED]` — cannot implement until a dependency (server upgrade, upstream MSC, other task) is resolved 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 (do NOT add to our codebase) | Feature | Location in upstream | |---|---| | "Jump to Latest" / Back to bottom button | `RoomTimeline.tsx:2180-2192` | | Mark rooms as read (per section) | `Home.tsx:73-102`, `DirectTab.tsx:29-61` | | Room upgrade / tombstone banner | `RoomTombstone.tsx`, `RoomUpgrade.tsx` | | Visual speaking indicator | `useCallSpeakers.ts:8-60`, `MemberSpeaking.tsx:1-78` | | Image + video spoilers (blur/reveal) | `ImageContent.tsx`, `VideoContent.tsx` — CSS blur(44px), click to reveal | | Report message (per event) | `Message.tsx:588-709` — `mx.reportEvent()` | | Drag-and-drop file upload | `useFileDrop.ts` — works but has overlay dismiss bug | ### 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 `