Inspiration
Contraption Council was inspired by Reddit games that are simple to understand immediately but still feel social, funny, and replayable. I wanted to build something that could live inside a single Reddit post and make the community feel like they were making one shared decision together.
The idea became a daily contraption challenge: the council sees a problem, picks one ridiculous contraption, and then watches whether the crossing succeeds cleanly, gets messy, or fails. The goal was not to make a generic poll. I wanted the vote to create suspense and payoff.
What it does
Contraption Council is a Reddit-native daily game where users vote on which contraption should attempt a challenge.
For the MVP, the challenge is Ravine Supply Run. The community chooses between three contraptions, each with different crossing zones:
- Bridgeback Cart: stable and safe, but slower
- Balloon Basket: light and fast, but risky
- Spring Sled: powerful, but unpredictable
The app uses a staged flow:
- Enter the council
- Choose a contraption
- Review the choice
- Confirm the vote
- Start the crossing
- Reveal the result
The final crossing result is deterministic and stored server-side, so refreshing the page does not reroll the outcome. The result belongs to the council’s leading choice, not just one individual player’s pick.
How I built it
I built Contraption Council as a Devvit Web app using React, TypeScript, and Vite. The app runs inside Reddit and uses Reddit-native post context instead of being a standalone external website.
The frontend handles the staged game flow, review screen, crossing reveal, and result screen. The backend stores votes and resolved crossing snapshots so the community result persists. Shared TypeScript modules define the challenge data, contraptions, crossing zones, tally logic, and resolver logic.
The resolver maps a stable seed to one of three crossing outcomes:
- Clean Crossing
- Messy Crossing
- Failed Crossing
Each contraption has different zone weights, so better choices have stronger success zones while still leaving room for suspense.
Challenges I ran into
The biggest challenge was making the game feel like an actual Reddit game instead of a styled poll. The first version placed too much information in one stacked card, which made it feel flat and dashboard-like. I redesigned it into a clear screenflow so the player moves from intro, to choice, to review, to reveal, to result.
Another challenge was balancing suspense with safety. A reveal mechanic can easily feel gambling-adjacent if it uses the wrong language or rewards. I avoided betting, currency, prizes, payouts, and casino-style wording. The crossing reveal is framed as a playful outcome animation, not a reward mechanic.
Devvit testing also had some limitations. The Reddit-hosted app frame was difficult to automate with browser tools, so I verified the resolved Reddit path, tested the unresolved flow locally, and prepared manual Reddit QA steps for the full interaction path.
What I learned
I learned that for Reddit-native games, the interface has to explain itself fast. The player should know what is happening before they scroll to the comments.
I also learned that small UX details matter a lot: adding a review screen, a confirm button, and a separate crossing reveal made the app feel much more intentional. The project pushed me to think less like I was building a webpage and more like I was designing a compact social game loop.
What’s next
The next step would be adding more daily challenges, a council log of past results, and more contraptions while keeping the core loop simple. I would also like to expand the visual reveal so each challenge has its own small payoff animation without making the app feel cluttered.
Built With
- css
- devvit
- eslint
- node.js
- react
- redis/kv-storage
- typescript
- vite
- vitest
Log in or sign up for Devpost to join the conversation.