feat: NIP-53 full compliance - render all live activity kinds

- Add case-insensitive role matching in ParticipantTag (accepts both
  "host" and "Host" from other clients per NIP-53 spec)
- Add PARTICIPANT role to ROLE enum per NIP-53 spec
- Add MeetingSpaceEvent (30312), MeetingRoomEvent (30313), and
  MeetingRoomPresenceEvent (10312) consumption in LocalCache
- Create rendering composables for MeetingSpaceEvent and MeetingRoomEvent
  with status flags (OPEN/PRIVATE/CLOSED for spaces, LIVE/PLANNED/ENDED
  for rooms) and participant display
- Add meeting kinds to all discovery feed relay filters (global, authors,
  hashtag, geohash, community)
- Add meeting kinds to ChannelCardCompose and LiveActivityCard thumb
  rendering
- Add meeting kinds to KindRegistry search aliases

https://claude.ai/code/session_01CJ6xfY9gRA1c5r4T1SrUuv
This commit is contained in:
Claude
2026-04-02 03:42:31 +00:00
parent 0f7bcdba38
commit a524890a36
15 changed files with 492 additions and 39 deletions
@@ -26,6 +26,8 @@ import com.vitorpamplona.quartz.nip18Reposts.RepostEvent
import com.vitorpamplona.quartz.nip23LongContent.LongTextNoteEvent
import com.vitorpamplona.quartz.nip28PublicChat.admin.ChannelCreateEvent
import com.vitorpamplona.quartz.nip28PublicChat.admin.ChannelMetadataEvent
import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.MeetingRoomEvent
import com.vitorpamplona.quartz.nip53LiveActivities.meetingSpaces.MeetingSpaceEvent
import com.vitorpamplona.quartz.nip53LiveActivities.streaming.LiveActivitiesEvent
import com.vitorpamplona.quartz.nip54Wiki.WikiNoteEvent
import com.vitorpamplona.quartz.nip72ModCommunities.definition.CommunityDefinitionEvent
@@ -56,7 +58,7 @@ object KindRegistry {
"repost" to listOf(RepostEvent.KIND),
"profile" to listOf(MetadataEvent.KIND),
"channel" to listOf(ChannelCreateEvent.KIND, ChannelMetadataEvent.KIND),
"live" to listOf(LiveActivitiesEvent.KIND),
"live" to listOf(LiveActivitiesEvent.KIND, MeetingSpaceEvent.KIND, MeetingRoomEvent.KIND),
"community" to listOf(CommunityDefinitionEvent.KIND),
"wiki" to listOf(WikiNoteEvent.KIND),
"classified" to listOf(ClassifiedsEvent.KIND),