# Ninelands: a daily strategy puzzle for Reddit [![Play on r/Ninelands](https://img.shields.io/badge/play-r%2FNinelands-FF4500?logo=reddit&logoColor=white)](https://www.reddit.com/r/Ninelands/) [![Built with Devvit Web](https://img.shields.io/badge/built%20with-Devvit%20Web-FF4500)](https://developers.reddit.com/) [![License: GPL-3.0](https://img.shields.io/badge/license-GPL--3.0-blue)](LICENSE) [![Reddit Game of the Day 2026](https://img.shields.io/badge/hackathon-Reddit%20Game%20of%20the%20Day%202026-6f42c1)](https://redditgameofday2026.devpost.com/) ![Ninelands: a new 9×9 map every day](docs/images/cover.png) **[Play on r/Ninelands](https://www.reddit.com/r/Ninelands/)** · [Wiki](https://www.reddit.com/r/Ninelands/wiki/) · [Original game](https://ninelands.stackteam.at) **Ninelands** is a bite-sized strategy game that lives inside a Reddit post. Every day brings a fresh 9×9 map that is the same for everyone. Build your realm piece by piece, claim lands and gold, chase three stars and climb today's leaderboard, then compare your realm with the community in the comments. It is a port of [Ninelands](https://ninelands.stackteam.at), a strategy board game by StackTeam that runs on the web, desktop, Android and itch.io. The Reddit edition is a new, focused daily mode built on Devvit Web for the _Reddit Game of the Day 2026_ hackathon. ## Screenshots | The daily post | Claim land, earn gold | | :-------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------: | | ![Daily post with map preview, law, goals and today's best](docs/images/daily-post.png) | ![Placing a farmer with a live gold preview](docs/images/claim-land.png) | | **Result card** | **Your realm** | | ![Result card with stars, rank, streak and unlocks](docs/images/result.png) | ![Realm view with colours, factions, boards and banners](docs/images/realm.png) | ## How to play 1. **Open today's post** and press **Play**. 2. **Place your castle.** It is free and founds your realm. It claims land in straight lines (up to 5 cells); nothing can be built on claimed land afterwards. 3. **Grow your realm.** Every new piece must connect to the land you already hold: | Piece | Cost | Claims | Rules | | :--------- | :--: | :------------------------------------------------ | :--------------------------------------------------- | | **Castle** | free | straight lines, reach 5, crosses borders | only one, placed first, not in the moor | | **Farmer** | free | the 8 surrounding cells in its own land | must border your land directly, in the same land | | **Knight** | 10 | straight lines, reach 2, stops at the land border | must touch your land in the same land · **2× yield** | | **Bishop** | 15 | diagonal lines, reach 2, crosses borders | must touch your land | 4. **Earn gold.** Each piece earns gold for the cell it stands on: ore (mountains) and herbs (moor) 20, pasture 5 (7 in a land with a lake). Knights pay double. Building costs are deducted. 5. **Rule lands.** The board is split into 9 lands; you rule a land once you claim at least half of it. 6. **Finish.** The game ends when no move is left, or whenever you press **End game** (tap twice). If no remaining move earns gold, the game suggests ending. Every map has one **law of the realm** that changes the rules a little (e.g. _Costly knights_, _One farm per land_). Hover or tap a cell to preview what a piece would claim and how much gold it brings; the line below the board explains why a cell does or doesn't fit. ### Stars, leaderboard and streaks - **Three stars per map:** reach the gold target, rule the lands target, and both in the same game. Targets are computed from computer games on that very map, so every day and every law is fair. - **Only your first game counts.** You may play again for practice; it won't change your result. - **Leaderboard:** more stars first, then more gold; on a tie the earlier submission wins. The server replays every submitted game with the same engine and computes gold and stars itself, so results cannot be faked. - **Streak:** play the map of the day on consecutive days. Older posts can still be played, but only today's map keeps your streak alive. - **Share** your result line (`Ninelands #12 ★★☆ · 8/9 lands · 85 gold`) and discuss strategies in the comments. ## Features - A new post every day at 00:01 UTC (Devvit scheduler) with its own map, leaderboard and comment thread. - Inline start screen in the feed (map preview, law of the day, goals or your result, streak, top 3) and the full board in expanded mode. - Mobile first: tap once to preview, tap again to place. Music starts only after your first tap and can be muted. - Devvit Journeys: app ready, journey start when the castle is placed, a progress event per star, end with gold as score. ## For moderators: setup 1. **Install the app** in your subreddit from its page on developers.reddit.com. 2. **That's it.** On installation the app creates today's post. After that it posts a new map automatically every day at 00:01 UTC. No manual work needed. 3. If a daily post is ever missing, open the subreddit's mod menu (⋯) and choose **“Ninelands: create today's post”**. It never creates a duplicate. Each subreddit has its own leaderboards and streaks. There is nothing to configure. ## Privacy The app stores only what the game needs: your Reddit user ID and name with your first result per day (for the leaderboard) and your streak statistics. All of it expires automatically **30 days** after your last game. No data leaves Reddit. ## Development Built from the Devvit template _Bare_: TypeScript, esbuild, Biome, `node --test`. ```sh npm install npm run test # types, lint, unit tests, build npm run playtest # build, upload and install in the test subreddit npm run capture # record the catalog assets (video, GIF, stills) into dist/marketing/ npm run capture:trailer # trailer, Devpost gallery and Vimeo cover into dist/marketing/ npm run capture:community # images for the community posts into dist/marketing/community/ ``` - `src/client/`: start screen (`splash`) and game (`game`) - `src/server/`: endpoints: day state, verified submission, leaderboard, streak, daily post, journeys - `src/shared/`: API types and the daily map (seed from the UTC date) - `src/engine/`: the Ninelands engine and board renderer, copied unchanged from a tagged release by `scripts/sync-engine.sh` (see `src/engine/VERSION`) - `docs/`: submission texts, community posts, the subreddit wiki and the README images ## Credits - Music: “Dreamscape (part I)” by Vee Ray, CC BY-SA 4.0 (re-encoded) - Graphics: “Mini World Sprites” by Shade and octoshrimpy, CC0 - Font: Pixelify Sans, SIL Open Font License 1.1 - Project skeleton: Devvit template “Bare” © Reddit Inc., BSD-3-Clause Details in [CREDITS.md](CREDITS.md). ## License GPL-3.0, see [LICENSE](LICENSE). The template parts remain under BSD-3-Clause ([LICENSE-TEMPLATE.md](LICENSE-TEMPLATE.md)).