Inspiration: The inspiration for Common Frequency came from looking at standard multiplayer party games and asking: Why do these have to end? Traditional games require coordinating schedules, waiting in lobbies, and playing in isolated silos. We wanted to take the core mechanics of a hidden-spectrum party game and blow it up to the scale of a social media feed. We were inspired by the asynchronous, always-on nature of platforms like Reddit, where anyone can drop in, participate in a global consensus, and leave their mark on a persistent system without needing a dedicated host.
What it does: Common Frequency is a massive, always-on social experiment. It transforms the mechanics of hidden spectrum guessing into a persistent, global feed. Without the need for lobbies, any player can step up as the "Psychic" to submit a concept spectrum (EX: "Hot to Cold"), a single clue, and a hidden target value to a global queue.The rest of the internet then tunes their dials to guess the exact location of that target. Once a guess is locked in, the true target is revealed alongside the global average of everyone else's guesses. Players score points based on their accuracy, while the original Psychic scores points based on how well the global community understood their clue.
How we built it: We started by referencing an open-source React and TypeScript clone of the base mechanics, but we had to fundamentally re-architect it from a local-state, synchronous lobby system into a global client-server model.
Frontend: Built with React, TypeScript, and Tailwind CSS. We redesigned the UI from a private-room aesthetic into a public, voting-card layout (similar to a feed-based poll).
Backend: We implemented a Node.js and Express server connected to a persistent database to handle the global state.
State Management: Instead of real-time web sockets for a small room, we built a robust queueing system. The server operates on a continuous loop, cycling through submitted prompts and acting as the single source of truth for the active global prompt.
To ensure a fair and rewarding distribution of points based on radial dial accuracy, we implemented a continuous scoring algorithm utilizing an exponential decay function. Rather than using rigid "buckets" (e.g., 10 points for being within 5 degrees, 5 points for 10 degrees), the points smoothly decrease the further a guess is from the true target.
Here is how the scoring logic works: We start with the maximum possible points a player can earn for a perfect guess. We then calculate the exact distance on the dial between the player's guess and the true hidden target. Using that distance, we apply an exponential decay penalty to the maximum points, meaning the points drop off smoothly and continuously the further away you get.
We also built in a tuning constant that allows us to adjust how forgiving or strict the game is about those inaccuracies. By calculating the absolute distance, we ensure the point penalty is exactly the same whether a player overshoots or undershoots the target frequency.
Challenges we ran into: The biggest hurdle was migrating from a synchronous architecture to an asynchronous one. Ripping out the tight coupling of the lobby system meant we had to rewrite how the application handled game phases. In a lobby, the game waits for everyone to be ready; in Common Frequency, the game never stops. Handling database race conditions when hundreds of asynchronous guesses hit the global queue simultaneously required strict transaction management. Additionally, designing a UI that felt engaging for a solitary player contributing to a massive pool, rather than competing directly against a few friends, took multiple iterations.
Accomplishments that we're proud of: We are incredibly proud of successfully flipping the traditional multiplayer paradigm on its head. Taking a game designed for 4-8 people in a living room and scaling its logic to support thousands of asynchronous players on a global timeline was a major architectural win. The seamless transition between viewing a prompt, submitting a guess, and instantly seeing the global consensus statistics feels highly rewarding.
What we learned: We learned a tremendous amount about handling global state over time. Shifting from event-driven Socket.io lobbies to an API-driven, time-based queue forced us to think deeply about server efficiency, cron jobs, and database optimization. We also learned how crucial UI cues are when players lack the context of a live host; the interface itself had to clearly communicate the current phase of the global prompt without any human explanation.
What's next for Common Frequency: Moving forward, we want to expand the "Daily Puzzle" mechanics to include themed days and featured creators. We also plan to implement a more robust community moderation system for the prompt queue to ensure high-quality clues, and scale our live global leaderboard to support seasons and ranking tiers.
Built With
- asynchronous
- backend
- cron
- css3
- express.js
- git
- html5
- javascript
- mongodb
- node.js
- postgresql
- react
- rest-api
- tailwind
- typescript
- web-development
Log in or sign up for Devpost to join the conversation.