-
-
Actual chat history: !rail, !grow, !glow and !route aurora in the entrant's offline Twitch channel.
-
Real Twitch connection after four authorized commands: one participant, seven stations and three contributions.
-
Practice world: a cooperative railway through floating islands. Synthetic activity is clearly labeled.
-
PNG journey postcard exported from the local Twitch-connected world.
-
Practice capture: three distinct simulated viewers create a signed constellation, with watch mode for an OBS-ready railway.
-
Practice capture: Broadcast 2 starts paused while the previous goal, totals and three station memories remain in the community voyage.
Inspiration
A stream can have thousands of viewers and still leave each person wondering whether their presence matters. I wanted a shared activity with a purpose for tonight and a memory for next time. A railway between floating islands gives chat something to build together. Its continuing voyage gives the streamer a way to make each broadcast a chapter in the same community story.
What it does
RAIDLINE is an independent chat-and-Raid companion with a cooperative railway and OBS-ready overlay. The streamer sets a broadcast theme and a goal: reach stations, complete constellation relays or welcome incoming raids, with a target from 1 to 20. Next broadcast archives complete or partial progress, the chapter's earned counters and its last three station memories. Community totals and the most recent twelve chapters remain; the train and visible crew begin fresh and paused.
Viewers type !rail, !grow or !glow to supply complementary resources, and vote once per leg for the next route. Three different people contributing the three roles within 20 active seconds open a skybridge once per leg, with a 12-second 1.2× boost and three signatures saved at the station. Incoming raids receive a welcome and capped supplies. The host can revisit the station atlas, export JSON memories or save a PNG journey card.
English, Traditional Chinese and Japanese instructions, watch mode and reduced-motion support help the railway sit beside the streamer's existing content. Viewers need only Twitch chat. No purchase or channel monetization is required. Official Hype Train and Channel Points are not connected.
How I built it
The broadcaster runs a dependency-free Node.js app. A Public Twitch application uses device authorization with only user:read:chat. EventSub WebSocket delivers chat messages and incoming raids to the deterministic engine; Server-Sent Events synchronize the dashboard and browser overlay. The same engine runs browser practice. Bounded local persistence holds voyage history, while OAuth secrets remain in memory. A shared text catalog localizes the interface and structured events without changing command spellings or viewer names.
I directed OpenAI Codex to research the event, shape the product, implement the engine, Twitch bridge, interface, localization, original canvas artwork and tests. Codex agents worked on separate components under the main build thread, then integrated the continuing voyage and its reset boundaries. Runtime gameplay has no AI API dependency. The SVG identity and synthesized tones are original; the locally bundled DM Sans and Fraunces fonts retain their SIL Open Font License 1.1 notices.
Challenges I ran into
Chat has to feel immediate without rewarding spam. Cooldowns, one route vote per leg, deduplication and capped rewards protect the shared journey. The constellation needs distinct people using their latest roles; a single person cycling commands cannot supply all three signatures. Its timing pauses with the game.
Continuity also needs clear boundaries. Setting a new goal restarts its progress while preserving totals. Next broadcast saves the current chapter and starts a paused train; full reset clears the world. Practice and connected Twitch voyages remain separate, and simulated inputs are disabled in connected worlds. Reconnecting preserves the channel's journey.
Accomplishments that I’m proud of
The railway now has a reason to return: a purpose chosen by the host, signed moments made by the crew and an archive that connects broadcasts. It supports different stream formats without making a leaderboard of the community. The engine, source labels, safe memory exports, three-language interface and tests make that design reviewable. These are implemented mechanisms, not a claim of measured engagement gains.
What I learned
A momentary chat effect and a continuing community tool need different kinds of state. I learned to separate a train leg, a broadcast goal and a community's history, then make their reset behavior visible. Codex helped turn those boundaries into rules and tests. I also learned to distinguish implementation evidence from audience evidence: mocked transport and synthetic crews do not establish a multiplayer Twitch broadcast.
What's next for RAIDLINE
I would test the pacing with real multi-viewer communities and refine moderator controls from their feedback. Hosted multi-channel operation and cross-channel journey transfers remain future work. The current product stores its voyage locally; it does not claim an automated season system.
Verified demonstration
The 2:55 demo includes four real commands from one account in the entrant's offline Twitch channel: !rail, !grow, !glow and !route aurora. Actual chat history is paired with later world captures; the send actions were not recorded. Relay, continuing voyage and raid sequences use clearly labeled synthetic practice input. The OBS-ready overlay is a browser preview; OBS Studio and a real incoming raid have not been tested.
Codex evidence includes sanitized actual session records, source and captured test output. The build passes 63 automated tests, checks for 14 modules and the static build, with synthetic browser QA across three languages and mobile width. These results do not establish a real multiplayer broadcast or measured community impact.
Try it locally
The private repository includes the complete source, bundled assets, licenses and setup instructions. With Node.js 24.14 or newer, run npm start and open http://127.0.0.1:8787/. No dependency installation or paid AI API is needed. Practice mode works immediately with clearly labeled synthetic input. Connecting a broadcaster’s own channel uses a Public Twitch application and user:read:chat permission. Collaborator access for the official testing account has been confirmed through GitHub's API.
Built With
- canvas
- javascript
- node.js
- openai-codex
- server-sent-events
- twitch
Log in or sign up for Devpost to join the conversation.