Inspiration
Twitch Predictions are made by the streamer. But chat is always calling it first: "he's gonna miss that," "no way that chest is legendary." We wanted every viewer to be able to put their call on screen, and get the credit when they're right.
What it does
Called It is a Twitch chatbot plus a transparent OBS overlay where viewers make the predictions.
!call <prediction> in <N>mputs a card on stream with a countdown (5 slots, one live call per viewer)!back <ID>/!doubt <ID>let others pick a side, and they can switch before the deadline- Mods settle calls with
!yes <ID>/!no <ID>, or with one click on the streamer dashboard - CALLED IT and BUSTED animations with sound make every result a moment
- A Streamer vs Chat tug-of-war bar tracks who's right more often
- Three correct calls in a row earns a 🔥 streak badge
!oracleposts the top 5 callers, and the overlay shows the leaderboard when the board is empty
How we built it
- Twitch EventSub WebSocket (
channel.chat.message) to read chat live - Twitch Send Chat Message API for bot replies
- Node.js, Express and ws in a single process, with no build step, database or cloud account
- WebSocket updates to a 1920×1080 transparent OBS browser source
- State saved to a JSON file, so it survives restarts
npm run demosimulates viewers for offline testingnpm testcovers slot limits, one call per viewer, vote switching, self-vote rejection, mod-only rulings, scoring, expiry, the leaderboard and persistence
How we used Codex
We built Called It in one Codex thread. Codex set up Twitch auth and EventSub from a single spec, built the server, overlay and dashboard, then added the Streamer vs Chat bar, streaks and animations. It also wrote the test suite and demo simulator, so we could iterate without going live. [Add 1 specific thing Codex fixed or improved.]
Challenges we ran into
Keeping countdowns, votes and the battle bar in sync across chat, the overlay and the dashboard, and handling edge cases like self-votes, double rulings and expired calls.
Accomplishments that we're proud of
A complete loop from a chat command to an on-screen moment, with tests behind the rules, built in an afternoon.
What we learned
How EventSub and the Chat API fit together, and that the best stream tools create moments, not just data.
What's next for Called It
- Channel Points wagers on calls
- Auto-resolving calls from game data APIs
- A Twitch Extension so viewers can tap to back or doubt
Built With
- codex
- css
- eventsub
- express.js
- html
- javascript
- node.js
- obs
- openai
- twitch
- ws