Inspiration
Reddit already runs on opinions. Threads full of “best X,” “overrated Y,” and “this will win” rarely end with a clear feedback loop — just more arguing about what “everyone” thinks.
That gap felt like a game waiting to happen. Not a casino: a social prediction loop where your personal taste still matters, but the real skill is reading the community. Everything should stay inside the subreddit — same posts, same people, same culture — and mods should be able to run it without daily busywork.
The name Upvoted nods to Reddit’s own language: the scoreboard is not “who is objectively right,” it is who best reads shared preference.
What it does
Upvoted is a Reddit community prediction game.
On each game post, players can engage several live polls at once:
- Vote — pick among 2–6 text options (your personal taste; it counts toward consensus).
- Bet — stake virtual chips on which option becomes the majority, and guess where your personal pick will rank.
- Wait — rounds close on a schedule; new polls keep the board alive.
- Reveal — see results (without spoilers until you open them), collect virtual payouts if you read the room, and check history / season progress.
Moderators can launch games from the subreddit menu: auto daily-style boards, a Visual Mod Studio (Concept → Question → Answers), custom content in their own language, optional sequential campaigns, and a fast Playtest mode for demos.
Chips are virtual only — no purchases, no cash-out, no real-money gambling.
One line: Reddit’s pulse, turned into light, social prediction.
How we built it
- Devvit for the Reddit app shell: custom posts, mod menu, permissions, Redis, and scheduler tasks.
- Web game UI (dedicated post entry + view router) talking to the server through a typed action bridge.
- Hono server for splash data, player actions, mod APIs, and background jobs.
- Redis for poll configs, votes, bets, multi-slot metadata, payouts, profiles, and history.
- Shared TypeScript for poll schemas, i18n, slot timing, and validation so client and server stay aligned.
- A packed concepts catalog (actors, music, games, food, and more) with English/Spanish copy.
- A Visual Mod Studio (React) so mods publish without hand-writing JSON.
- Multi-slot “live board”: production posts keep overlapping polls (roughly six-hour windows, staggered hourly closes); playtest uses the same UX with compressed timers for demos.
Challenges we ran into
- Honesty in the mechanics. Parimutuel consensus betting can look like gambling even with fake chips. We kept the product story clear (virtual-only) and the gameplay focused on reading people, not RNG.
- From one poll to a living board. Moving from “one question, one close” to several concurrent polls meant refactoring Redis keys, the bridge API, menu UI, outcomes/history, and scheduler jobs together — every path needed a
slotId. - Production timing vs. demo timing. Hourly maintenance works for six-hour rounds but not a ten-minute playtest. We added per-post slot timing and one-shot closure jobs for demos.
- Dense UI inside Reddit’s webview. Six options on the betting screen buried the chip slider and position picker; help modals trapped players on mobile. We fixed both with honest scrolling and always-reachable actions.
- Mod power without footguns. Catalog publish, custom polls, campaigns, drafts, and playtest had to share validation and permission checks.
- Scope vs. the clock. We protected the demonstrable loop — create → multi-poll menu → vote/bet → reveal → history — instead of endless polish.
Accomplishments that we're proud of
- A complete vote → bet → position guess → reveal loop that still feels like Reddit, not a generic trivia app.
- Concurrent polls on one post, with staggered closes, auto-refill, spoiler-safe result blinkers, and a personal history view.
- A real mod authoring path: Visual Studio with collapsible Concept / Question / Answers, preview, and publish — plus custom content in the mod’s language.
- EN/ES i18n woven through UI, help, and catalog content from early on.
- A Playtest mode that demos the multi-slot experience in minutes instead of hours.
- Shipping virtual-economy clarity up front: fun stakes, zero real-money ambiguity.
What we learned
- Shipping on Reddit means product + ops: schedulers, Redis design, and mod tooling matter as much as the game feel.
- “What I like” and “what will win” must stay visually and verbally distinct, or the loop collapses into confusion.
- Spoiler discipline (blinkers without leaking chip deltas) makes reveals feel like events.
- Mods abandon tools that feel like CMS homework — authoring UX is a feature.
- Multi-slot state is an end-to-end architecture change, not a list widget.
- i18n early is cheaper than translating late.
- Mobile webviews punish fixed layouts; scroll + sticky actions are non-negotiable.
What's next for Upvoted
- Richer season / league presentation (clearer streaks, rivalries, and community highlights on the post).
- Smarter content rotation and mod templates tuned per subreddit niche.
- Deeper accessibility and mobile polish across every game screen.
- Optional social moments after reveals (shareable summaries without spoilers in the feed).
- Broader catalog coverage and light analytics for mods (participation, completion, which topics stick).
- More playtest presets so communities can host short events without touching production timers.
If a subreddit already argues about taste, Upvoted’s job is to give that argument a clock, a pot of chips, and a reason to come back when the votes close.
Built With
- api
- cron
- css
- devvit
- eslint
- font-awesome
- git
- hono
- html
- jobs
- json
- node.js
- react
- redis
- rest
- tailwind
- typescript
- vite
- vitest
- webview
Log in or sign up for Devpost to join the conversation.