Most online UNO locks you into one ruleset. Custom UNO is a browser multiplayer game where the host configures house rules at room creation — stacking, UNO-call penalties, draw behavior, deal size, single-round vs target-score, and more — then shares a 6-character room code for 2–4 players.
I wanted a friends-only UNO night that felt fair and flexible: no accounts, no matchmaking, just a link and the rules we actually play by. The hard part wasn’t the UI — it was making sure nobody could peek at the deck, and that a dropped tab didn’t ruin the game.
Host-configurable house rules — toggle stacking, +2/+4 chains, draw-until-playable, force-play, UNO penalties, and scoring mode before the first card is dealt.
Cheat-proof multiplayer — server-authoritative game engine; hands and the deck never leave the server.
Reconnect-friendly — rejoin your exact seat after a disconnect, with a grace period and auto-pass so games keep moving.
Polished feel — hand-drawn “groovy” card art, parallax landing page, animated card flights, turn timer, and a custom Web Audio sound system with mute + reduced-motion support.
Pure TypeScript game engine (deck, rules, turn resolution) shared between client and server, covered by Vitest unit tests.
Standalone Node WebSocket server validates every action with Zod before mutating state.
Next.js 16 + React 19 frontend with Zustand for the client view of authoritative server state.
Tailwind CSS v4 with a tight design system — Vodka Sans + Switzer, a fixed RGBY palette, card-matched corner radii.
Desktop-first for now (the table isn’t mobile-responsive yet). Room state lives in server memory — player reconnects are handled; a rare server restart would drop an in-progress game. No accounts, chat, or spectators — by design, for a small private friends experience.
Live demo: http://uno-bay.vercel.app/
Built with