A multiplayer song guessing game where players compete to identify songs from 30-second Spotify previews.
- Multiplayer - Real-time lobbies with shareable game codes
- Daily Challenge - Same songs for everyone each day, compete on the leaderboard
- Battle Royale - 50 rounds, 3 lives, last player standing wins
- Solo Mode - Practice without friends (we've all been there)
- Hints - Stuck? Reveal letters to help guess, but it costs points
- Multiple Playlists - Decades, genres, festival lineups (Glastonbury 2023-2025, etc.)
- TanStack Start / React 19 / TypeScript
- Convex (real-time backend)
- Spotify Web API + Deezer fallback
- Tailwind CSS
- Node.js 18+ or Bun
- A Spotify Developer account
bun installInitialize Convex (creates deployment and sets up environment):
npx convex devThis will create a .env.local file with CONVEX_DEPLOYMENT and VITE_CONVEX_URL.
- Go to Spotify Developer Dashboard
- Create a new app
- Note your Client ID and Client Secret
- Set redirect URI to
http://localhost:3000(required but not used)
Add Spotify credentials to Convex (server-side):
npx convex env set SPOTIFY_CLIENT_ID your_client_id_here
npx convex env set SPOTIFY_CLIENT_SECRET your_client_secret_hereStart both the dev server and Convex:
# Terminal 1: Start Convex
npx convex dev
# Terminal 2: Start app
bun run devThe app will be available at http://localhost:3000.
CONVEX_DEPLOYMENT=your-deployment-name
VITE_CONVEX_URL=https://your-deployment.convex.cloudSet these using npx convex env set:
SPOTIFY_CLIENT_ID=your_spotify_client_id
SPOTIFY_CLIENT_SECRET=your_spotify_client_secretNote: Spotify credentials must be set in Convex, not in .env.local, as they're used server-side.
bun run buildbun run dev # Start dev server
bun run test # Run tests (69 tests, ~850ms)
bun run lint # Lint with oxlint
bun run lint:fix # Lint and auto-fixUses tsgo (native TypeScript compiler, experimental):
bunx tsgo --noEmit- Vitest - Test runner
- happy-dom - DOM environment (faster than jsdom)
- Testing Library - Component tests
- convex-test - Backend integration tests
- Create a Game: Click "Create Game" to generate a unique game code
- Join Lobby: Share the game code with friends who can join the lobby
- Start Game: Host starts the game when all players are ready
- Listen & Guess: Each round plays a 30-second preview - guess the artist and song title
- Scoring: Points decay over time (500 → 250), so faster answers score higher. Partial credit for getting just the artist or title.
- Win: Player with the most points after all rounds wins!
This project is open source for reference and learning, but I'm not accepting contributions at this time.



