Categories.LIVE: real-time multiplayer Scattergories, graded by an LLM
Categories.LIVE is a real-time multiplayer take on Scattergories — players race to come up with answers to category prompts, all starting with the same letter, and an LLM scores everyone’s answers at the end of the round.

Features
- Real-time multiplayer — Socket.IO over WebSocket with rooms, per-room chat, host controls, and live player sync.
- LLM-graded answers — GPT scores submissions for fit and creativity, removing the need for a human moderator.
- Solo + multiplayer modes — start a single-player round in seconds or create/join a public room.
- Bootswatch sketchy theme — hand-drawn, dusty-maroon vibe that’s stuck around through every rewrite.
Architecture
A Turborepo monorepo with two apps:
- Web client (
apps/web) — React Router v7 with SSR, Vite, and Tailwind alongside Bootstrap 5 + Bootswatch sketchy. Zustand for game state, Socket.IO client for the wire. - Game server (
apps/server) — Node.js + Socket.IO with a state-machine driving room lifecycle (lobby → starting → in-progress → scoring → results). Pluggable storage (in-memory or DynamoDB) and an SQS adapter for horizontal scaling. OpenAI handles answer scoring.
Both apps deploy to Fly.io (categories-web and categories-api) behind Cloudflare-managed DNS.
Tech Stack
- Frontend: React Router v7, TypeScript, Vite, Bootstrap 5, Bootswatch sketchy, Zustand
- Backend: Node.js, Socket.IO, OpenAI API, AWS DynamoDB / SQS / SNS
- Infra: Turborepo, pnpm workspaces, Docker, Fly.io, Cloudflare DNS
Links
- 🌐 Play live →
- 💻 GitHub →