-
-
Mobile Woven result: all three thread pairs connected before the spool ran out.
-
Mobile Frayed result: the spool ended first, with completed work still visible.
-
Open from the Reddit feed: one shared cloth, one clear action.
-
An accepted stitch changes the same board, spool, and contributor count for everyone.
-
The shared 6x6 loom, three symbol-coded thread pairs, and server-issued stitch tray.
Inspiration
Daily games usually give everyone the same puzzle, then send each player off to solve it alone. We wanted the opposite: one small object that only exists because a community made a sequence of decisions together.
A loom felt right. Each move can be tiny, tactile, and understandable, while the finished result still belongs to everyone who touched it.
What it does
Threadloom opens one shared 6x6 board for the day. Three colored thread pairs begin at the edges. A player receives three stitch tiles, rotates one, and places it on a legal opening. That placement immediately becomes part of the board seen by the next visitor.
The community wins by connecting all three matching pairs before the shared spool runs out. If it succeeds, the day's cloth is Woven. If the spool empties first, it is Frayed. Today stays playable and Yesterday remains visible as a read-only textile.
Color is never the only clue: coral uses a circle, teal a diamond, and mustard a wave.
How we built it
Threadloom is a Devvit Web Interactive Post built from Reddit's official Phaser template.
Phaser renders the loom, stitch geometry, legal targets, thread travel, and the Woven/Frayed reveal. A compact DOM layer handles status, the tile tray, keyboard controls, and accessible announcements. Hono exposes the loom and stitch endpoints.
The shared board lives only in Devvit Redis. Pure TypeScript rules validate the server-issued offer, rotation, target cell, board edge, neighboring connectors, thread identity, date, and revision. A Redis watch transaction prevents two people from occupying the same cell, and a bounded request ledger makes retries idempotent.
Seven curated solution maps are rotated and reflected by a deterministic UTC seed. This gives each day a different composition while keeping every board solvable.
Challenges
The hardest part was making one move feel immediate without pretending the browser owned the truth. We kept the animation optimistic only after the server accepted a placement, and refresh cleanly when another stitch lands first.
The second challenge was making a square Phaser canvas, DOM controls, and Reddit chrome coexist on a 390x844 phone without scrolling during normal play. The final surface uses stable regions, 44px controls, color-independent symbols, keyboard input, and reduced-motion behavior.
We also moved Phaser to its Canvas renderer after transparent WebGL scenes produced unreliable black redraw artifacts inside the target composition. The visual result stayed tactile and the rendering became predictable.
What we learned
A community game does not need a chat room, a giant lobby, or a complicated economy to feel social. A single irreversible move on a shared object is enough to create responsibility, curiosity, and the desire to see what the next person does.
We also learned that curated daily variation can be more trustworthy than procedural cleverness. The templates let us spend the deadline on feel, clarity, and edge cases instead of gambling on generated puzzles.
What's next
First, we want to watch real communities solve a week of looms and learn which board shapes create the best conversation. From there we can tune template difficulty, add more textile patterns, and let moderators choose a daily post rhythm without changing the one-stitch core.
Log in or sign up for Devpost to join the conversation.