Skip to content

codedbyasim/snoogories

Repository files navigation

SnooGories: The Daily Reddit-Native Word Game

💡 Inspiration

The inspiration for SnooGories comes from the timeless party game Scattergories, reimagined for the digital age of Reddit. We realized that Reddit, with its text-centric culture and thousands of diverse communities, was the perfect playground for a word game. We wanted to build something that felt distinctly "Reddit-Native"—not just an app hosted on the platform, but an experience that deeply integrates with its culture. Our goal was to turn a solitary scrolling session into a competitive, global event where users connect through a shared mental sprint.

🚀 What it does

SnooGories is a massively multiplayer word categorization RPG that runs on a synchronized global heartbeat.

  • Global 4-Hour Cycles: Every 4 hours, a new "Arena" opens worldwide with a unique deterministic seed (e.g., Letter: "M", Categories: "Pizza Topping", "Tech Brand", "Subreddit").
  • The 60-Second Sprint: Players race against the clock to input unique valid answers for each category.
  • Daily Themes: A dynamic "Theme of the Day" system (e.g., Sci-Fi Friday) alters the meta, rewarding players for finding answers that fit the day’s vibe.
  • Deep Progression: It features a full RPG progression system where players earn XP, level up, and unlock over 50 unique badges ranging from "Night Owl" to "Zoologist".
  • Custom Arenas: Users can generate private game lobbies with unique codes, allowing them to challenge friends or specific subreddit communities directly.

🧮 Smart Scoring Logic

We didn't want a simple "1 point per word" system. We built a weighted scoring engine that rewards speed, accuracy, and thematic resonance. The total score ( S_{total} ) for a single game round is calculated as follows:

$$ S*{total} = \left( \sum*{i=1}^{n} (V*{base} + \delta*{sub}) \times M*{theme} \right) + T*{rem} $$

Where:

  • ( n ) is the number of valid words submitted.
  • ( V_{base} ) is the base value of a valid word (100 XP).
  • ( \delta_{sub} ) is the Subreddit Bonus (50 XP if the category is "Subreddit", else 0).
  • ( M_{theme} ) is the Theme Multiplier (2.0 if the word semantically matches the Daily Theme, else 1.0).
  • ( T_{rem} ) is the Time Bonus, equal to the seconds remaining on the clock (1 XP/sec).

🛠️ How we built it

We leveraged the Reddit Devvit Platform to its absolute limits, combining a modern React frontend with a high-performance Redis backend.

Component Technology Role in Architecture
Core Platform Devvit Native Reddit integration, Context, and Hosting.
Frontend UI React + TailwindCSS "Three-Layer" Mobile-First Architecture for seamless scrolling.
State Management Redis Atomic transactions for scores, profiles, and leaderboards.
Validation Engine WikiData API Validation of proper nouns (Brands, Cities, People).
Semantic Check Datamuse API Dictionary validation and semantic association checking.
Motion/FX Framer Motion High-fidelity animations (confetti, score ticking).

🧠 Technical Crown Jewel: The "Smart Trust" Engine

The biggest challenge in a digital word game is validation: Is a "Tomato" a fruit? Instead of relying on a static, limited dictionary, we engineered a multi-stage "Smart Trust" Validation Pipeline:

  1. Heuristic Filter: Instant rejection of gibberish patterns and character mismatches.
  2. Entity Resolution (WikiData): We query the knowledge graph to validate proper nouns. If the category is "Tech Brand", the system confirms if the input exists as an instance of a technology company.
  3. Semantic Association (Datamuse): For abstract categories (e.g., "Sharp Object"), we check if the input has a strong semantic relationship (hyponym/hypernym) to the category keyword.
  4. Forgiveness Protocol: To handle API latency, we implemented a 600ms "forgiveness window." If external validators time out, we default to trusting the user rather than punishing them for network lag.

🚧 Challenges we ran into

  • Redis Race Conditions: Handling global leaderboards where thousands of users might submit scores simultaneously required careful implementation of Atomic Redis Transactions. We had to ensure that rank calculations and XP updates were completely linearizable.
  • The "Double Scroll": The Reddit mobile app puts webviews inside a scrollable container. Creating a game that requires its own internal scrolling without triggering the parent app's scroll was a UX nightmare. We solved this by architecting a fixed-position viewport with specific touch-action CSS properties.
  • Subjectivity: Tuning the API calls to strike a balance between strictness and fun was difficult. Early versions were too harsh (rejecting "Coke" for "Drink" because the official entity is "Coca-Cola"). We had to refine our query logic to accept aliases and common usage.

🏆 Accomplishments that we're proud of

  • Complex Badge System: Successfully implemented 40+ unique badges with complex tracking criteria (e.g., Streaks, Time-of-day play).
  • Zero-Latency Feel: Despite heavy API usage, the UI remains responsive thanks to optimistic UI updates.
  • Theme Integration: The daily theme system makes the game feel "alive" and different every single day.
  • Custom Challenge Mode: Built a robust system for private lobbies that includes deep-linking and separate persistence layers.

📚 What we learned

  • Semantic Nuance: We learned that language is incredibly messy. "Apple" is a fruit, a tech brand, and a record label. Context is everything using the validation APIs.
  • Atomic Design: Breaking the UI into atomic, reusable tokens (buttons, cards, badges) early on saved us dozens of hours when we did a mid-project redesign.
  • Community is Content: The "Subreddit" category turned out to be the most fun feature, proving that leaning into the platform's native culture is always a win.

🔮 What's next

  • Live Multiplayer: Implementing a real-time WebSocket-based "Battle Royale" mode.
  • Moderator Packs: Allowing subreddit mods to create custom word packs specific to their community niche.
  • Hivemind Audit: A crowdsourced system where players can vote on disputed words to train our validation engine.

About

SnooGories: A daily, massively multiplayer word arena on Reddit. Battle through 4-hour cycles with smart API-driven validation and RPG-lite progression. Built for the Reddit Dev Platform.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages