Daily Guess Who - Project Story
Inspiration
The inspiration came from the viral success of daily puzzle games like Wordle and the classic "Guess Who?" board game. We wanted to create an engaging daily challenge that brings the Reddit community together through a shared guessing experience. The idea was simple: give players progressive hints about a mystery character and let them compete on leaderboards while building daily streaks. By integrating it directly into Reddit through Devvit, we could create a seamless social experience where players can share their results and discuss strategies in the comments.
What it does
Daily Guess Who is an interactive daily puzzle game that challenges players to identify a mystery character using progressive hints. Here's how it works:
- Daily Challenge: Every day features a new mystery character from movies, games, books, history, or mythology
- Progressive Hints: Players get 6 attempts with increasingly revealing clues (emoji, description, category, quote, universe, giveaway)
- Scoring System: Points are awarded based on speed and number of guesses, with time bonuses for quick solvers
- Streak Tracking: Build daily streaks by playing consecutively - miss a day and start over!
- Dual Leaderboards: Compete on both daily and weekly rankings with other Reddit users
- Achievement System: Unlock 15+ achievements for speed, accuracy, streaks, and rankings
- Character Archive: Practice mode with sample characters across three difficulty levels (Easy, Medium, Hard)
- Community Submission: Players can submit their own characters for future daily challenges
- Moderator Tools: Subreddit mods can review submissions, approve characters, and manage game settings
The game features sound effects, smooth animations, and a mobile-first design optimized for Reddit's user base.
How we built it
Technology Stack:
- Frontend: React 19 with TypeScript for type safety
- Styling: Tailwind CSS 4 for responsive, mobile-first design
- Backend: Express.js server with Devvit's Node.js runtime
- Database: Redis for persistent storage (game states, leaderboards, streaks)
- Build System: Vite for fast development and optimized production builds
- Platform: Devvit Web framework for Reddit integration
Architecture: src/ ├── client/ # React frontend │ ├── game/ # Game screens (Play, Leaderboard, Archive, etc.) │ ├── hooks/ # Custom React hooks (useGame, useCounter) │ └── splash/ # Splash screen component ├── server/ # Express backend │ ├── core/ # Business logic (game_logic, storage, post) │ └── index.ts # API endpoints (/api/game/, /api/mod/) └── shared/ # Shared TypeScript types └── types/ # Game and API type definitions
Key Implementation Details:
- Game Logic: Implemented Levenshtein distance algorithm for fuzzy matching, allowing partial credit for close guesses
- Scoring Formula: $\text{Score} = \max(0, 1000 - 100 \times (\text{attempts} - 1) + \text{timeBonus})$
- Streak System: Tracks consecutive days played with automatic reset on missed days
- Weekly Leaderboard: Monday-based reset system with best score per user tracking
- Sound Effects: Web Audio API for dynamic correct/wrong guess feedback
- Animations: CSS keyframes for smooth transitions (fade-in, slide-up, bounce, shake)
- State Management: Custom React hooks for game state synchronization with backend
Challenges we ran into
1. Build Timing Issues
The concurrent build process (client + server + devvit) sometimes caused Devvit to attempt reading the server bundle before compilation completed. Solution: Sequential initial build followed by concurrent watch mode.
2. Levenshtein Distance Performance Calculating string similarity for every guess required optimization. We implemented a dynamic programming approach with early termination for obvious mismatches, reducing computation time by ~60%.
3. Streak Persistence Ensuring streaks accurately tracked consecutive days across time zones was tricky. We standardized on UTC date keys and implemented server-side validation to prevent client-side manipulation.
4. Mobile Responsiveness
Reddit's webview has specific constraints. We adopted a mobile-first approach with careful testing on various screen sizes, using max-w-md containers and bottom navigation to avoid overlap with Reddit's UI.
5. Redis Data Structure Design Balancing between normalized data (separate keys) and denormalized data (JSON blobs) for performance. We settled on a hybrid approach:
- Game states: Individual keys per user/date
- Leaderboards: Single JSON array per period
- Streaks: Separate keys with metadata
6. Achievement Calculation Computing achievements required rank information, but ranks change as more players complete the challenge. We implemented a two-pass system: initial rank estimation, then final rank after leaderboard insertion.
Accomplishments that we're proud of
✨ Seamless Reddit Integration: The game feels native to Reddit, with automatic post creation and moderator tools
🎮 Engaging Gameplay Loop: The progressive hint system creates a perfect difficulty curve - challenging but never frustrating
📊 Robust Leaderboard System: Dual daily/weekly rankings with automatic resets and achievement tracking
🔥 Streak Motivation: The streak counter creates genuine engagement and daily return visits
🎨 Polished UI/UX: Smooth animations, sound effects, and mobile-optimized design rival standalone apps
🏗️ Scalable Architecture: Clean separation of concerns with TypeScript ensuring type safety across the stack
📚 Practice Mode: The archive feature lets new players learn without pressure, lowering the barrier to entry
🛡️ Moderation Tools: Empowering community moderators to curate content maintains quality
What we learned
Technical Learnings:
- Devvit's serverless architecture requires careful state management - no long-running processes
- Redis operations must be atomic; we learned to use transactions for consistency
- React 19's concurrent features improved our animation performance significantly
- Tailwind CSS 4's new features (container queries, dynamic variants) simplified responsive design
Game Design Insights:
- Progressive difficulty is key - players need to feel smart, not stumped
- Social features (leaderboards, sharing) drive engagement more than solo gameplay
- Daily limits create anticipation and prevent burnout
- Practice modes are essential for player retention
Community Management:
- User-generated content needs moderation tools from day one
- Clear feedback (animations, sounds) reduces confusion and support requests
- Mobile-first isn't optional - 70%+ of Reddit users are on mobile
What's next for Daily Guess Who
Short-term (Next Month):
- 🌍 Multi-language Support: Expand to non-English speaking communities
- 🎯 Hint Customization: Let moderators adjust hint difficulty per subreddit
- 📱 Push Notifications: Remind players when the daily challenge resets
- 🏆 Monthly Leaderboards: Add longer-term competition alongside daily/weekly
Medium-term (3-6 Months):
- 👥 Multiplayer Mode: Head-to-head guessing battles with friends
- 🎨 Custom Themes: Let subreddits customize colors and branding
- 📊 Advanced Stats: Personal analytics (average solve time, favorite categories, etc.)
- 🎁 Reddit Awards Integration: Special badges for top performers
Long-term Vision:
- 🌐 Cross-Subreddit Tournaments: Global competitions across multiple communities
- 🤖 AI-Generated Characters: Procedurally generated challenges for infinite replayability
- 📚 Educational Mode: Partner with educational subreddits for learning-focused characters
- 🎮 Game Variants: Themed versions (Movies Only, History Only, etc.)
Community Features:
- 💬 Discussion Threads: Auto-generated daily discussion posts
- 🏅 Hall of Fame: Showcase legendary players and memorable challenges
- 🎪 Special Events: Holiday-themed characters and limited-time challenges
- 🤝 Creator Spotlight: Highlight community members who submit great characters
Built with ❤️ for the Reddit community using Devvit
Built With
- devvit
- express.js
- react
- redis
- tailwind
- vite
Log in or sign up for Devpost to join the conversation.