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.

Categories.LIVE

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:

  1. 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.
  2. 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
×