Hi,
I am thinking about a feature at the moment and would like to understand if you someone would be interested. I am thinking about collaborative editing for the content editor like in Google Docs.
I am trying to understand this topic in general and found a very great library called: yjs (https://docs.yjs.dev/). The basic idea is to have data structures like maps, arrays and so on that are then synced over the wire to other users. As a developer it is very easy to implement, because you don’t need to understand the details and the library manages the complex details. It also works over web rtc as peer 2 peer so there is no server involved or any extra load on the system.
We could use this approach for the content editor and allow synchronization over all content fields. The behavior would depends on the editor and each input would be handled as a single value. So by default it 2 users change the same input field only one change would be accepted.
Fortunately there are also integrations for rich text editors such as slate: https://github.com/BitPhinix/slate-yjs/. This would allow a better user experience for editors that are built into Squidex and built on top of slate. This would mean to replace the rich text and markdown editor with a slate implementation (see https://www.slatejs.org/examples/markdown-preview for markdown).
We can also leverage yjs to reimplement to show the current users that are on a page and to improve the chat system to reduce server load.