🧩 UpvoteChain
Massively Multiplayer Word Chain Game on Reddit
🎮 Playtest on Reddit 💻 Source Code
💡 Inspiration
The inspiration came from classic word association games we all played as kids reimagined for Reddit’s community-driven environment.
I wanted to create something that:
- Brings communities together through simple, accessible gameplay
- Encourages participation without gaming expertise
- Rewards engagement with achievements and leaderboards
- Works asynchronously so players across timezones can contribute
Reddit’s collaborative nature makes it perfect for this imagine entire subreddits competing to build the longest word chain ever!
🎮 What It Does
UpvoteChain transforms Reddit posts into a collaborative word-chain experience.
Each player adds a new word starting with the last letter of the previous one:
turtle → elephant → tiger → rabbit
✨ Core Gameplay
- 📝 Players submit words via modal forms
- ✅ Each word validated (starting letter, duplicates)
- 🔥 Streaks and achievements unlock as you play
- 🏆 Live leaderboard tracks top contributors
- ⏱️ Rounds auto-end via countdown timers
- 🌍 Asynchronous multiplayer global participation
📋 Key Features
- Real-time countdown timer (auto-ends rounds)
- 16 unlockable achievements across 5 categories
- Persistent leaderboard using Redis
- Streak system for consecutive valid words
- Configurable round durations (2, 5, or 10 mins)
- Full state persistence across sessions
🛠️ How We Built It
Stack
- Platform:
Devvit Web v0.12.1(Reddit’s post framework) - Language:
TypeScript - State:
Redis(persistence + leaderboards) - UI:
Devvit Blocks+ modal forms - Development: Kiro-enhanced workflow (.kiro/ specs, hooks, steering)
- Architecture: Three layers
State Layer (Redis)
- Stores chain, leaderboard, history, achievements
- Atomic updates via
zAdd,zRange
Logic Layer
- Word validation (letter, format, duplicates)
- Streak + achievement tracking
- Round timer control
UI Layer
- Splash screen
- Game screen with timer
- Leaderboard view
Kiro Layer (Development)
Specs (.kiro/specs/) - Feature requirements and validation rules Hooks (.kiro/hooks/) - Pre-commit quality gates Steering (.kiro/steering/) - Development patterns and guidelines
Config (kiro-config.json) - Project-wide settings
⚙️ Challenges We Ran Into
1. Async State Updates Don’t Trigger Renders
- 🧠 Learned Devvit’s render model differs from React
- ✅ Solved by using event-driven loading before screen switch
2. Real-Time Timer for All Players
Used context.useInterval() for 1s precision updates:
context.useInterval(async () => {
if (!gameActive) return;
const remaining = Math.max(0, roundEndTime - Date.now());
setTimeRemaining(remaining);
if (remaining <= 0) await endCurrentRound();
}, 1000);
3. No Text Input Fields
Implemented modal-based forms using context.useForm() mobile-friendly and native to Reddit.
4. Race Conditions with Multiple Players
Solved via Redis atomic ops:
zAddfor leaderboard- Sorted sets for duplicates
- Optimistic UI with rollback
🏆 Accomplishments
- 🚀 Built a complete multiplayer game in <48 hours
- 💡 Solved async render issue with event-driven model
- 🧠 Redis-powered leaderboard with atomic updates
- 🎯 16 Achievement System
- 🔁 Real-time gameplay without WebSockets
📚 What We Learned
- Devvit is React-like, but different
- Async ops shouldn’t happen inside render
Event-driven design works best
- Redis makes multiplayer trivial
Sorted sets = instant leaderboard
Atomic operations = no race conditions
- Simplicity drives engagement
One mechanic done well beats complex systems
- Validation is UX
Friendly error messages boost engagement
🚀 What’s Next
🗓️ Short-Term (Next Month)
- 🌍 Multi-language support (EN/ES/FR/HI/JP)
- 🏅 Daily challenges
- ☁️ Word cloud visualizations
📅 Medium-Term (Next Quarter)
- 👥 Team mode (subreddit competitions)
- 🎭 Themed rounds (“Animals”, “Food”, “Places”)
- 📊 Advanced stats dashboard
🧠 Quick Math Example
To track chain progress dynamically: ( \text{Chain Length} = \text{Total Valid Words} - \text{Errors} )
🖼️ Screenshots

❤️ Acknowledgements
Built for the Devpost Reddit Devvit Hackathon 2025 Made with ☕ + 💡 by Shrey Chaturvedi
Play Now: 👉 UpvoteChain on Reddit Contribute: 🔗 GitHub Repo
Log in or sign up for Devpost to join the conversation.