Skip to content
Benjamín Díaz
Back to projects
OsoParty

OsoParty

Multiplayer party games in the browser

Four browser party games for a room full of people, each on their own phone: trivia, word categories, drawing and hidden roles, with real-time multiplayer and content in English, Spanish and Brazilian Portuguese.

Created

  • TypeScript
  • React
  • Cloudflare Workers
  • Durable Objects
  • WebSockets
  • Vite
  • Game Dev
  • Web Audio
  • i18n

I built OsoParty around a simple setup: a group of people together, each with a phone. One person opens a room, shares a six-character code or invitation link, and everyone joins in their browser. There are no accounts to create or apps to install.

Play OsoParty

Open the live game and start a party

Four Games, One Room

The same party can move between four games:

  • CapyTrivia: choose topics and answer multiple-choice questions, then reveal who picked each answer.
  • LoroStop: fill categories using a shared starting letter, call Stop, and vote on the group's answers.
  • DibuPudú: take turns drawing a secret word while everyone else guesses. Faster correct guesses earn more points.
  • MichiSus: share clues, discuss who seems suspicious, and vote to find the hidden impostor without giving away the secret word.

The host can add a room password or hide the code while streaming. Party chat stays alongside the games, and Infinite mode lets the group vote on what to play next. A pack editor supports custom content, import and export, so a game night can use the group's own questions and words.

Shared Rules, Real-Time Rooms

My work spans the React, TypeScript and Vite client, the shared game engines, and the multiplayer service on Cloudflare Workers. Each party has its own Durable Object, with WebSockets connecting the players to that room.

The rules live in deterministic TypeScript packages that run in both the browser and the server. They do not read the DOM, open network connections, or own their own clocks. The application supplies those effects, keeping the rules testable without a browser and avoiding a separate implementation for each environment.

The server applies player actions and sends each person only their own view of the game. A secret role or unrevealed answer must stay off another player's connection, rather than simply being hidden in their interface. Drawing adds another real-time path: strokes need to reach the room while guesses, timers and scoring continue alongside them.

A Party in Three Languages

OsoParty supports English, Spanish and Brazilian Portuguese. Each player chooses their interface language, while the host separately chooses the language of questions and words. That distinction lets people share a room without forcing every phone to use the same interface.

Gameplay, drawings and chat stay in room memory instead of becoming a saved history. The device can remember a display name and a draft from the pack editor; those preferences are separate from the live game state.

Motion, Sound and Testing

The interface uses Motion with reduced-motion handling, canvas drawing, and Web Audio feedback. I authored the sound cues with Nielo SFX, connecting one of my creative tools to a playable project.

Vitest exercises the game rules, while Playwright covers multiplayer flows and axe checks accessibility. The engineering focus is keeping the shared state consistent across phones while protecting the information each player is supposed to keep secret.