rough notes on task T223807:
- custom content model extending JSON content model. This is done so we have a structured way of relating timestamps, username, message, message ID, and metadata (reactions, mentions, etc) for each chat message. This also means we can customize the UI for editing, diffing, etc.
- use a single page for chat logs, when someone posts a message we serialize the message and its metadata and add it as a new row.
- poll for updates via querying recent changes to see if there are any updates to the configuration-defined chat page. In the help panel, we keep track of which recent changes IDs we've seen, if there are new ones then we get the new content for the chat (all of it).
- hook into the help panel for the UI of the chat.
things we could add / improve
- performance: the polling method could be much improved (db queries, and data sent over the wire).
- engaging / fun: emoji in messages, emoji responses to messages / integrate Thanks on a per message basis?
- formatting: it's all plain text now, but probably implement some basic subset of wikitext/html for bold, italic and links
- mentions / notifications, possibly through Echo, possibly through some other mechanism: @ mention with (fast) username completion. what does @ mention do, though?
- human-to-human: see who's in the chat room ("who's online"), colorize usernames, show "so-and-so is typing"
- keep track of what you last read
- inline editing of your own messages; UX to show you when someone has edited their own message
- coverage: what will users experience when they are chatting, but no one is answering? How can we tell when people are "online"? How can we give users the next best thing when no one is online (whatever that next best thing may be)? Perhaps a better use case for chat would be as an as-needed feature. In other words, perhaps instead of encouraging newcomers to go straight to chat and ask their question, we could encourage users to "jump into the chat" when they realize they are both online and want to communicate quickly. On the other hand, another benefit to open chatroom is the potential for newcomers to help each other.
questions / problems to solve
- help panel or not help panel: should the help panel be the main entry point for this chat? In some ways it makes sense, since we want the scope of the chat to be for help with editing, not talking about the weather. on the other hand, we're now cramming one more thing into a small window. perhaps there could be a tabbed interface for the help panel so links are in their own section, and search is in another, chat is in a third? or maybe chat should just be the only thing you see when you click the help panel button?
- how do non-newbies / mentors access the chat? doing so through the help panel is kind of awkward. it would be nice if there was a primary tool button and indicator for new messages, number of people with the chat window open, etc, and if that was accessible to newbies also
- plain wikitext or custom content model: maybe we don't need a custom content model?
- performance we need to auto-archive the configuration-defined chat page, max size is 2MB but we'd want it to be far less than that.
- moderation tools: we'd want to come up with a UI that makes sense for manually editing and diffing chat logs; maybe not for first cut but eventually it would be good to have. Existing moderation tools are not built to moderate blobs of JSON.
- to get people engaged with it when it's not open? we might need a different notifications tool other than Echo for @ mentions, or we need to modify Echo so it's real-time and can notify interested users about activity in the chat
- edit conflicts: how are likely are these to happen? What will we do to prevent them if they're common?
- handling moderation scenarios: how will we handle blocks and abuse filters?