docs: note planned Element Call fork (Lotus Call)
Tag the EC embed row and add a callout explaining the plan to fork element-hq/element-call and self-build it for true ownership (decorations, focus/screenshare, reconnect mic, theming, call-audio injection — all unfixable against the prebuilt @element-hq/element-call-embedded bundle). Infra notes: EC uses our LiveKit SFU (livekit/, LXC 151) + lk-jwt-service; a new build/deploy pipeline will be needed. Full plan: LotusGuild/cinny → HANDOFF_ELEMENT_CALL_FORK.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -50,7 +50,7 @@ matrix/
|
|||||||
|
|
||||||
| Service | IP | LXC | RAM | Disk | Versions |
|
| Service | IP | LXC | RAM | Disk | Versions |
|
||||||
|---------|----|-----|-----|------|----------|
|
|---------|----|-----|-----|------|----------|
|
||||||
| Synapse | 10.10.10.29 | 151 | 8GB | 50GB | Synapse 1.149.0, LiveKit 1.9.11, hookshot 7.3.2, coturn latest |
|
| Synapse | 10.10.10.29 | 151 | 8GB | 50GB | Synapse 1.155.0, LiveKit 1.9.11, hookshot 7.3.2, coturn latest |
|
||||||
| PostgreSQL 17 | 10.10.10.44 | 109 | 6GB | 30GB | PostgreSQL 17.9 |
|
| PostgreSQL 17 | 10.10.10.44 | 109 | 6GB | 30GB | PostgreSQL 17.9 |
|
||||||
| Cinny Web | 10.10.10.6 | 106 | 2GB | 8GB | Debian 12, nginx, Node 24, Lotus Cinny fork (custom, tracks `cinnyapp/cinny` main) |
|
| Cinny Web | 10.10.10.6 | 106 | 2GB | 8GB | Debian 12, nginx, Node 24, Lotus Cinny fork (custom, tracks `cinnyapp/cinny` main) |
|
||||||
| Draupnir | 10.10.10.24 | 110 | 1GB | 10GB | Draupnir v2.9.0, Node.js v22 |
|
| Draupnir | 10.10.10.24 | 110 | 1GB | 10GB | Draupnir v2.9.0, Node.js v22 |
|
||||||
@@ -454,13 +454,35 @@ chmod 600 /etc/cinny-monitor.env
|
|||||||
|
|
||||||
**Why 8GB RAM:** Vite's build process needs ~6GB Node heap (`--max_old_space_size=6144`) for the rendering-chunks phase. Previously at 4GB — OOM killed during render.
|
**Why 8GB RAM:** Vite's build process needs ~6GB Node heap (`--max_old_space_size=6144`) for the rendering-chunks phase. Previously at 4GB — OOM killed during render.
|
||||||
|
|
||||||
|
### 🔱 Planned: Element Call fork — "Lotus Call" (true ownership)
|
||||||
|
|
||||||
|
We currently embed Element Call as a **pre-built npm bundle**
|
||||||
|
(`@element-hq/element-call-embedded` 0.20.1, copied to cinny `public/element-call/`).
|
||||||
|
We can steer it (widget API + same-origin DOM hacks) but **cannot change its
|
||||||
|
compiled logic** — so several in-call issues (avatar decorations on tiles, camera
|
||||||
|
focus/fullscreen during screenshare, mic-after-reconnect, native theming, real
|
||||||
|
call-audio injection for a soundboard) are unfixable from outside.
|
||||||
|
|
||||||
|
**Plan: fork `element-hq/element-call` → a new `LotusGuild/element-call` repo,
|
||||||
|
build it from source, host our build, and replace the npm bundle.** This is AGPL
|
||||||
|
(same license, compatible). Infra implications for THIS repo:
|
||||||
|
- EC talks to our **LiveKit SFU** (`livekit/`, LXC 151) + `lk-jwt-service` — the
|
||||||
|
fork's runtime `config.json` must point at `matrix.lotusguild.org` + our
|
||||||
|
LiveKit. The current cinny EC `config.json` lives in `cinny/config.json` here.
|
||||||
|
- A new build/deploy pipeline for the EC fork will be needed (likely its own LXC
|
||||||
|
or CI artifact), analogous to the cinny build on LXC 106.
|
||||||
|
|
||||||
|
**Full handoff & step-by-step plan:** `LotusGuild/cinny` →
|
||||||
|
[`HANDOFF_ELEMENT_CALL_FORK.md`](https://code.lotusguild.org/LotusGuild/cinny/src/branch/lotus/HANDOFF_ELEMENT_CALL_FORK.md).
|
||||||
|
Start a fresh session with that doc.
|
||||||
|
|
||||||
### Custom Features
|
### Custom Features
|
||||||
|
|
||||||
All custom code lives in `src/app/` on the `lotus` branch of `code.lotusguild.org/LotusGuild/cinny`. Changes survive upstream merges as long as they don't conflict with the same files upstream touched.
|
All custom code lives in `src/app/` on the `lotus` branch of `code.lotusguild.org/LotusGuild/cinny`. Changes survive upstream merges as long as they don't conflict with the same files upstream touched.
|
||||||
|
|
||||||
| Feature | Files | Notes |
|
| Feature | Files | Notes |
|
||||||
|---------|-------|-------|
|
|---------|-------|-------|
|
||||||
| **Element Call embed** | `src/app/plugins/call/`, `src/app/hooks/useCallEmbed.ts`, `src/app/components/CallEmbedProvider.tsx` | EC 0.20.1 (`@element-hq/element-call-embedded`), dist copied to `public/element-call/` by vite |
|
| **Element Call embed** | `src/app/plugins/call/`, `src/app/hooks/useCallEmbed.ts`, `src/app/components/CallEmbedProvider.tsx` | EC 0.20.1 (`@element-hq/element-call-embedded`), **prebuilt** dist copied to `public/element-call/` by vite. Same-origin (`allow-same-origin`), controlled via `matrix-widget-api` + DOM-poking. 🔱 **[EC-FORK]** planned — see `LotusGuild/cinny` → `HANDOFF_ELEMENT_CALL_FORK.md` |
|
||||||
| **DM calls** | `src/app/features/room/Room.tsx`, `src/app/features/room/RoomViewHeader.tsx` | Phone button in DM room header; `useCallStart(true)` passes `intent: StartedByUser`; Room.tsx switches to CallView layout when DM has active call |
|
| **DM calls** | `src/app/features/room/Room.tsx`, `src/app/features/room/RoomViewHeader.tsx` | Phone button in DM room header; `useCallStart(true)` passes `intent: StartedByUser`; Room.tsx switches to CallView layout when DM has active call |
|
||||||
| **Picture-in-picture call** | `src/app/components/CallEmbedProvider.tsx` | When navigating away from the call room, the embed shrinks to a 280×158px PiP in the bottom-right. Click navigates back. Implemented via `useEffect` imperatively overriding styles on `callEmbedRef.current` — cannot use a wrapper div because `useCallEmbedPlacementSync` writes `top/left/width/height` directly onto that element |
|
| **Picture-in-picture call** | `src/app/components/CallEmbedProvider.tsx` | When navigating away from the call room, the embed shrinks to a 280×158px PiP in the bottom-right. Click navigates back. Implemented via `useEffect` imperatively overriding styles on `callEmbedRef.current` — cannot use a wrapper div because `useCallEmbedPlacementSync` writes `top/left/width/height` directly onto that element |
|
||||||
| **Screenshare fullscreen** | `src/app/features/call/CallControls.tsx`, `src/app/features/call/Controls.tsx` | When screensharing, a fullscreen button appears in call controls. Calls `callEmbedRef.current?.requestFullscreen()` on the Cinny call container. EC naturally spotlights the screenshare — the old 600ms grid-revert code was removed (it caused fullscreen to show avatars instead of the screen) |
|
| **Screenshare fullscreen** | `src/app/features/call/CallControls.tsx`, `src/app/features/call/Controls.tsx` | When screensharing, a fullscreen button appears in call controls. Calls `callEmbedRef.current?.requestFullscreen()` on the Cinny call container. EC naturally spotlights the screenshare — the old 600ms grid-revert code was removed (it caused fullscreen to show avatars instead of the screen) |
|
||||||
@@ -521,8 +543,12 @@ Periodic `TLS/TCP socket error: Connection reset by peer` in coturn logs. Normal
|
|||||||
|
|
||||||
## Server Checklist
|
## Server Checklist
|
||||||
|
|
||||||
|
## Server Checklist
|
||||||
|
|
||||||
### Quality of Life
|
### Quality of Life
|
||||||
|
- [x] **Upgrade Synapse to v1.155.0** — Done 2026-06-18. LXC 151 was already on Debian 13 Trixie; no OS migration needed.
|
||||||
- [x] Migrate from SQLite to PostgreSQL
|
- [x] Migrate from SQLite to PostgreSQL
|
||||||
|
|
||||||
- [x] TURN/STUN server (coturn) for reliable voice/video
|
- [x] TURN/STUN server (coturn) for reliable voice/video
|
||||||
- [x] URL previews
|
- [x] URL previews
|
||||||
- [x] Upload size limit 200MB
|
- [x] Upload size limit 200MB
|
||||||
@@ -734,7 +760,7 @@ All commands use the `!` prefix. Run `!help` in any room for the full list.
|
|||||||
|
|
||||||
| Component | Technology | Version |
|
| Component | Technology | Version |
|
||||||
|-----------|-----------|---------|
|
|-----------|-----------|---------|
|
||||||
| Homeserver | Synapse | 1.149.0 |
|
| Homeserver | Synapse | 1.155.0 |
|
||||||
| Database | PostgreSQL | 17.9 |
|
| Database | PostgreSQL | 17.9 |
|
||||||
| TURN | coturn | latest |
|
| TURN | coturn | latest |
|
||||||
| Video/voice calls | LiveKit SFU | 1.9.11 |
|
| Video/voice calls | LiveKit SFU | 1.9.11 |
|
||||||
|
|||||||
Reference in New Issue
Block a user