feature proposal: marker groups
Users can create a bookmark/marker/pin group and share it with other accounts. Accessible/controllable via the main navbar.
Usage: Every user in the marker group can:
- Place a marker down on any pasuk/sentence inside any sefaria text. (imagine like how you can see everyone's cursors in a shared google doc)
- The other users of the group can jump to that location and see the marker as it updates in real time.
- Marker positions are persisted across sessions as long as the group still exists
- A user can only have one marker per group, when they select something else, the marker gets updated with the new location
- (Optional) Separately, we can store a list of markers outside of the context of groups so the user can create bookmarks and save their location but not share it with anyone
Why: This would be an amazing feature to have for anyone learning together (chavruta, chaburas etc...) over long periods of time and/or on video calls. Keeping track of progress between learning sessions or using it as a bookmark to jump back to while briefly checking a commentary or a reference would become trivial and greatly improve the ergonomics of Sefaria in my opinion.
Implementation:
- This can possibly be done with minimal impact to server performance via p2p with a lib like peerjs or something equivalent. The only limitation in this case is that each client requires a p2p connection to every other user in the group. If groups are limited to a few users though it should be ok. A server endpoint would need to be established to perform p2p handshakes.
- Another more standard option I would recommend is some form of django websocket server that broadcasts marker location messages to the group over pubsub (even mongo pubsub might work to get easy persistence)
- This feature is definitely quite achievable as it does not require any sort of conflict resolution algorithm such as operational transformation or crdts that are normally found inside of a google doc. Simple location updates will do because each user 'owns' their own marker state / that state can only be updated by that user
If this interests anyone and would actually be something that if completed would be merged into the project, I would be happy to try and implement this. Although it may take much less time to implement for someone more knowledgeable in the structure of the project.