Inspiration
Small, community-first streams have moments when everyone is waiting: between games, during a short break, while a queue loads, or when a raid introduces new people. Chat Harbor gives those moments a shared 75-second ritual: bring a little fleet home together.
During the October 31 review, the entrant defined the intended audience as roughly 30–500 concurrent viewers, especially Just Chatting, cozy games, music and art communities. This is a product direction, not a tested capacity limit or a claim of measured engagement improvement. Quiet viewers can watch or participate without an individual leaderboard.
What it does
Twelve paper boats cross a stylized ocean with reefs and two glowing harbors. Viewers steer the current with !up, !down, !left, !right and !calm. Each viewer has one active vote for six seconds; a later vote replaces the previous one. A short cooldown and message-ID deduplication prevent repeated messages from multiplying influence.
The streamer can start, pause and reset a voyage, use an explicitly labelled offline rehearsal, copy a standalone OBS Browser Source URL, and download an aggregate report. Optional Ambient mode maps actual incoming chat activity to directions locally without requiring a special command. It does not infer sentiment.
The dashboard now explains the shared goal and the intended between-game, break and raid-welcome use cases. Watching without voting is welcome. Commands remain public messages in Twitch chat, even though the game does not display viewer names, chat text or individual rankings.
Product direction and Codex workflow
The initial prototype was selected and implemented by Codex after the owner delegated project selection and development. During review, the entrant supplied the audience, use cases and low-pressure participation rationale above. Codex translated that later direction into the new ritual/goal introduction and clearer privacy wording. The timing and decisions are recorded in docs/PRODUCT_DECISIONS.md; no retrospective human-authored implementation is claimed.
Codex built the interface, Canvas 2D renderer, current-field gameplay, voting engine, Twitch IRC adapter, OBS mode, runtime recorder, automated tests and documentation in the main build chat. It also debugged the Windows static-server path issue exposed by HTTP testing.
The revised demo combines an actual recording of a Codex editor refinement on October 31 with the original 100-second recording of the game driven by real Twitch messages. English annotations explain the entrant direction and implementation. The editor footage is a real later refinement, not a reconstruction of the initial build. The app recorder itself is now explicitly labelled as gameplay runtime footage, separate from development-process footage.
Main Codex build session: 01a19083-ea48-7f90-86fa-3e3e5a799039.
Technology and Twitch connection
The project uses vanilla JavaScript modules, Canvas 2D and Twitch's secure IRC WebSocket endpoint. It has no npm dependencies, database, paid API calls or runtime AI model. The current field is stylized gameplay, not a scientific fluid solver.
The adapter waits for a confirmed Twitch channel join, handles keepalives and bounded reconnects, ignores stale socket callbacks, and processes chat/message removal events. It never posts chat or performs moderation actions. Guest IRC reading is a compatibility option rather than a documented availability guarantee. Optional authenticated access accepts a Twitch username and a user token with chat:read, retained only in the current tab's memory.
The OBS overlay connects independently and runs its own voyages. Dashboard pause/reset controls do not remotely control a separate OBS session. Remote synchronization and an official EventSub authentication path are future work.
Verification
All 21 automated tests passed after the recorder module integration, and syntax/asset checks passed. Browser checks verified rehearsal, pause behavior, live/rehearsal separation, confirmed Twitch joins and actual incoming messages. The 100-second runtime recording received 147 real Twitch messages. It contains no third-party streamer video, audio, raw chat text or viewer names. The tested channels are not collaborators or endorsers.
The revised dashboard and browser-overlay layout were checked in the in-app browser. A short rehearsal recording also completed with an explicit simulated-input label and zero real-message count. No end-to-end OBS application/broadcast test is claimed.
The live site is public. Independent requests without credentials loaded the actual app and core assets, and the entrant separately supplied an Edge InPrivate screenshot of the loaded site. The public repository contains source, assets, setup instructions and VALIDATION.md, which records the exact evidence and network-dependent limits, including YouTube anti-automation restrictions encountered during anonymous playback checks.
What the work taught us
An open WebSocket and a confirmed channel join need separate states. Latest-vote replacement and expiry make collective control more credible than counting repeated messages. Rehearsal provenance must remain visible, and omitting names from a game does not make the underlying Twitch chat anonymous. Development footage and runtime attribution also need clear, separate labels.
What's next
Additional cooperative maps, official EventSub-based authentication, and optional remote synchronization between the controller and OBS. The current submission keeps those items separate from its implemented features.
Built With
- codex
- javascript
- openai