Inspiration
Twitch overlays are usually frozen: a streamer installs a few widgets once and they never change. Chat wants to ship features — rubber ducks that quack on LUL, raid confetti, hype pills — but today that means filing a request and waiting for a developer.
OpenAI Codex can write small, scoped UI in under a minute. We asked: what if Codex itself is the game mechanic? Not a chatbot bolted onto Twitch, but a live “chat ships it” loop where viewers spend channel points, mods approve with !ship, and the whole channel watches Codex plan, diff, test, and hot-load a widget onto the OBS overlay — credited to the viewer who asked.
That’s the booth moment: judges don’t just hear that we used Codex; they watch Codex ship on stream.
What it does
Chat Ships It is a Twitch-connected overlay + dashboard + interactive demo:
- A viewer redeems a Ship a Feature channel-point reward with a one-line request (e.g. “rubber duck that quacks on LUL”).
- The request lands in a mod queue. A streamer/mod approves with
!ship(or the dashboard Approve button). - The OBS overlay shows a live “Codex is building…” panel: plan steps, streaming diff lines, and a test pass/fail light.
- ~60–90s later the widget hot-loads into a sandboxed iframe (
sandbox="allow-scripts", CSP blocks network) and reacts to chat/cheers/raids via a strict widget API (onChat/onCheer/onRaid). - A patch-notes ticker credits the viewer: Feature by @Morgan. Chat can
!revertor!remix.
Live now (DEMO_MODE): https://chat-ships-it.vercel.app/demo — full interactive loop with mock Twitch auth (honest: no Twitch Client ID was available on the build machine). Production EventSub/Helix path is documented in docs/WORKER.md. Optional OPENAI_API_KEY enables live /api/build generation; without it, curated templates still play the full Codex UX so streams never stall on quota.
How we built it
- Next.js 15 App Router + React 19 + Tailwind 4 on Vercel
/landing ·/demointeractive stream ·/dashboardmod queue ·/overlay/[channel]OBS browser source/api/auth/*Twitch OAuth (mock in DEMO_MODE) ·/api/buildoptional OpenAI widget generation ·/api/health
- Sandboxed widget runtime —
iframewithallow-scriptsonly, postMessage host API, size/CPU budget, forbidden-API scan - Codex as dual role — build-time author of the product (
docs/CODEX.md,AGENTS.md) and runtime “mechanic” shown on the overlay - HyperFrames + Kokoro narrated demo (~68s) at
video/renders/chat-ships-it-demo.mp4 - Avoided Twitch Extensions (5–14 day review; judges can’t install unreviewed extensions) — used chat, overlays, Helix, EventSub as recommended
Challenges we ran into
- No Twitch Client ID / OpenAI key on the build box → shipped honest DEMO_MODE with mock OAuth + template widgets, and documented the real worker path instead of faking credentials.
- Keeping Codex visible and safe → every generated widget must pass a forbidden-API scan and run without network; mods must approve before ship.
- Making a ≤3 min demo that proves both Twitch + Codex → HyperFrames composition with GSAP
window.__timelinesso frames actually render (first pass was audio-only black video; fixed and re-verified). - Hackathon Stage 1 is pass/fail on “connects to Twitch + built with Codex” → README, video, and
docs/CODEX.mdmake both connections impossible to miss.
Accomplishments that we're proud of
- Codex is the gameplay, not a footnote — the overlay’s “Codex is building…” panel is the show.
- A polished public deploy + interactive demo that works with zero secrets.
- Sandboxed-by-design widgets (CSP, no network, kill switch) so chat can’t pwn the stream.
- A complete submission kit: repo, Vercel app, narrated video, 3:2 cover, gallery, pitch deck PDF/PPTX, Codex docs.
What we learned
- Judges may score from video + description alone (and AI-assisted judging is allowed) — clarity and a scannable README matter as much as code.
- Twitch Extensions are a trap for short hackathons; chat + EventSub + overlays ship faster.
- Showing the agent working (plan → diff → tests → hot-load) converts “we used Codex” into something fun to watch.
What's next
- Wire a production EventSub WebSocket worker (
docs/WORKER.md) with real Helix chat + channel-point redemptions. - Cap concurrent Codex builds, add OpenAI moderation on redemption text, and a 30s widget kill switch in the host.
- Stretch: Raid ships a feature — when Avery raids Morgan, the raid carries a co-authored widget as a souvenir.
How we used Codex
See full write-up: https://github.com/dl88jing/chat-ships-it/blob/main/docs/CODEX.md
Build-time: Codex (MAIN thread) scaffolded the Next.js app, widget sandbox, overlay build panel, DEMO_MODE auth, /api/build, docs, and demo script. Side threads authored widget templates and deck/narration.
Runtime: When a mod ships, the overlay dramatizes codex exec-style plan/diff/test; with OPENAI_API_KEY, /api/build generates fresh HTML server-side.
Codex Session ID: 01a19592-cb14-7af0-bf46-1cec8f9b2a13
Built With
- eventsub
- hyperframes
- kokoro
- nextjs
- openai
- openai-codex
- react
- tailwindcss
- twitch
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.