Inspiration

The best moments on Twitch happen when a streamer and their community create something together. But in most stream games, chat only votes or spams emotes; it never holds information the streamer actually needs.

We wanted to flip that. SignalLost turns the relationship between streamer and chat into an asymmetric cooperative game: a pilot with broken sensors who has to trust their community's navigation, engineering, and decoding to bring six survivors home.

What it does

Six named survivors are stranded in a failing research capsule. The streamer is the pilot. They have the controls but not the information. Viewers open a crew link (no sign-in needed) and see the intel the cockpit never shows.

Every system splits the evidence between them:

  • Navigation: the pilot knows the hull's radiation limit and minimum beacon strength; chat has the sector scans. Only one corridor satisfies both.
  • Power: chat reads four wiring rules with exactly one valid answer; the pilot flips the real relay switches.
  • Distress handshake: chat decodes what each symbol means; only the cockpit knows the order to transmit them.
  • Extraction: a hand-flown docking finale against ion drift. Any viewer can type !boost to steady the ship for six seconds: one power cell per viewer, three per mission.

Chat commands (!nav, !power, !code, !dock, !boost) appear in a live crew uplink, and a readback panel aggregates each viewer's latest finding, so everyone gets one voice while the pilot makes the call. There are two difficulty profiles (a six-minute Cadet flight and a five-minute Commander mission), a transparent OBS overlay, a crew-credited debrief, and a free training mode with simulated crew that needs no Twitch credentials.

How we built it

SignalLost was built with OpenAI Codex: the mission engine, the Twitch integration, the React/TypeScript interface, the original SVG artwork and the automated tests.

  • Authoritative server: a single Node.js process owns every mission and advances the clock every 250 ms. Clients receive a role-specific projection of the state: viewers get the intel; the pilot's cockpit and the OBS overlay never do. Only the browser holding the pilot's token can operate the ship.
  • Twitch: broadcaster OAuth with the read-only user:read:chat scope, and EventSub over WebSocket (channel.chat.message) with message de-duplication, session migration, reconnect backoff, and hourly token validation.
  • Frontend: React + TypeScript + Vite, with original vector spacecraft, radar and survivor art, synthesized Web Audio, and bundled fonts.
  • Quality: strict TypeScript, Prettier, 29 unit tests (mission rules and Twitch protocol fixtures), and 13 Playwright browser tests that play complete Cadet and Commander rescues. GitHub CI also builds the production Docker image and checks its health endpoint.

Codex session/thread ID: 01a17ca8-f1c2-7ec1-846f-60149169589e

Challenges we ran into

  • Keeping answers out of the cockpit. The whole game breaks if the pilot's screen (or the stream overlay) ever receives the solution, so state is projected per role on the server rather than hidden in the UI.
  • Puzzles that are fair from both sides. Each puzzle must be unsolvable by either side alone yet have exactly one answer when combined. The wiring rules, for example, are generated so that a single relay configuration satisfies all four.
  • Making late arrivals useful. A viewer who joins mid-mission needs a job immediately, so every stage has contextual intel and a command to send, and !boost lets anyone help the final approach directly.
  • Real-time testing. The docking finale runs on real timing, and browser tests that passed locally timed out on slow CI runners until we reproduced the failure under CPU load and fixed the test budget.

Accomplishments that we're proud of

  • A complete, replayable four-stage rescue with two difficulty profiles.
  • Information that is genuinely split: neither the pilot nor chat can win alone.
  • A playable docking finale where chat's power cells visibly help bring the capsule home.
  • Separate cockpit, crew intel, and OBS overlay experiences driven by one authoritative server.
  • Real Twitch OAuth and EventSub integration with protocol tests.
  • 42 automated tests, including full browser playthroughs, plus a production Docker build checked in CI.
  • Original artwork and a free training mode, so anyone can try it without an account.

What we learned

  • Asymmetric information is a design problem first. The fun comes from each side holding half of a solvable puzzle, and getting that balance right mattered more than any single feature.
  • Security belongs on the server. Hiding answers in the UI isn't enough when viewers can open developer tools; the server must decide what each role receives.
  • Twitch EventSub needs care in production. Sessions migrate, connections drop, and messages can be redelivered, so de-duplication and reconnection have to be built in from the start.
  • Real-time systems need realistic tests. Timing-based features behave differently on slower machines, so tests should be validated under load, not only on a fast laptop.

What's next for SignalLost

More missions and difficulty levels, richer roles for individual crew specialties, and a cross-channel mode where a raid brings an experienced rescue crew into a new stream.

Built With

Share this project:

Updates

Submission history