2a545b8b3e
- Point DECORATION_CDN at Lotus Nextcloud WebDAV share instead of external avatardecoration.com; all 99 APNG files are self-hosted and served via direct DAV URL (no CORS issue for <img> elements) - Add onError handler to AvatarDecoration.tsx to silently hide the overlay if a file is missing or the CDN is unreachable - Rewrite scripts/syncDecorations.mjs: now sends HTTP HEAD requests to the live Nextcloud CDN (batches of 16 in parallel) and removes catalog entries for files that return non-2xx; empty categories are pruned automatically. Workflow: delete files from Nextcloud → run `npm run sync:decorations` → commit the updated avatarDecorations.ts. No local files needed. - Add public/decorations/ to .gitignore; delete the 85 MB local APNG cache that was downloaded during development (files live on Nextcloud now) - Add sync:decorations script to package.json - Update LOTUS_FEATURES.md, LOTUS_TODO.md (P5-13 + P5-14 ✓), README.md with avatar decoration documentation and catalog sync workflow Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
164 lines
8.3 KiB
Markdown
164 lines
8.3 KiB
Markdown
# Lotus Chat
|
||
|
||
A Matrix chat client built for Lotus Guild — fast, private, and packed with the features you actually want.
|
||
|
||
**Deployed at [chat.lotusguild.org](https://chat.lotusguild.org)** | Forked from [Cinny](https://github.com/cinnyapp/cinny) v4.12.1
|
||
|
||
---
|
||
|
||
## Licensing & Attribution
|
||
|
||
The source code is licensed under [AGPLv3](LICENSE), the same license as the upstream Cinny project. The source for this fork is public at [code.lotusguild.org/LotusGuild/cinny](https://code.lotusguild.org/LotusGuild/cinny).
|
||
|
||
The Lotus Chat logo (`lotus_chat.png`) is a derivative work based on the original Cinny logo by Ajay Bura and contributors, used under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). The modified logo is © Lotus Guild and is also made available under CC BY 4.0.
|
||
|
||
---
|
||
|
||
## Features
|
||
|
||
### Messaging
|
||
|
||
- See who has read each message, and track delivery status (sending / sent / failed)
|
||
- Bookmark any message and revisit saved messages from the sidebar
|
||
- Schedule messages to send at a specific time
|
||
- Click "edited" on any message to see the full edit history
|
||
- Drafts are saved automatically and survive page reloads
|
||
- Long messages collapse automatically — click "Read more" to expand
|
||
- Forward messages to other rooms
|
||
- Create and view polls directly in chat
|
||
- Share your location with an inline map embed
|
||
- Add captions to image and video uploads
|
||
- Optionally compress images before uploading — shows before/after file sizes
|
||
- GIF links from Giphy and Tenor auto-preview inline
|
||
- Search for and send GIFs from a built-in GIF picker
|
||
- Control voice message playback speed: 0.75× / 1× / 1.5× / 2×
|
||
- Search messages with a date range filter
|
||
- Room topics support rich formatting (bold, links, italics)
|
||
- Deleted messages show a placeholder instead of disappearing
|
||
- Code blocks highlight syntax for JS/TS, Python, and Rust
|
||
- Rich link preview cards for YouTube, GitHub, Twitter/X, Reddit, Spotify, Twitch, Steam, Wikipedia, Discord, npm, Stack Overflow, and IMDb
|
||
|
||
### Calls & Voice
|
||
|
||
- Push to Talk with a configurable keybind (default: Space)
|
||
- Push to Deafen with the M key
|
||
- Camera starts turned off by default when joining a call
|
||
- Screenshare requires confirmation before going live
|
||
- Toggle noise suppression on or off
|
||
- Calls float in a draggable picture-in-picture window when you navigate away
|
||
- Your chat background shows through the call view
|
||
- Dark/light mode inside calls matches your Lotus Chat theme
|
||
- Calls are available in DMs and private groups only — no accidental mass rings
|
||
- AFK auto-mute: mic is automatically silenced after a configurable idle timeout (1–30 min); a toast confirms the action
|
||
- Voice channel user limit: admins can cap how many people can be in a room's call — enforced server-side for every Matrix client (not just Lotus Chat); others see "Channel Full" until a spot opens
|
||
- Custom join/leave sound effects when someone enters or leaves your call — choose Chime, Soft, Retro, or off
|
||
|
||
### Customization & Appearance
|
||
|
||
- LotusGuild Terminal Design System (TDS) — a CRT terminal-inspired dark theme
|
||
- TDS light mode variant for daytime use
|
||
- 20+ static chat background patterns
|
||
- 5 animated chat backgrounds: Digital Rain, Star Drift, Grid Pulse, Aurora Flow, Fireflies (with improved per-layer looping, phosphor-flicker rain, fluid aurora sweep, and organic firefly bioluminescence)
|
||
- 11 seasonal & holiday theme overlays — Halloween, Christmas, New Year, Autumn, Valentine's Day, St. Patrick's Day, Earth Day, Lunar New Year, April Fools', Deep Space, and Retro Arcade; auto-selected by date with a manual override in Settings → Appearance
|
||
- Avatar decorations — 99 animated APNG overlays (Gaming, Cyber, Space, Fantasy, Nature, Spooky, Cozy, and more) that frame your avatar across the timeline, members list, and @mention autocomplete; visible to all Lotus Chat users; select in Settings → Account → Avatar Decoration
|
||
- Toggle to pause background animations
|
||
- Glassmorphism sidebar — frosted glass effect that lets the background show through
|
||
- Night Light / blue light filter with an adjustable intensity slider
|
||
- Emoji prefixes on room names render larger in the sidebar (e.g. 🎮 general)
|
||
- Rename any room for yourself only — other members see the original name
|
||
- Emoji picker on all room name inputs
|
||
|
||
### Presence & Profile
|
||
|
||
- Discord-style presence selector: Online, Idle, Do Not Disturb, Invisible, or Auto
|
||
- Custom status message with emoji and an optional auto-clear timer (changing your status is never silently overwritten by activity events)
|
||
- Colored presence ring on member avatars (green / yellow / red)
|
||
- Profile fields for pronouns and timezone
|
||
- When a user's timezone is set, their current local time appears in their profile
|
||
- Private notes on any user's profile — freeform text visible only to you, auto-saves and syncs across devices
|
||
- Unread count shown in the browser tab title
|
||
|
||
### Moderation & Privacy
|
||
|
||
- Report any room to homeserver admins from the room menu
|
||
- View policy lists and ban lists (Draupnir-compatible, read-only)
|
||
- Toggle private read receipts so others can't see when you've read messages
|
||
- Optional warning when an encrypted room contains unverified devices
|
||
- Full push rule editor in notification settings
|
||
- View and edit Server ACL rules in room settings
|
||
- Filterable room activity / mod log (joins, kicks, bans, power level changes, etc.)
|
||
- Room stats and insights panel (active members, top reactions, media breakdown, activity heatmap)
|
||
- Export room history as plain text, JSON, or HTML with optional date range filter
|
||
|
||
### Notifications
|
||
|
||
- In-app toast notifications appear bottom-right when the window is focused
|
||
- Custom notification sounds per category (messages, invites)
|
||
- Quiet hours — suppress notifications during a configured time window
|
||
- Click a toast to jump directly to the room or DM
|
||
|
||
### UX
|
||
|
||
- Filter and search rooms in the sidebar
|
||
- Favorite rooms sync across devices and appear in a pinned section
|
||
- Sort rooms by recent activity, alphabetical, or unread first
|
||
- DM rows show a message preview and relative timestamp
|
||
- Right-click a room for a context menu: mute with duration, copy link, mark as read
|
||
- Quick emoji reactions appear on message hover — one click to react
|
||
- Knock-to-join: request access to a room; admins approve or deny from the members list
|
||
- Media gallery drawer: browse all images, videos, and files shared in a room
|
||
- Invite link and QR code in room settings
|
||
- Pending knock requests shown in the members list for room admins with a live badge count on the Members button
|
||
- Homeserver support contact displayed in Help & About (MSC1929)
|
||
- Server notice rooms are visually distinct from regular DMs
|
||
|
||
---
|
||
|
||
## Desktop App
|
||
|
||
Lotus Chat has a desktop app for Windows, macOS, and Linux. It wraps the same web client in a native window with automatic background updates — no need to reinstall for new versions.
|
||
|
||
### Download
|
||
|
||
Download the latest release from the [Releases page on code.lotusguild.org](https://code.lotusguild.org).
|
||
|
||
### SmartScreen Warning (Windows)
|
||
|
||
When you first run the installer on Windows, you may see a popup that says **"Windows protected your PC"** with the app listed as an unknown publisher. This is normal.
|
||
|
||
**Why it happens:** Windows SmartScreen flags any app that does not have an expensive commercial code-signing certificate from a major CA. Lotus Chat is signed with its own key for update verification, but that key is not in Microsoft's pre-approved list.
|
||
|
||
**How to install anyway:**
|
||
|
||
1. Click **"More info"** in the SmartScreen dialog.
|
||
2. A **"Run anyway"** button will appear.
|
||
3. Click it to proceed with installation.
|
||
|
||
After the first install, automatic in-app updates handle all future versions — you will not see this prompt again for updates.
|
||
|
||
---
|
||
|
||
## For Developers
|
||
|
||
The source code lives in `/root/code/cinny`. All changes should be made on the `lotus` branch. Push to `origin/lotus` and CI will automatically build and deploy to [chat.lotusguild.org](https://chat.lotusguild.org) in approximately 11 minutes — no manual build or deploy steps required.
|
||
|
||
See [LOTUS_FEATURES.md](LOTUS_FEATURES.md) for the full feature changelog and [LOTUS_TODO.md](LOTUS_TODO.md) for the work backlog.
|
||
|
||
### Build
|
||
|
||
```bash
|
||
npm ci && npm run build # outputs to dist/
|
||
```
|
||
|
||
If the build is killed due to out-of-memory:
|
||
|
||
```bash
|
||
NODE_OPTIONS=--max_old_space_size=6144 npm run build
|
||
```
|
||
|
||
### CI/CD
|
||
|
||
```
|
||
edit → commit → git push → ~11 min → live at chat.lotusguild.org
|
||
```
|