ChatGrove turns chat activity into a permanent, visible forest on stream. Every few matching messages a viewer grows a tree derived deterministically from their message text - species, hue and shape come from the words themselves, so the same viewer planting again finds THEIR tree still standing. Over weeks of streaming the community grows a forest that is visible proof of everyone who ever showed up.
Features:
- Persistent collaborative world: plants accumulate across streams in a durable JSONL journal with atomic snapshots (kill-9-safe crash recovery).
- Deterministic plant genetics: hashToPlant() maps message text to species/hue/silhouette with a stable hash - no randomness, judge-reproducible.
- Same-input-same-world guarantee: fixed fixtures replay to identical SHA-256 world fingerprints (tested).
- Living scenery: eased growth animation, full day/night cycle with celestial arc and stars, perspective depth rows with contact shadows.
- Rare-event blooms: raids and subs trigger a whole-grove flowering moment (USERNOTICE-driven, also manually demonstrable).
- Zero-dependency ops: Node stdlib only; anonymous justinfan IRC read path; OBS-ready single-file canvas overlay at >=55 fps.
How it was built with Codex: the project was built inside an official OpenAI Codex CLI thread using codex exec structured-output runs to generate, review and refactor modules. The canonical session identifier is recorded in artifacts/codex_session.txt. What Codex was asked to do: bootstrap the deterministic chat->plant mapper and its tests, design the journal/snapshot persistence protocol, and harden the IRC reconnect ladder. How outputs were verified: every generated module landed only after the in-repo node:test suites passed; replay fingerprints and crash-recovery drills gate the S2 acceptance script.
Try it: npm ci && npm run demo, then add http://localhost:PORT/ as an OBS browser source. Full instructions and tests live in the repository.
Log in or sign up for Devpost to join the conversation.