Inspiration

Chat usually disappears upward. The starting idea for Sediment was to let a room leave something behind: words with weight, a changing pile, and a record of the time people spent together.

What it does

A message lands in its chatter's colour, holds for a beat, then crumbles into grains. Some words turn out to be materials. Water moves sand. Fire burns wood and text. Ice freezes water. Seed grows in wet ground. Japanese words work too. The first discovery gets a credit beside the landing.

The pile has a height limit. Older material presses into a local record, so the game stays visible. At the end, the streamer can export a tall PNG core with a time ruler, raid faults, fossil insets and the words people found. A bright band follows laughter in chat; that part is a guess.

Moderation travels with the material. Deleting a message removes its grains, including grains already pressed into history. A timeout or ban removes every message owned by that user. Mods and the broadcaster can sweep, shake or pause the pile.

The normal source reads public Twitch chat anonymously. It needs a channel name in the URL, with no account or token. A setup page provides a deny list, rate limits and a height cap. IndexedDB keeps the saved core through a reload in that browser on that origin.

The demonstration uses our original game, Dirt Department. Its objective is to file one rock. The rock is in the wrong department.

How it was built with Codex

Codex built from the concept and visual brief, writing the TypeScript simulation, worker, IRC parser and reader, ownership-aware moderation, IndexedDB recovery, setup page, core renderer, bitmap alphabet and original game. It also wrote and ran the tests and capture tools. Implementation and verification were performed by the main Codex session without child implementation agents.

The build session is 01a18d23-4d39-7f12-b412-3efe7e86be30. The repository includes the source, original assets, notices, testing instructions and selected build records.

Review changed the presentation as well as the mechanics. The game floor initially competed with the pile; discovery cards were small and reactions were hard to see. Codex changed the floor, placed larger cards beside their words, added a landing stamp, and built integer-scaled material studies. The water study carries a visible bank down a slope. The raid fault moves one side of the pile while retaining displaced grains in the core.

Challenges

Ownership must survive reactions and compression so that moderation can remove a user's old grains as well as the visible ones. Recovery must preserve the same subsequent simulation state. Another check caught an opaque page root hidden by the game preview; the transparency check now compares it with an opaque control.

The video shows a replay of a real audit failure and repair. The audit could not recognize one of its own positive controls because a name had been split before matching. Codex changed the matcher and reran the check. The captions quote actual terminal output and historical source lines. The record did not contain a failing pressure assertion, so that failure was not invented for the film.

The paired recorder also needed to distinguish a normal bounded test cutoff from a failed recording. It now requires matching admitted owners and landings, and treats an unexpected error as a failure.

Demonstration and verification

The 2:24 video includes actual Twitch chat on our offline channel beside Sediment over Dirt Department. Ten distinct messages were posted during the authorized 90-second take. All ten appeared in the actual logged-out popout, were admitted by the overlay and matched owners that landed. Thirty seconds of that recording appear in the edit. No broadcast was started.

The other scenes are labelled simulations or fixtures: material reactions, Japanese triggers, owned-grain moderation, a raid fault and a core export. The build section is a replay of actual Codex records. All sound is original seeded sand noise and low impact thuds; there is no voice or downloaded music.

39 tests across 11 files pass. Browser checks cover the worker, recovery, moderation, PNG export and transparency. The same seeded performance scene runs for exactly 1,200 ticks in both drawing modes, with both end states required to match an independent reference.

The live-broadcast and OBS workflows remain untested. Paid events and raids use fixtures, native polls are omitted, the keyword filter is basic, and multi-hour storage quota has not been measured. The current verified Twitch route is anonymous public chat, including the recorded offline channel.

Try it

The GitHub repository is private and the judging account specified in the official rules, [email protected] (devposttesting), has been invited. No hosted service or paid account is required for local testing.

Use Node 22.12 or newer. Run npm ci, npm test, npm run build, then npm run preview. Open the printed address, enter a public Twitch channel and use the generated overlay URL. The reader posts nothing. For an offline simulation, open /overlay?demo=1. Press C to open the saved core drawer and export a tall PNG. Full setup and limits are in README.md and submission/testing.md.

What comes next

The next useful step is an OBS test with a streamer, followed by a longer session to measure saved-core growth. This entry keeps those future checks separate from the real chat route already demonstrated.

Built With

Share this project:

Updates

Submission history