Inspiration
The part I enjoy most in a visual telephone game is finding the exact handoff where the picture changed meaning. Old radio noise, worn photocopies, and messages passed from person to person gave Signal Chain its look. I wanted it to feel like a small broadcast being carried down a line, not a drawing contest.
What it does
Each UTC day starts one Signal Chain. The first receiver sees an authored prompt. Every later receiver sees only the previous drawing for eight seconds, then gets sixty seconds to redraw it from memory under one interference rule.
The server owns the clock and checks the reservation, player, nonce, drawing size, stroke data, and assigned rule before accepting a link. Each player can add one official link per day, and a chain can hold up to six.
When the chain seals, the Broadcast replays the drawings in order. A full chain gets the complete reveal; a short chain still gets a smaller Broadcast; an empty day becomes Signal Lost. The game does not add placeholder players.
Players can react to a Broadcast and revisit earlier ones in the archive. Reaction totals appear after that viewer reacts. Practice Receiver offers unlimited numbered drills without using the daily turn, and practice drawings stay on the device. It retunes after an expired drill, explains each rule plainly, removes the source after observation, and reports only the actual local cue, rule, stroke count, and approximate drawing time. A private journal records participation and reactions, with one missed day per week allowed before a streak resets.
The scheduler also stores weekly mosaic data. The player-facing mosaic screen has not been built yet.
How we built it
React and TypeScript handle navigation, consent, accessible controls, archives, and moderation. Phaser owns the drawing surface, observation timer, interference effects, and animated replay.
A Hono server checks every reservation and submission. Redis stores daily chains, private journals, reactions, reports, moderation records, and recovery data. Realtime notifies open clients when a link or moderation state changes. Scheduled jobs create the new day, seal Broadcasts, expire abandoned reservations, and prepare the weekly mosaic records.
Optional Reddit comments use a separate confirmation dialog that shows the exact comment and destination before anything is posted.
Challenges
Timing was more complicated than the sixty-second countdown suggested. The server had to reject a drawing submitted before its observation window, stop expired reservations from lingering, and recover a valid reservation after a refresh or dropped connection.
Two players can also ask for the same open link at nearly the same time. Reservations and submissions therefore need to be atomic and safe to retry.
Stroke data had to stay small enough for storage while preserving the character of the drawing. Moderation also needed to work without adding unrestricted report text inside the game.
Accomplishments
The daily loop now works for a full chain, a short chain, or no chain at all. Players can claim a link, observe the incoming signal, draw under a rule, recover an interrupted session, and return for the reveal.
The installed build also includes reactions, archives, private progress, local practice, self-removal, predefined report reasons, a moderator queue, and explicit consent for optional Reddit comments.
What we learned
An empty day is still a game state and needs its own ending. Treating it deliberately made the smaller Broadcasts feel less like failed versions of the six-player reveal.
I also found a useful split between Phaser and the server: Phaser should make drawing and playback feel immediate, while timing, ownership, and acceptance stay on the server.
What's next
I would tune chain length and interference rules after watching real groups play. More accessible drawing options are also a priority.
The weekly mosaic data already exists, but its player-facing recap is future work. I would also make each community's Broadcast archive easier to browse without changing the one-turn-per-day rhythm.
Built with
Devvit Web, Reddit custom posts, React, TypeScript, Phaser, Hono, Redis, Realtime, Devvit Scheduler, Vitest, Testing Library, and Playwright.
Significant hackathon updates
During the hackathon I built the drawing relay, timed reservations, server validation, recovery, Realtime notifications, scheduled jobs, archives, private journals, practice mode, reactions, comment consent, reporting, self-removal, and moderator tools. The weekly mosaic screen remains future work.
Built With
- devvit-web
- hono
- phaser.js
- playwright
- react
- redis
- typescript
- vite
- vitest
Log in or sign up for Devpost to join the conversation.