Inspiration Reddit is at its best when strangers cooperate on something bigger than any one post — an AMA, a live thread, r/place. We wanted a game that captured that same "we built this together" feeling but let it live permanently on a subreddit, not just for a weekend. Old expedition maps — the kind with hand-lettered coastlines, sea-monster doodles in the margins, and a compass rose in the corner — felt like the perfect metaphor: a single sheet of parchment that a whole community fills in over time.
What it does The Cartographers turns any subreddit into a shared, procedurally-generated world of roughly a million tiles. Each mod post is a portal into the same map, and every redditor is an explorer with a limited torch of steps per expedition.
Chart tiles: Step onto an unexplored tile and you're credited as its first discoverer forever. Your username is stamped on it like a surveyor's mark. Beasts, ruins, obelisks, springs: Tiles hide features that reward exploration — beasts take multiple strikers from different redditors to fell, ruins award draft points, obelisks reveal region names. Daily beacon: A deterministic gold waypoint appears each UTC day, pulling the whole subreddit toward the same coordinate and building daily streaks. Regions & landmarks: Named regions, rumored landmarks, and a weekly Chronicle post automatically summarize what the community discovered. Reddit-native social: Notable discoveries auto-generate tile-card posts, tile notes are backed by real Reddit comments, and a "Roll of Cartographers" leaderboard ranks the subreddit's top explorers. How we built it Devvit Web as the shell — one app installs on any subreddit and provisions the map. Phaser 4 for the client, running inside the Devvit webview, with a custom parchment/woodcut renderer, torch-halo lighting, biome-tinted ambient particles, and a hand-drawn HUD. Hono + TypeScript on the serverless side, backed by Devvit's managed Redis for tile state, presence, streaks, bestiary, and leaderboards. Deterministic worldgen — a single seed produces the same 1M-tile world for everyone in the subreddit, so no tile state ever has to be pre-generated. Server-authoritative gameplay — SETNX locks on tile writes, idempotency keys on client actions, and an offline queue that replays moves when connectivity returns. Automated community storytelling — a weekly cron job aggregates the map's biggest events into a Chronicle text post, and tile-card posts fire on first discoveries and beast kills. Devvit realtime channels for live presence pips and discovery toasts. Challenges we ran into Devvit runtime is not vanilla Node. No window.prompt, no arbitrary child processes, strict CORS, and Redis calls have their own signatures — we rewrote large chunks of the server after hitting ERR_INVALID_ARG_TYPE on zAdd/hSet shapes. Making Phaser feel like parchment, not a spreadsheet. Getting seamless tile reveals (the original circular ink-bleed felt "AI slop") took several iterations before we landed on a square alpha cross-fade that respects the grid. Mobile-first HUD on a desktop-oriented engine. Reddit is majority mobile, so every overlay — beacon chip, torch ring, biome nameplate, minimap, leaderboard ledger — had to survive at 360px width without swallowing the play area. Server-authoritative state on a shared map. Preventing double-discoveries under Reddit's fan-out required tile locks, idempotency, and a client offline queue that reconciles on reconnect. Deploy loop. Iterating against a live subreddit through devvit playtest / devvit upload while keeping a GitHub repo, a Lovable preview, and cookies-based automated QA all in sync was its own engineering project. Accomplishments that we're proud of A single deterministic seed yields a coherent, million-tile world — no pre-baking, no storage cost per tile until someone actually steps on it. A fully Reddit-native loop: every discovery can become a post, every note is a comment, every subreddit gets its own world, and the weekly Chronicle turns gameplay into content. A mobile HUD that reads like an actual 19th-century field map — wax seals, cardinal marks, folio vignettes, torch-reach dashed ring, biome nameplates — instead of a generic game overlay. A resilient client: offline queue, circuit breakers, idempotency keys, and a snapshot store mean a dropped connection never eats your expedition. Shipped end-to-end on Devvit Web with realtime, scheduler, triggers, menu actions, and moderator tooling — not just a webview toy. What we learned Devvit is powerful, but it rewards designing around Reddit's primitives (posts, comments, subreddits, mod tools) rather than bolting a game on top. On a shared world, social proof is a game mechanic — seeing another redditor's name on a tile you just walked onto is more motivating than any XP bar. Determinism is a superpower for community games: no sync, no schema, no migrations for the world itself — only for the sparse deltas players actually create. Aesthetic commitment matters. A consistent parchment/woodcut visual identity did more for retention feel than any single mechanic we added. Mobile-first isn't a resize job; it's a layout constraint you inherit from Reddit itself. What's next for The Cartographers Cross-subreddit expeditions — bridge two subreddits' worlds through a shared "trade route" and let their leaderboards compete. Seasonal world events — floods, migrations, comets that temporarily reshape biomes and generate limited-time landmarks. Cartographer guilds — opt-in teams within a subreddit with shared draft pools, guild-owned ruins, and co-op beast raids. Deeper Chronicle — richer weekly recap posts with generated maps of the week's most-visited regions and top discoverers. Mod dashboard — per-subreddit tuning for world size, difficulty, and feature density, plus tools to seed lore for their own community. Accessibility pass — colorblind palettes, screen-reader-friendly HUD, and a low-motion mode for the ambient FX.
Built With
- a-star
- canvas
- cloudflare-workers
- devvit
- devvit-web
- eslint
- github-actions
- hono
- node.js
- perlin-noise
- phaser.js
- phaser4
- playwright
- prettier
- procedural-generation
- react
- redis
- tailwindcss
- tanstack-start
- typescript
- vite
- webaudio
- websockets
Log in or sign up for Devpost to join the conversation.