Multiplayer music guessing game inspired by songl.io / skribbl.io:
- Players join a shared room code link
- Host picks a category
- Each player queues songs from a search bar
- Game cycles through each player’s queued songs
- 30–60 second preview snippet plays each round (currently 60s)
- Guess title quickly for higher points
- Hints reveal characters over time
- Client: React + TypeScript (Vite) in
client/ - Server: Express + Socket.IO in
server/ - Song search + previews: iTunes Search API (
/api/search)
- Install dependencies:
npm installnpm --prefix server installnpm --prefix client install
- Start app:
npm run dev
- Open the client URL from Vite output (typically
http://localhost:5173)
npm run dev— run server + client togethernpm run build— build clientnpm run start— start server only
- Build and start both services:
docker compose up --build -d
- Open app:
- Client:
http://localhost:5173 - Server:
http://localhost:3001
- Client:
- Stop containers:
docker compose down
- By default, the client image is built with
VITE_API_BASEempty (same-origin). - Nginx proxies
/apiand/socket.ioto theserverservice, so links work across devices withoutlocalhostissues. - Override it at build time if needed:
VITE_API_BASE=https://sampled.pitcocks.org docker compose up --build -d
docker-compose.ymlis configured to build from this repo on GitHub instead of local paths.- Optional: set
GIT_REFto deploy another branch/tag/commit:GIT_REF=main docker compose up --build -d
- Make sure old client images are removed so stale
VITE_API_BASE=http://localhost:3001is not reused. - Rebuild cleanly:
docker compose downdocker image rm sampled-client sampled-server(ignore errors if missing)docker compose build --no-cachedocker compose up -d
- This MVP uses iTunes preview audio clips for zero-auth setup.
- If you want Spotify/Apple Music accounts and full catalog behavior, the server can be extended with OAuth and provider APIs.
- Room/game state is held in-memory (good for local + prototype use).