Inspiration
New streamers have the hardest time getting chat involved, and Twitch's built-in Polls are only available to Affiliates and Partners. Bots can run a single poll, but nothing lets chat steer a whole sequence of decisions on stream. I wanted something any streamer could use on day one: paste one URL into OBS and let chat run the show.
What it does
Crowd Call is a live chat voting overlay with two modes.
Story Mode: the streamer loads a short story of linked decisions (a branching adventure, a tournament bracket, "chat builds my loadout"). Chat votes with !a, !b or !c, and each round's winner automatically sets up the next question. A breadcrumb trail shows the path so far, ties are broken by coin flip, a round with no votes takes a default, and the ending stays on screen with the full path chat took. It ships with a sample story, The Midnight Heist (3 rounds, 6 endings), and any streamer can write their own in a small JSON file.
Single poll: one question, up to three answers, a countdown ring and a "Chat picked" winner callout. One vote per viewer per round, and viewers can change their vote.
How I built it
Built in one OpenAI Codex session (01a19d60-5cbf-7cd2-bcc6-52a8211b4bf2) over two turns:
- The overlay (09:51 to 09:55 PT). One spec prompt. Codex asked one design question (blue/white or dark Twitch-style), wrote
crowd-call.html, the README and the MIT license, then tested its own work headless in Playwright: IRC parsing, vote changes, timer expiry, connection flow. 9 of 9 self-tests passing. - Story Mode (10:27 to 10:31 PT). A second prompt describing linked decisions, ties, no-vote defaults and vote resets. Codex built the story engine and the sample story, extended the self-tests, and ran a full story to an ending in a headless browser. 19 of 19 self-tests passing, with the single-poll mode still passing its regression checks.
It's one HTML file with no dependencies and no build step. It reads chat anonymously over Twitch's IRC WebSocket (wss://irc-ws.chat.twitch.tv), so there's no login, no OAuth token, no app registration and no server. Everything is set with URL params (?story=heist, or ?q=...&a=...&b=...), and ?demo=1 and ?selftest=1 let anyone preview and verify it offline.
Challenges
Keeping a live overlay honest under real conditions: answering Twitch's PING so the socket stays open, reconnecting without resetting votes or the deadline, resetting votes cleanly between story rounds, and deciding what happens on ties and empty rounds so the story never stalls on stream.
What I learned
Codex is strongest when the spec is concrete about behavior and edge cases. Each prompt was a paragraph of product behavior, and it came back tested and documented. It also asked the one question that actually mattered (the visual style).
What's next
Bits-weighted votes, a story editor so streamers don't have to touch JSON, and saved results so a community can replay the path it took.
Built With
- css
- html
- javascript
- obs
- openai-codex
- playwright
- twitch
- websocket