wanessalabs games production August 27, 2026

Reddit Dishwasher Daily

The dishwasher game as a playable Reddit post: one seed per thread, the same 14 dishes for everyone, and a leaderboard scoped to that thread.

Devvit WebReactTypeScriptExpressDevvit RedisVite

The hub already had a dishwasher game with 40 chapters and a wife who comments on your rack placement. The problem with a hub is that people have to go to it. Reddit is where the daily-puzzle habit already lives, so this is the same game, running inside a Reddit post.

What It Is

A Devvit Web app on r/wanessalabsdev. A moderator creates the post from the subreddit menu, and the post itself is the game: drag today’s 14 dishes out of the sink and into four kitchen zones without ruining the good knives.

The zones are a 6×4 top rack, a 6×5 bottom rack, a 4×3 utensil basket, and a 5×4 hand wash mat. Knives, cast iron, wooden boards and nonstick pans belong on the mat. Put one in the machine and you take a 40 point penalty and hear about it.

The Seed Is the Post

Every player in a thread has to be solving the identical puzzle or the leaderboard means nothing. The seed comes from the post ID, not from a clock and not from the client:

derivePostSeed("t3_1vzwemc") → 32-bit integer → seededRandom → the same 14 items, every time

That is a djb2 hash over the lowercased post ID, so the load is fixed the moment the post exists. A new post tomorrow is a new load. Nobody can reroll, and the server never has to store the puzzle.

One Engine, Two Surfaces

The webview does not reimplement the game. It imports data.ts, logic.ts and types.ts straight out of src/games/dishwasher/ in the hub, plus the hub’s own seededRandom. What is new here is the renderer and the Reddit plumbing:

PieceRole
devvit.jsonManifest: post entrypoint, server bundle, subreddit menu item
src/server/index.tsExpress on @devvit/web/server. Three routes: create post, /api/init, /api/submit-score
Devvit RediszAdd / zRange on lb:{postId}, so the leaderboard is per thread
App.tsxLeaderboard, current user, and a navigateTo link back to the full game
DishwasherView.tsxThe board: drag, drop, rotate, wife commentary, itemized receipt

Scoring is itemized rather than a single number: 80 points a dish, 25 for a zone match, 80 for hand washing something delicate, 250 for clearing the counter with zero violations, 150 more for doing it with hints off. Excess moves cost 4 each. The receipt shows every line, then grades A+ to F.

Constraints

Devvit is a sandbox with its own rules, so the port strips things the hub version has. No coin economy, no Supporter Pack, no external network calls, no localStorage. State that survives is state Reddit holds. Scores are keyed to the Reddit username the server reads, and fall back to Anonymous if it cannot.

The build is two bundles, not one: Vite for the webview, esbuild into a single CJS file for the server, because that is what the platform loads. Three tests cover the parts that would break quietly: seed determinism across identical post IDs, grid placement, and leaderboard sort order.

This is the first of three planned Devvit pilots. Poker Friday and Chinese Checkers use the same recipe.

Development timeline

1 logged update on 27 Aug 2026.

  1. The dishwasher packing puzzle, played inside a Reddit postlaunch

    A Devvit app running in the subreddit rather than on this site: the board is the post and the thread is the leaderboard. A daily seed generates the load, and the hub links out to it from its own Reddit Games section.

Written from the release notes published with each update, not afterwards. See every project →