Inspiration

A chat room is full of people who want to take part. I wanted to turn that participation into a shared objective where coordination matters more than message volume. SignalCrew gives each viewer one meaningful contribution per round and makes the crew's combined decisions visible.

What it does

SignalCrew turns a Twitch channel into the crew of a rescue ship. In each thirty-second round, viewers send !crew scan, !crew shield, or !crew boost. Each account's first valid contribution counts once; repeating a command adds no influence.

The crew has five rounds to reach 135 distance, restore at least 70 signal, and keep the hull intact. Scanning, shielding and boosting affect different resources, so a balanced crew can rescue the relay while an unbalanced strategy can fail. Contributions are normalized by crew size, allowing small channels to play.

A local captain console opens and resolves rounds. A separate read-only browser display is designed for OBS. If chat disconnects, the live round pauses with its remaining time and accepted contributions; the captain reconnects and explicitly resumes. A visibly separate rehearsal mode lets a streamer learn the game before connecting Twitch.

How I used OpenAI Codex

I used Codex to implement the deterministic mission engine, the Twitch connection lifecycle, the captain console, the stream display and the automated tests. Codex also helped review stale-event and authorization edge cases and fix two reconnection races.

The project runs on Node.js 24 with browser HTML, CSS and JavaScript, native WebSocket support and Node's built-in test runner. It has no third-party runtime packages, database, hosted backend or paid inference dependency.

The Twitch integration uses Public-client Device Code Grant and an own-channel channel.chat.message EventSub WebSocket subscription. It requests only user:read:chat. Tokens remain in server process memory. The console uses local control boundaries, while the overlay exposes read-only game state.

Primary Codex build session ID: 01a16a9a-4b62-737f-ad19-357195d290e8. The public demo includes authentic recorded Codex development history, file-edit activity and the explanation of the two reconnection fixes. Raw command bodies and source diffs remain collapsed in that recording.

Challenges

A game clock and a network connection have different lifecycles. Duplicate deliveries, delayed authorization responses and events arriving on an old socket can otherwise change the wrong round.

The fixes reject late identity-validation results after disconnect and queued contributions from a superseded socket. Per-round contribution guards, bounded delivery deduplication and timestamp checks protect the current mission. Rehearsal injection is rejected in live mode, keeping synthetic practice separate from genuine Twitch activity.

Accomplishments

The application completed genuine five-round rescue missions using actual Twitch chat and EventSub. In the published recording, the crew scans, boosts, shields, resolves round four without a contribution, then boosts to rescue the relay: hull 32, energy 37, signal 90 and distance 180/135.

Seventeen automated tests pass, covering mission outcomes, duplicate and late contributions, pause/resume, token identity and scope validation, refresh rotation, socket migration, cancellation and local control boundaries. These automated provider tests use injected fakes; the recorded Twitch mission is separate integration evidence.

What I learned

Separating mission rules, network lifecycle and display state makes failures easier to diagnose. A paused clock should preserve the crew's decisions, and a previous connection must never regain control of the current game. Clear rehearsal labels and aggregate evidence also make the result easier for a streamer or reviewer to assess.

What's next

More mission scenarios and accessibility refinements can extend the same short cooperative format. Independent-viewer, actual outage/revocation, OBS and phone acceptance checks remain future verification work. The genuine Twitch tests used one broadcaster account on an offline channel; the demo does not claim a public broadcast or an OBS test.

Try it

Source and setup: https://github.com/Surafiel1527/signalcrew

Run npm test, then npm start, and open http://localhost:4310. The Windows launcher is start-signalcrew.cmd. A fresh process starts in clearly labeled rehearsal mode; the README explains how to authorize a real Twitch channel.

Share this project:

Updates

Submission history