docs/briefs/group-chats.md

Module brief: GroupChatsModule

Slug / tier / group / category: group-chats · advanced · features · Community One-liner: Group chats & channels, membership gated by NFC claim or audience segment. Closest references: DirectoryModule (list ↔ thread), FileDownloadModule (locked rows). Shared chat primitives throughout.

Anatomy (top → bottom)

  • ModuleShell, title default "Channels"
  • Body: channel rows — # glyph (or lock when gated), name, member count, snippet
  • Locked rows muted with a lock icon + gate label ("Tour '26 holders"); tapping does nothing
  • Tapping an open channel swaps to the thread view (MessageList + MessageInput + back)

Content model (props)

prop type sample value
channels {id, name, members, snippet?, locked?, gate?, messages?}[] #general open, #vip locked by segment
onSend (channelId, text) => void host-driven

Client-editable fields

key label type
title Module title text
header Show header toggle

States & interactions

List ↔ thread internal; locked rows inert (gate resolution is backend — ties into Audience segments per NEXT-PHASE §4). Unlock happens server-side; the module just renders state.

Out of scope

Gate evaluation, channel creation/admin, realtime.