Project name

RaidFuse

Tagline

Turn a Twitch raid into a 90-second game show between two communities.

Short description

RaidFuse transforms an incoming Twitch raid into a live “Raiders vs. Locals” game on the receiving streamer's OBS overlay. An announcer introduces the crossover, chat votes on three questions, and both teams compete for the win. The receiving streamer installs it once; the raiding streamer does not need RaidFuse.

Inspiration

A raid is one of Twitch’s best community moments, but the incoming audience often arrives with no shared context. The streamer has to greet new viewers, explain what everyone was watching, and keep the energy moving at the same time. We wanted the transition itself to become something both communities could play together.

What it does

When a streamer receives a raid, RaidFuse runs a 90-second show on a transparent OBS Browser Source. The show opens with the raiding channel and raid size, moves into an announcer intro, asks three rapid multiple-choice questions, and reveals the winning team. Viewers vote by sending 1, 2, or 3 in the receiving channel’s chat. The overlay shows a live score bar, vote activity on each team's side, countdowns, synthesized audio cues, and winner confetti. It disappears after the show so gameplay remains unobstructed.

The questions use the two channels’ current game categories and titles from Twitch, plus available recent chat context. An optional OpenAI gpt-4o-mini call generates the intro and three questions as validated JSON. If no API key is configured or generation fails, a local show keeps the experience running. The dashboard provides a one-click simulated raid with custom streamer names, games, viewer count, chat vibe, and timed bot votes, so a judge can run the complete show without waiting for a real raid.

How we built it

RaidFuse is a TypeScript monorepo with an Express server and a React/Vite frontend. The server subscribes to incoming channel.raid events through Twitch EventSub WebSockets, reads live chat with tmi.js, fetches stream context from Twitch Helix, and sends game snapshots to browser clients over WebSockets. A server-owned state machine moves through raid alert, lore intro, three voting rounds, winner reveal, and idle in exactly 90 seconds. Votes are limited to one per account per question, with live team scores and accuracy.

The frontend has a streamer dashboard, a guided Twitch setup page, and a responsive transparent OBS overlay. Framer Motion handles broadcast animations; Web Speech provides the announcer voice; Web Audio synthesizes the whoosh, countdown ticks, and fanfare without external audio files.

How we used OpenAI Codex

We used Codex throughout the build as a coding collaborator. It helped structure the server and client workspaces, implement and test the 90-second game state machine, connect EventSub raids and Twitch chat to the WebSocket relay, and build the OBS overlay and streamer setup flow. We iterated with Codex on the visual design, responsive layout, live voter feed, local simulation, and documentation. We used builds and automated tests to check the implementation as it evolved.

Codex is the development tool we used to build RaidFuse. The optional gpt-4o-mini API call is a separate runtime feature that writes each show's announcer intro and questions.

Challenges we ran into

Twitch's raid event gives a viewer count but does not identify every viewer who came from the raiding channel. RaidFuse therefore uses a practical chat-based team rule: people seen in the receiving chat before the raid are Locals, while first-seen chatters during the show are Raiders. This is an approximation, and the dashboard's simulated voters have explicit teams. We also needed a dependable way to demonstrate a live-looking show without hundreds of real chatters, which led to the timed simulation engine.

Accomplishments

The receiving streamer can install one Browser Source and run the show without asking the raiding streamer to install anything. The overlay is transparent when idle, the show is server-timed, and the entire experience can be exercised locally without Twitch or OpenAI credentials. The dashboard includes setup guidance, connection monitoring, a live overlay preview, and the generated JSON payload.

What we learned

A compelling raid experience needs to respect the streamer's existing broadcast workflow. Keeping the game in a transparent OBS layer, owning timing on the server, and providing a repeatable local demo made the experience easier to operate and test. We also learned to present team attribution honestly when the Twitch event does not provide viewer identities.

What's next

We would like to add an opt-in way for viewers to choose their team, improve accessibility controls for motion and audio, and support hosted deployment so a receiving streamer can use RaidFuse without running a local server.

Built With

  • express.js
  • framer-motion
  • node.js
  • obs-browser-sources
  • openai-api-(`gpt-4o-mini`)
  • openai-codex
  • react
  • tailwind-css
  • twitch-eventsub
  • twitch-helix-api
  • twitch-irc-via-`tmi.js`
  • typescript
  • vite
  • web-audio-api
  • web-speech-api
  • websockets
  • zod
Share this project:

Updates

Submission history