Inspiration
Took inspiration from Infinite Craft, where players drag two items together to combine them. Infinite Craft's idea of generating items with an LLM on-demand is pretty cool. I wanted to build something like that directly inside Reddit using Devvit, so people can play without leaving the site.
What it does
Crafteddit is a crafting game that runs inside Reddit posts. You drag items into machines to create new items. There are five machines: combine, split, upgrade, downgrade, and invert.
Two modes:
- Puzzle mode: You get starting items and need to craft a target item. There's a hint system if you get stuck. New puzzles post daily. Recipes are pruned to that the player does not go too off-track. The puzzle mode does not use AI-generated recipes on the fly, it uses already generated items from the Redis cache.
- Playground mode: Open sandbox. Your progress saves between sessions, discoveries get tracked, and there's a leaderboard. Recipes are AI-generated. If you try a combination that hasn't been seen before, the game calls an LLM on-demand to generate the output and saves it to the Redis cache.
How we built it
Frontend: React 19, Tailwind CSS 4, RoughJS for the hand-drawn look. Every UI element (boxes, buttons, even emojis) renders through RoughJS canvas. Emoji SVGs come from OpenMoji and get re-drawn through RoughJS too.
Backend: Express 5 + tRPC 11. Redis for caching. If recipe does not exist in the cache, call gemini-2.5-flash-lite for the output and emoji.
Seed data: AI generated seed data with gpt-5-nano. Two-pass quality system — one LLM, given inputs and machine type, generates an output item name and emoji and scores itself, then a separate LLM scores it again (the LLM seems generous with its self-scoring). Only items that score over a certain threshold are kept.
Challenges we ran into
LLM output quality. LLMs generate items that are too similar, nonsensical, or inconsistent with previous outputs. Had to do a lot of prompt tuning and used quality scoring to keep things sane.
Devvit's Redis is a black box. No way to query or browse the data — it's pure key-value with no CLI, no admin UI, no way to inspect what's stored. Debugging bad data means writing one-off scripts to fetch specific keys. If something goes wrong you're guessing at what's in there. No easy way to clear the cache other than uninstalling the app from the subreddit. Used a cache key prefix to "fake invalidate" old cache data.
Accomplishments that we're proud of
- 6,000+ pre-generated recipes across ~2,000 items, with a dense and well-connected recipe graph.
- Puzzles auto-generate and post daily with no manual intervention.
- The hand-drawn aesthetic turned out nice. First time using RoughJS, definitely not the last.
What we learned
You can't trust a single LLM call for game content. Need quality scoring.
Generating good seed data takes way longer than expected. Most of the time went into prompt tuning and filtering, not the actual generation.
What's next for Crafteddit
- Themed item packs — seasonal or items that only exist in certain subreddits, giving each community its own crafting identity.
- Recipe graph visualization — visual map of how items connect through recipes.
- Achievement system — badges for milestones like first discoveries, solving puzzles without hints, crafting streaks.
- More machines — new crafting operations beyond the current five.
Log in or sign up for Devpost to join the conversation.