Skip to content

Radio Screen shell + Chat Timeline Store #44

Description

@zeevenn

Parent

#39 — PRD: AI Radio — Host-driven Channel experience with chat timeline

What to build

Build the Radio Screen UI and the Chat Timeline Store. In this slice, the Host is not yet wired — use a stub Programme of local Tracks (no Interludes) to keep the screen live during development.

Chat Timeline Store (Radio context, @flow/radio or apps/mobile):

  • In-memory Zustand store (not persisted)
  • messages: ChatMessage[] — append-only ordered list
  • appendMessage(message: ChatMessage) → void
  • clearTimeline() → void
  • Write unit tests: given a sequence of appendMessage calls, assert messages contains the right items in the right order

Radio Screen (mobile app) — three vertical zones:

  • Top — Now Playing bar: Track title, artist name, play/pause button. Waveform visualiser is a placeholder ([~~~]) in this slice — filled in by a later issue (Waveform visualisation in Now Playing bar #49)
  • Middle — Chat timeline: FlashList (or FlatList) rendering ChatMessage items. now-playing messages are pushed to the timeline each time a new TrackSegment begins playing. Auto-scrolls to the latest message.
  • Bottom — Input bar: Text input field + microphone icon button (mic button is a stub — no action yet). Submitting text is a stub in this slice — wired in the Intervention issue (Interlude playback + chat timeline sync #47).

The stub Programme is just the first N tracks from queryCandidateSet with no Interludes. The goal is a navigable, scrollable screen with live now-playing cards.

Acceptance criteria

  • Chat Timeline Store exports messages, appendMessage, clearTimeline; unit tests pass
  • Radio Screen renders with the three-zone layout
  • Now Playing bar shows the current Track title and artist
  • A now-playing ChatMessage is appended and rendered in the timeline each time a new Track begins
  • Timeline auto-scrolls to the latest message
  • Text input and mic button are present in the bottom bar (stubs OK for this slice)
  • Navigating back to Channel Selection stops playback

Blocked by

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentReady for an AI agent to implement

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions