Inspiration

The Royal Game of Ur is the oldest board game whose rules survive, because a Babylonian wrote them on a clay tablet with a fortune chart on the back. We wanted that energy on Reddit: one shared artifact, one daily ritual, real stakes. So we welded it to the other ancient game everyone already knows how to read: Minesweeper.

What it does

Every midnight UTC the app builds one 18-row tower of mines and clues and hands the exact same tower to every person on Reddit. You climb it one row at a time using classic Minesweeper numbers. One mine and the run is over. One attempt per day. Not "one attempt but you can watch an ad". One.

The twist that makes it fair: a solver certifies every daily tower has a no-guess route to row 12 and draws a glowing line on the board to prove it. Die below the line and it was your fault, and the game shows you the safe route you missed. Above the line the guarantees stop and the last six rows are a staring contest with probability. At row 18 you choose: bank the summit, or read one more line - the Shrine - certified to contain exactly one provably safe tile. Fall there and you keep your summit anyway. The stake is your time, and time is the tiebreak.

Around the climb: daily leaderboards and community death stats ("63% fell on row 7"), streaks that count days climbed rather than days survived, Free Climb re-runs after your attempt is spent, spoiler-safe share cards, a tetrahedral dice cast that colors your token each day, and one omen per day lifted from the register of an actual 177 BC tablet. The dice decide nothing. That is the point: dice may build the tower; only the climber may fall.

How we built it

Devvit Web + Phaser 4, TypeScript end to end. The server is the only thing that ever sees unrevealed rows: each hop is authorized per-request, state lives in Redis (day-scoped keys, 45-day TTL, deletion-compliance documented in the repo), and the daily post creates itself on a cron. Every visual is procedural - the Ur rosettes, the ziggurat skyline, the starfield, the token - drawn in code, no image assets. Audio is all-synth Web Audio. The fairness solver is golden-pinned by tests to a reference implementation.

Challenges we ran into

Making "one attempt per day" feel fair instead of cruel took the certified route plus the death-reveal learning loop. Server-authoritative hops across UTC midnight (carried runs, resyncs, double-taps) took adversarial review to get right. And the platform kept us honest: we debugged a CLI auth-drop in long playtest sessions and a per-installation storage failure, wrote both up for the community, and built the app to bootstrap itself through server-side triggers so it survives platform bad days.

Accomplishments that we're proud of

A daily post has created itself at 00:00:2x UTC for 12 straight towers. The game is fair by construction and the fairness is VISIBLE in-game. Zero image assets. 48 unit tests on the tower math. And the Shrine gives every finished run one last decision worth arguing about in the comments.

What we learned

Judged-by-players design: the post IS the pitch. Reddit's webview constraints (CSP, no persistent localStorage across versions, one shared tower per day) push you toward exactly the kind of server-authoritative, deterministic design that daily games need anyway.

What's next for Mines of Ur

Weekly tournaments on the season system, in-game challenge badges persisted through the Data API, and the Second Shrine - a doubling-cube row 20 for the truly unwell.

Where to play

Any Daily Tower post on r/MinesOfUr: https://www.reddit.com/r/MinesOfUr/ - a new tower posts itself every midnight UTC. First time? The game funnels you into a 2-minute practice before it lets you spend your one attempt.

Built With

Share this project:

Updates

Submission history