Inspiration
In 2024, two Warhammer subreddits staged an improvised subscriber war. Rallying memes, declarations of allegiance, a dozen communities picking sides. There was no tooling for it, they played it with posts and passion alone. Reddit communities already go to war over consoles, sports teams, and fandoms. Nobody had built them the game. So I built it.
What it does
Subreddits are territories. Crossposting is conquest. One world post lives in a capital subreddit, and crossposting it into any community raises that community's banner on a shared, living hex map. A territory's power is its crosspost's real engagement, meaning upvotes and comments that decay over a 72 hour half life. Holding land means keeping your community talking. If a rival empire doubles your power, your territory falls under their banner until your community rallies enough to liberate it. Go silent and your banner fades from the map entirely. New territories get a 12 hour grace shield so joining never means instant occupation. And no installation is needed to join. The crosspost is the whole door.
How we built it
Devvit Web with a Phaser 3 map client. The entire world computes from a single Reddit API call: getDuplicatesForPost with crosspostsOnly on the world post, polled by a scheduler every five minutes, returns every territory, its engagement, and its fate. Redis holds world state. The power formula weights comments double, because conversation is the lifeblood of a community, and decays exponentially so dead crossposts fade away. The client renders a hex spiral political map with contested territory pulses, conquest animations with camera shake, and a live event feed.
Challenges we ran into
The first architecture had the app installed on every participating subreddit with shared state between them. Mid build, we discovered Devvit Redis is siloed per installation, and global scope is gated behind an entitlement our app doesn't have. With the deadline closing in, we redesigned the whole thing in hours: one install, one world post, crossposting as the universal join mechanic. We also fought through plenty of deployment plumbing along the way, from server bundling requirements to strict response headers to version pinning across installs. The kind of friction you only learn by shipping.
Accomplishments that we're proud of
The pivot made the game better. The constraint that broke the first version produced the best feature of the second: zero friction enrollment, where any community on Reddit can join the war with a single crosspost and nothing to install. We shipped a complete, novel mechanic. Nobody has built territorial conquest between subreddits on Devvit. And the design respects communities: joining is opt in by the act of crossposting, and leaving is as simple as removing it.
What we learned
Check platform capabilities at the entitlement level, not just the API surface. A method existing in the SDK doesn't mean your app is allowed to call it. Also, constraints are design fuel. The best version of this game exists because the obvious version was impossible.
What's next for Frontier Wars
Border adjacency so geography matters, empire cosmetics through Devvit payments, seasonal map resets with a hall of conquered banners, and seeding the game into communities with existing rivalries. Sports subs, console subs, fandom subs. Places where the war will start itself.
Built With
- devvit
- esbuild
- game-development
- html5
- javascript
- multiplayer
- node.js
- phaser.js
- phaser3
- redis
- typescript
- web-game