Back to projects

Chifoumi

Rock, paper, scissors at a distance — loser does the dishes

Chifoumi screenshot

Overview

Chifoumi is remote rock-paper-scissors for the small decisions of everyday life — who does the dishes, who books the restaurant. You create a duel with a named stake and a best-of-1, 3 or 5 format, send the link, and each player picks on their own phone: countdown, simultaneous reveal, ties replayed, rematch in one tap. No accounts and no database — every duel lives in memory and expires after an hour of inactivity.

Why I Built This

With my friends, every decision — big or small — gets settled by a chifoumi. The only thing missing was a way to keep that ritual alive when we're not in the same room, without the over-text version where whoever announces second always wins.

Features

  • Duel by Link — Create a duel with a written stake ("loser does the dishes") and a best-of-1, 3 or 5 format, then share the URL; your opponent joins from their phone with just a name — no account, no app, no email
  • Server-Authoritative Reveal — A choice never leaves the server before both players have locked theirs in; until then the opponent only sees a "has chosen" flag, so peeking is impossible by design — then both screens reveal simultaneously and ties replay the round
  • Refresh-Proof Seats — A stable browser token reattaches you to your seat after a page refresh or a dropped connection, and your opponent sees your live connected/disconnected status over the WebSocket
  • Rematch in One Tap — Same room, same players, same stake: scores reset and the next duel starts instantly, for when best-of-3 wasn't conclusive enough
  • Nothing Stored, Pure Logic — No database: rooms live in memory and expire after an hour of inactivity, while the whole game engine is a pure, I/O-free module fully covered by node --test

Tech Stack

Frontend

Vanilla JS HTML/CSS Zero framework

Backend

Node 22 Fastify 5 WebSocket node --test

Infrastructure

Docker Compose Caddy GitHub Actions