Multiplayer live-coding jam booth: shared Strudel patterns, timed rounds, and an AI DJ that critiques and scores the drop.
No auth — pick a nickname, create a room, share the link.
- Shared pattern editor — live-sync code across the room; ⌘/Ctrl+Enter evals for everyone
- Local Strudel playback — server syncs code/transport; audio runs in each browser
- Booth tools — sounds picker + API reference overlay
- Export / Console — render WAV, download/copy pattern, Strudel logger
- Rounds + scoreboard — host starts a timed challenge; crew scores update live
- AI DJ Sync — streamed chat replies; tools to search booth sounds + Strudel reference before suggesting patterns (when AI is configured)
| Piece | Tech |
|---|---|
| Web | TanStack Start + Bun (apps/web) |
| Realtime + AI API | Bun.serve WebSocket + HTTP (apps/server) |
| Shared protocol | Zod schemas (packages/shared) |
| Audio | @strudel/web |
| AI | Vercel AI SDK + AI Gateway |
cp .env.example .env
bun installSet AI_GATEWAY_API_KEY in .env for DJ chat/scoring. Collab + audio work without it.
# from repo root — web :5173 and server :3001
bun run devOr separately:
bun run dev:server
bun run dev:webOpen http://localhost:5173, pick a nickname, create a room, share the link.
- Host clicks Start round — timed challenge appears.
- Anyone edits the shared pattern; ⌘/Ctrl+Enter evals for the whole room.
- Host ends the round (or timer fires) — DJ scores via tools when AI is configured.
- Chat the DJ with
@dj …anytime.
| Variable | Default | Purpose |
|---|---|---|
SERVER_PORT |
3001 |
Bun API/WS port |
CORS_ORIGIN |
http://localhost:5173 |
CORS allow origin |
VITE_WS_URL |
ws://localhost:3001 |
Browser WebSocket |
VITE_API_URL |
http://localhost:3001 |
Browser HTTP API |
AI_GATEWAY_API_KEY |
— | Vercel AI Gateway |
AI_MODEL |
anthropic/claude-sonnet-4.5 |
Gateway model id |
Private / unspecified — add a license if you open-source this.