Inspiration

I can lose a surprising amount of time moving one piece in a marble run and watching the route change. For Reddit, the interesting twist was to take the big board away from any one player. Everyone gets a small room; the subreddit supplies the full machine.

The Workshop uses only a bumper, a fan, and a gate. That limit makes another player's room easy to read, but moving any one of the three pieces can still change the result.

What it does

A player places one bumper, one fan, and one gate in the Workshop, then sends a test marble through the room. Tests are unlimited. The server runs the physics and returns the route, score, sparks, and exit result; Phaser plays that run back inside the post.

Selecting a tool shows its exact angle and clear rotate, move, and remove actions. Moving a directional tool keeps its rotation. After a test, the Workshop explains the next useful step based on the real result instead of dropping the player at a score panel.

The daily work order changes the launch and gravity settings for everyone. A room qualifies for the Grand Run if the marble reaches the exit or catches at least one spark. Each signed-in player can contribute one room per UTC day.

The Grand Run shows at most twelve rooms. Player-built rooms take the available slots before the built-in starter rooms. They are ordered by clean exit, score, submission time, and a fixed tie-break. Players can open and replay every selected room.

Starter rooms are clearly labeled and only fill empty slots. One has been tested against all 36 launch and work-order combinations, so a new or quiet subreddit still has a working route to explore.

Before six players join, contributed rooms are labeled "Anonymous builder." After six, they receive neutral room numbers. Reddit usernames and account IDs never appear in the public daily machine. A private Cabinet keeps each player's test count, verified runs, Grand Run entries, best score, sparks, and recent active days.

How we built it

React and TypeScript handle the feed card, navigation, controls, and Cabinet. Phaser runs the interactive Workshop and marble replay. A semantic build grid provides the same placement tools without requiring the canvas.

The browser submits a layout, not a score. A Hono server checks that the room contains exactly one of each tool, keeps every piece inside the board, limits rotation to 45-degree steps, rejects overlaps, and runs the simulation again. The shared simulator advances at 60 steps per second for no more than twelve seconds, so the server result and browser replay follow the same rules.

Reddit Redis stores the daily machine, personal Cabinets, post references, and short-lived locks. The locks serialize daily contributions. Accepted module IDs are also kept with the personal counter so a retry can recover an earlier room without adding it or crediting it twice. Install, scheduler, and moderator repair routes create the daily post safely when rerun.

Challenges

The visible challenge was balancing three simple tools. Each one needed to alter the route enough to matter without making the board difficult to understand.

The less visible problem was recovery after a partial save. The daily machine can accept a room before the player's Cabinet update finishes. An identical retry now finds the original room and completes the missing personal credit. A different plan still respects the one-room limit.

The same simulation also had to work for server checks, animated playback, and the keyboard-friendly grid without producing different answers.

Accomplishments

The complete loop now fits inside one Reddit post: build a room, test it, watch the run, adjust it, and contribute it.

The game also has a keyboard-operable build path, private player progress, retry-safe daily contributions, and automatic post repair. The labeled starter rooms mean the first player can use the Grand Run without pretending that other people have already participated.

What we learned

The three-piece limit did more for the game than a larger toolbox would have. Rooms stay understandable, yet their placement still feels personal.

Using the same simulator on the server and in the replay also made testing easier. A successful run can be reproduced instead of depending on what one browser happened to display.

What's next

The first addition would be an exhibition mode that sends one marble through several active rooms in sequence. I would also add an archive of earlier daily machines.

Live play would determine whether the Workshop needs per-player rate limits, additional moderator controls, or different retention settings.

Built with

Devvit Web 0.13.8, TypeScript, React 19, Phaser 3.90, Hono, Reddit Redis, Vite, Vitest, Testing Library, Playwright, HTML, and CSS.

The instruments, marble, and interface are original CSS and Phaser work. I generated the Workshop board background specifically for Marble Commons with OpenAI image generation on July 14, 2026. The project contains no franchise assets or third-party game art.

Hackathon work statement

I started Marble Commons for the Reddit Games with a Hook hackathon. I built its mechanics, fixed-step simulator, Devvit and Redis integration, interface, tests, visual assets, and submission materials during the event. It is not a reskin of an earlier game.

Built With

Share this project:

Updates

Submission history