Ranking Your Friends is a local-first party game for a host and a group of friends.
- The host creates a game with players and questions.
- Each player opens a private player link and ranks the group.
- Each player sends back one short player code.
- The host imports those codes and opens a big-screen reveal.
There are no accounts, no backend, and no real-time sync. Shared state is packed into compact URL hashes and copied codes, with localStorage used as a host-side backup.
- Host-first setup flow with English and Dutch UI
- Local/offline-friendly sharing through player links and player codes
- Compact encoding to keep links and codes short
- Big-screen reveal mode with keyboard shortcuts for presenting
- Finalized no-show removal
- Automated node tests, TypeScript checks, and Playwright coverage
npm install
npm run devOpen the local Vite URL and create a game, or use the built-in demo/reveal flow.
npm run dev # local development server
npm run build # production bundle
npm run preview # preview built bundle
npm test # build + node test suite
npm run typecheck # TypeScript checks
npm run test:ui # Playwright browser tests
npm run verify # full local verification passIf this is your first Playwright run on the machine:
npx playwright install chromium- Add players and questions in Setup.
- Lock the game to generate a player link and backup game code.
- Send the player link to the group.
- Collect one player code at a time.
- Open the reveal link on the big screen.
- Open the player link.
- Pick your fixed player name.
- Rank everyone for each question.
- Copy the generated player code and send it back to the host.
Reveal mode is presentation-oriented. It moves through:
- Presenter prompt
- Question
- Ranking reveal
- Occasional subtotal checkpoints earlier in the game
- Finale intro
- Final standings and awards
Reveal keyboard shortcuts:
Right ArroworSpace: nextLeft ArroworBackspace: back
- README.md: project overview and setup
- docs/README.md: documentation index
- app.ts: app state, rendering, i18n, encoding
- game-logic.ts: scoring and reveal sequencing
- tests/: node and Playwright coverage
This app must be served from the built dist/ output. Serving repository source files directly will not execute the TypeScript entrypoint in the browser.
For GitHub Pages, the Vite base path must match the repository subpath:
import { defineConfig } from "vite";
export default defineConfig(({ mode }) => ({
base: mode === "production" ? "/rankingthefriends/" : "/",
}));The existing GitHub Actions workflow should build and publish dist/. If deploying manually:
- Run
npm run build. - Publish the contents of
dist/.
Start with docs/README.md. The docs directory includes product notes, architecture references, testing instructions, and roadmap documents.
As of March 23, 2026:
npm testpassesnpm run typecheckpassesnpm run test:uipasses