Inspiration
Reddit communities already rally around shared obsessions - but they scroll past each other more than they make something together. We wanted a daily ritual that turns passive scrolling into active, collective creation: everyone paints on the same canvases, then the community decides whose turned out best.
What it does
Artmoji runs a self-perpetuating daily art battle inside a single Reddit post. Each round opens 10 themed canvases - a mix of simple prompts for newcomers, richer scenes, and open creative themes - all on a shared 48×48 emoji grid. During the 16-hour build phase, anyone in the community can join a canvas and paint with a curated palette of 55 emoji. Then an 8-hour voting phase opens: people vote for their favorite canvas (you can't vote for one you built). The winner is crowned and frozen permanently in its post, a leaderboard tracks the top builders, and the whole cycle restarts automatically every 24 hours — no moderator action required.
How we built it
Artmoji is built on Devvit Web, running a full React client and a Hono API server inside a Reddit custom post. All state - canvas tiles, votes, round metadata, leaderboards, and the binding of each post to its own round - lives in Devvit's Redis. The 24-hour lifecycle is driven entirely by the Devvit Scheduler (one cron opens a round and tallies the previous winner, another flips build into voting), so the game runs on Reddit's servers with nobody watching. Devvit Realtime pushes tile placements live to everyone viewing a canvas.
We took anti-cheat seriously, with three server-authoritative layers: identity is always read server-side (never trusted from the client), an account-age and karma gate guards against throwaway accounts, and per-user rate limiting plus one-vote-per-round and self-vote exclusion keep the voting honest. Moderator-only controls are gated on the real subreddit moderator list and fail closed.
Challenges we ran into
- Posts hijacking each other. Early on, every post read the current round, so opening a new round made every past post show the live timer and lose its winner. Fixing it meant binding each post to its own round at creation and resolving state from that binding — so a finished round stays frozen forever.
- A security gate that looked right but wasn't. Our first moderator check used a permissions API that returned non-empty for approved users, so a non-moderator could see admin controls. We rebuilt it on the actual moderator list, fail-closed, gating every admin route independently — not just hiding the button.
- Verifying server-side cron that by design only runs once the app is published and installed, never in local testing.
- Rendering a 48×48 grid (2,304 cells) smoothly inside a sandboxed Reddit webview on both mobile and desktop.
What we learned
Devvit Web makes Reddit a real game platform - a full React + Hono + Redis stack inside a post unlocks community game formats that simply weren't possible before. We also relearned an old lesson the hard way: hiding a control in the UI is not security; the server has to gate every action independently.
What's next
True freeform canvases larger than the grid (r/place-style), per-theme leaderboards, and cross-subreddit tournaments.
Log in or sign up for Devpost to join the conversation.