A Kahoot-style, turn-based multiplayer word game. Players place letter/number
tiles onto a shared board; on their turn, a player may instead spend tiles
already on the board to find a valid title from the active category (movies
in v1) for points. The category system is pluggable — see
packages/shared/src/types/category-plugin.types.ts and
apps/api/src/categories/movies for the reference implementation.
apps/web— Next.js 16 / React 19 frontend (shadcn/ui, react-hook-form, zod, zustand)apps/api— NestJS backend (Prisma/Postgres, Socket.IO), run directly from TypeScript via Bun (no separate build step)packages/shared— Zod schemas, types, enums, and constants shared by both appspackages/ui— shared shadcn/ui component library
- Bun
>=1.2 - A local PostgreSQL instance. Create a database once:
createdb bee_dev
bun install
# apps/api needs a DATABASE_URL — copy and adjust if your Postgres
# username/password/port differ from the default (postgres/password/5432)
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.env.local
bun --cwd apps/api prisma migrate dev
bun --cwd apps/api prisma db seed # seeds ~10 fixture movies for local devbun run dev # starts apps/web on :3000 and apps/api on :4000 via turboprisma db seed only loads small dev fixtures. To import your own dataset
(CSV or JSON with title + releaseYear columns/fields), re-runnable at any
time:
bun run --cwd apps/api movies:import -- --file ./my-movies.csvbunx shadcn@latest add <component> -c apps/webThis places components in packages/ui/src/components. Import them from the
ui package:
import { Button } from "@workspace/ui/components/button"