Skip to content

Chat tile

The Chat tile is mission-scoped text chat. It’s a simple surface compared to the voice side — everyone in the mission sees every message, threads are flat (reply-to, not nested), and the entire history is searchable and replayable.

What you see

Each row in the chat stream shows:

  • Avatar + sender name — the sender’s asset chip with callsign if set.
  • Message text — plain text plus a truncated reply-to indicator if this message replies to another.
  • Timestamp — local time; relative labels (“just now”) for recent messages.

Consecutive messages from the same sender within 2 minutes are grouped — the avatar + name + timestamp only show on the first message; subsequent ones just indent for visual cleanliness.

Sending a message

Type in the composer at the bottom and press Enter to send. Shift+Enter inserts a newline.

  • Plain text only.
  • No markdown, no attachments, no emoji picker (use native OS emoji input).
  • No typing indicators for other participants.

Replying to a message

Click the reply arrow on any message. The composer sticks the parent message as a context bar above it. Type your reply and send — the message lands as a normal row but with a clickable truncated parent preview.

Clicking the preview scrolls the chat to the parent message.

Deleting a message

Authors can delete their own messages:

  1. Click the trash icon on your message.
  2. Confirm.
  3. The message soft-deletes (Firestore doc updates deleted: true — the row disappears from everyone’s view).

Commanders / admins cannot delete others’ messages from the chat tile UI.

Unread badge

The chat tile header shows a numeric badge when there are messages below your current scroll position. When you scroll to the bottom, the badge clears. Unread count is tracked in memory — it resets on tile unmount.

Persistence

  • Messages live in Firestore at missions/{missionId}/chat/{messageId}.
  • Reading is via a real-time listener so anyone in the mission sees new messages appear within a second of send.
  • Sent via api.sendChatMessage(); deleted via a Firestore doc update.

System messages

A system message type exists (for automated events like “mission started” or “team joined”) but the current build doesn’t surface UI for writers to produce them. System messages render with a different style if they arrive — treat this as aspirational for now.

No search / filter

The tile doesn’t have a search box. For finding old messages, use the timeline tile — it indexes chat as one of its event types and supports free-text search.

Known limitations

  • No edits. Soft-delete + repost is the only way to change.
  • No reactions / emoji responses.
  • No files / images attached to chat (use flags + attachments for media).
  • No commander-delete of others’ messages.
  • No @mentions with notifications.