Synesthesia is a real-time, crowd-controlled music queue. Hosts create a room, guests join via link or QR code, and voting decides what plays next. The queue updates instantly for everyone in the room.
- Live rooms with shared queues
- Add songs and vote (up/down)
- Real-time ordering driven by votes
- Host-controlled playback (Spotify Connect, YouTube, etc.)
- Embeddable views (planned)
- Next.js (App Router)
- TypeScript
- Tailwind CSS + shadcn/ui
- Convex (real-time backend)
# Install dependencies
pnpm install
# Start Convex (first run will prompt login and create .env.local)
pnpm convex:dev
# Run the Next.js dev server
pnpm devCopy .env.example to .env.local if you need to pre-create the file. Convex will populate CONVEX_DEPLOYMENT and NEXT_PUBLIC_CONVEX_URL during setup.
YouTube playback uses iframe embeds directly in the room view.
- Add songs by pasting a YouTube URL or ID.
- The top YouTube track in the queue is embedded for playback.
Search hits GET /api/youtube/search?q=... and returns up to 8 results with
id, title, channel, and thumbnailUrl. The route tries the YouTube Data
API first, then falls back to YT Music if needed.
Primary path (YouTube Data API):
- Requires
YOUTUBE_API_KEYin.env.local. - Uses the YouTube Search API with
videoEmbeddable=trueand safe search. - If the API call fails, the request can fall back to YT Music.
Fallback path (YT Music via ytmusicapi):
- Requires
YTMUSIC_HEADERS_PATHto a headers JSON file. - Runs
scripts/ytmusic_search.pywithpython(override viaYTMUSIC_PYTHON). - Calls
ytmusicapisearch withfilter="songs"andlimit=8.
YT Music setup:
- Install the Python dependency:
pip install -r scripts/requirements.txt. - Generate a headers JSON file using
ytmusicapifrom a logged-in browser session (see ytmusicapi docs for the exact command). - Set
YTMUSIC_HEADERS_PATHto the headers JSON file path. - Optional: set
YTMUSIC_PYTHONif your Python binary is notpython.
app/Next.js App Router UIconvex/Convex schema + server functions.env.exampleenvironment template
pnpm devNext.js dev serverpnpm buildProduction buildpnpm startStart production serverpnpm convex:devRun Convex dev
- The Convex functions are minimal scaffolding and safe to extend.
- Replace placeholder UI with room, queue, and host dashboards as needed.
TBD