A shared moment, chosen by chat

Scene Relay gives Twitch viewers a small, visible way to influence a stream: vote for the atmosphere, watch the result, and see the winning world fill the screen.

The entrant expressly chose the direction: chat voting that changes the on-screen scene, with simple controls and a readable result. That became the product’s focus. One host opens a round, viewers choose between three worlds, and everyone can understand what happened without learning a complicated control panel.

What it does

The voting desk pairs a countdown and clear result bars with three original illustrated worlds: Aurora, Coral Cove and Ember Grove. Viewers type !scene1, !scene2 or !scene3 in Twitch chat. Each viewer has one vote. A later valid command replaces their earlier choice instead of increasing the voter total.

A host can set a round from 10 to 300 seconds, then let it expire or close it manually. A unique winner selects the scene. A tie keeps the current world and explains why; a round without votes does the same. The result is predictable rather than an unexplained random transition.

The scenes are procedural Canvas artwork, with a full-screen view, an animation pause and reduced-motion support. A separate, visibly labelled practice mode lets a host learn the controls using simulated viewers without posting anything to Twitch.

How Codex helped build it

The entrant chose the interaction and priorities. OpenAI Codex designed and implemented the application: the interface, CSS, original Canvas scenes, voting engine, Twitch integration, documentation and automated tests. A second Codex agent independently reviewed the logic and security helpers and exercised the transport with controlled WebSocket, fetch and timer stubs. This was substantial agent implementation, rather than a claim that the entrant hand-wrote the code.

Keeping the vote engine separate from Twitch made important decisions testable. Duplicate delivery must not count twice. Changing a vote must not create a new voter. A message received after the deadline must not alter a closed result.

The app is static HTML, CSS and JavaScript with no runtime package dependencies or application backend. Its real connection uses Twitch OAuth and EventSub WebSocket with only user:read:chat. It reads the authenticated broadcaster’s own channel; it cannot send messages, moderate chat or change Twitch settings. Access tokens stay in page memory, and the app does not save or export chat history.

What we verified

All 39 automated tests pass, covering voting, parsing, timing, deduplication, OAuth checks and connection lifecycle behaviour. The independent transport review caught a reconnect handover that could leave a socket open. Tracking every socket and closing pending handovers fixed that failure.

A separate real Twitch check used two actual commands from the same account: first !scene1, then !scene2. The vote moved while the total remained one viewer. At the reveal, Coral Cove won and appeared on screen. That checks the real path from Twitch chat to the visible result, separately from practice mode and stubs.

The live check is deliberately narrow: one account, not a large-audience benchmark. Scene Relay changes its own illustrated screen, not an OBS scene collection. Practice remains explicitly simulated, and connection interruption cancels an open round rather than presenting an incomplete tally as a winner.

What comes next

The next useful extension is host-selected scene sets while preserving the same small control surface. The principle stays simple: one readable choice, one honest result, and a shared screen that reflects it.

Try Scene Relay · Source repository

Built With

Share this project:

Updates

Submission history