...
The UI components can be completely custom-built or embed the UI of the underlying tools (like discourse) if it is feasible, configurable (themes, actions, etc) and extensible.
Plugin Lifecycle
An important design problem for plugins is the life cycle of a plugin and the events/actions at each stage in the life cycle. We need to identify these stages and design the plugin implementation. Here are some of the life cycle events for discussions plugin (not final, just as inputs for the design):
Init: when the plugin is added to a group: At this stage, plugin may need to create required entities in discussions service (like forum, groups, users, etc) and store those details as part of the plugin configuration.
Start: when the plugin is launched within a group: Plugin uses the config to fetch the relevant data from discussions service and render the UI components.
Stop: when the plugin is closed: Do any required clean up activities.
Update: when the plugin config is updated: update the related data in discussions service.
Destroy: when the group is closed or plugin is removed: clean up/archive the related data in discussions service.