Skip to content

Comms (PTT) tile

The Comms tile is the tabular view of every PTT transmission in the mission. It complements the floating PTT widget (where you transmit from) and the transcription bubble (live partials) — this is where you review, replay, and transcript-search past comms.

Rows + columns

Each PTT burst is a row with these columns:

  • Sender — asset chip + display name + callsign.
  • Timestampdd MMM HH:mm:ss local time.
  • Durationm:ss or Nm Ns (e.g. “1m 30s”).
  • Transcription preview — first 60 characters of the transcription, truncated with ellipsis. A spinner replaces the text while the transcription is still in progress.
  • Actions — map-focus (pans the map to the sender’s position at transmission time), a circular-progress play button, expand chevron.

Paginated — 25 / 50 / 100 rows per page, controlled by the standard paginator at the bottom.

Click the search icon in the header to reveal a text box. The filter matches against:

  • Transcription text.
  • Sender’s name + callsign.

Filter predicate is a substring match (case-insensitive). The table re-renders instantly as you type.

Expanding a row

Click any row (or the expand chevron) to slide out a detail panel underneath. Contents:

  • Full transcription — no truncation; live-updates if still in progress.
  • Channel chips — every channel the burst was transmitted on.
  • Play bar — scrubbable audio player with duration, current time, play/pause, and jump-to-start. Click the scrub bar to seek.
  • Played-by indicator — a small list of operators who have played this recording. Stored server-side so “have I listened to this” survives browser restarts.

Playback

Click the circular-progress play button on any row, or the play control in the expanded detail. Audio streams from S3 via a short-lived presigned URL (no direct S3 access for unauthenticated users).

  • Only one row plays at a time — starting a new row stops the current.
  • The unplayed badge on a row disappears once you’ve played through to the end.

Deleting a recording

Commander-only — the delete button only renders if your role is commander or admin.

  1. Click the trash icon on the row.
  2. A confirm prompt appears with a 3-second cooldown (deliberate friction to prevent accidental deletes).
  3. Click confirm — the Firestore doc is removed and the underlying audio blob garbage-collected from S3 asynchronously.

Deletion is hard — no undo, no restore. Consider muting instead if you only want to stop seeing a burst.

Jumps to other tiles

  • Map focus — pans the map to the sender’s mapped position at the time of transmission.
  • Timeline — each PTT burst is also a comms event in the timeline; jump from there if you want the cross-event chronology.

Persistence + retention

  • Firestore: missions/{missionId}/comms/{bustId} (or similar).
  • Audio: mission S3 bucket under a comms prefix.
  • Retained per org config — typical 180 days for transcripts, 90 for audio.

Known limitations

  • No channel filter in the table header — use search for rough filtering by channel name if it’s in the transcription.
  • No bulk delete.
  • No export (CSV, transcript-only text). Planned.