Skip to main content

Messages

Status: Proposed 2026-09-24

Direct messages are how organizers actually run things. The Trick Book's DM system (conversations, messages, typing, read receipts over a /messages socket namespace) is the shape carried over. What changed is storage: bodies are encrypted at rest and expire (ADR-0011).

Who can message whom​

  • Friends can message each other.
  • Event organizers can open a group conversation with an event's attendees ("message all"). Attendees see the organizer's handle and the event name; attendees do not see each other's handles in that conversation unless they are already friends. Implementation: a broadcast conversation type where replies go to the organizer, not the group, in v1.
  • Grove organizers can message Grove members the same way.
  • No business, organization, or unsolicited messaging. A member who is not a friend cannot start a conversation.

What ships in v1​

  • 1:1 conversations, group conversations among friends, organizer broadcast conversations.
  • Text and shared content (a Place, an Event, a post) as message types.
  • Typing indicators and read receipts over Socket.IO, with membership checked before a client joins a conversation room.
  • Retention: 90 days by default, adjustable per conversation down to 24 hours. Messages are deleted by a TTL index.
  • Report a message. Delete your own message.
  • Push notification on new message, respecting quiet hours.

Data and visibility​

conversations, messages (ciphertext, iv, keyId, expiresAt). Only participants can read. The operator holds the at-rest key in v1, disclosed on the privacy page.

API and socket​

GET /api/conversations, POST /api/conversations, GET /api/conversations/:id/messages?cursor=, POST /api/conversations/:id/messages, POST /api/conversations/:id/read. Namespace /messages: join:conversation, leave:conversation, typing:start, typing:stop; server message:new, messages:read. The session token rides in handshake.auth.token.

Screens​

Web: /app/messages, /app/messages/[id]. Mobile: the Messages tab, conversation screen, new conversation from the friends list, organizer "message attendees" from the event's organizer view.

Open questions​

  • End-to-end encryption design (v2 ADR).
  • Whether attendees in an organizer broadcast should be able to reply to the whole group. Proposal: organizer-only replies in v1, because a group of strangers seeing each other's handles is a leak.
  • Media in messages. Proposal: images only, same EXIF rule, in M3.