Inspiration
In a busy chat a viewer's question scrolls away in seconds. The same question gets asked five times in five wordings, the streamer sees none of them, and the viewers who asked feel ignored. Mods help, but most channels have none at the moment it matters.
What it does
- Connects to any channel's chat with no login (Twitch's anonymous read).
- Pulls out questions (question marks, who/what/when/where/why/how openers).
- Merges near-duplicates ("what game is this", "game name?") and counts how many different viewers asked, so the board ranks by real demand, not by one spammer.
- Shows the top 5 open questions with age and sample askers. Click one, or press 1-5, to mark it answered.
?overlay=1puts the top question on stream with a transparent background, so chat sees it was heard.- State survives a reload (localStorage). One static page, no server, no build step.
How we built it with Codex
Every file was written by one Codex thread (codex exec, session below). We ran Codex with --sandbox read-only: it never wrote to disk itself. Each turn asked for whole files; Codex returned them in code fences and a small extractor (codex_build.py) saved the fenced blocks. The same session then took resume turns to polish (strip @mentions, damp repeated rants), add tests (20/20 in tests.html) and fix a bug we found on a live channel: the overlay rendered blank. Codex diagnosed and fixed it in the same thread. codex_turns.jsonl lists every prompt and what it produced.
Challenges
- Read-only sandbox: writing files had to go through Codex's reply, not its tools.
- Deduplication that merges rewordings without merging different questions: token-set (Jaccard) similarity, merging at 0.5 or above, checked by Codex-written test cases.
- The overlay must stay readable on any stream background.
What we learned
A small, well-scoped tool beats a feature list: the whole thing is one HTML page a streamer can add to OBS in a minute.
What's next
!answered <n> from mod chat (needs an OAuth token, so optional), per-channel keyword filters, and a Twitch Extension panel so viewers can upvote questions.
AI disclosure
Built by an AI-assisted workflow: OpenAI Codex wrote the code; Claude (Anthropic) drove the Codex sessions, tested on live channels and wrote this text.
Session
Codex session ID: 01a16e1b-6942-76e2-aa3e-e06cc9dccfaf - every turn is logged in codex_turns.jsonl in the repo.
Built With
- css
- html
- javascript
- obs
- openai-codex
- twitch-irc
- websocket
Log in or sign up for Devpost to join the conversation.