output.mp4
- Ensure you have Node.js (v20+) installed
- Install PNPM:
npm install -g pnpm - Install dependencies:
pnpm install - Update /etc/hosts
...
127.0.0.1 localhost
::1 localhost
...
+ 127.0.0.1 client.breakout.local
+ 127.0.0.1 server.breakout.localBecause this application shares the cookie between the client and server app, it is probably easier if you just do the whole local dev environment with docker compose, with caddy (and redis) setup already.
- Install Docker
- Install mkcert for trusted local HTTPS:
- macOS:
brew install mkcert - Linux (Debian/Ubuntu):
sudo apt install mkcert - Linux (Arch):
sudo pacman -S mkcert
- macOS:
- Generate and trust local SSL certificates:
./scripts/setup-local-ssl.sh
- Restart your browser (required for the new CA to be recognized)
- Start the development environment:
docker compose up -d
- Visit https://client.breakout.local
Test on mobile devices via your Tailscale network with valid HTTPS certificates and custom DNS names. Uses Tailscale Docker containers as sidecars.
Generate a reusable auth key at https://login.tailscale.com/admin/settings/keys
- Check "Reusable" (allows both containers to use the same key)
- Check "Ephemeral" (auto-cleanup when containers stop)
Add the auth key to your .env file:
TS_AUTHKEY=tskey-auth-xxxxx
TAILSCALE_DOMAIN=tail1234.ts.net # Optional: auto-detected if tailscale is running locallyThen run:
./scripts/run-docker-tailscale.shThe script will also prompt for the key if not found in .env or environment.
This will:
- Start Tailscale sidecar containers for client and server
- Each container gets its own Tailscale identity and HTTPS certificate
- Follow Docker logs (Ctrl+C to stop)
Access from your mobile device (connected to Tailscale):
- Client:
https://breakout-client.<your-tailnet>.ts.net - Server:
https://breakout-server.<your-tailnet>.ts.net
The QR code will automatically use the correct Tailscale URL.
Press Ctrl+C in the terminal - the script will automatically stop all containers.
apps/: Application-specific projectspackages/: Shared libraries and utilities
- Room creation with Redis persistence
- User identification with cookies
- Random name generation with customization
- Real-time participant tracking
- Host view of attendees
- Group configuration (size/count modes)
- Real-time group distribution preview
- Group assignment with shuffle
- Real-time notifications
- Group state persistence
- Repeat minimization algorithm
- Late-joining participant handling
- Enhanced group management features
For detailed task tracking and future improvements, see docs/todos.md