- Dockerfile builds with --features websocket and sets VITE_TRANSPORT=websocket
- Server default feature changed from socketio to websocket
- Binary canvas transfer (1MB) instead of Socket.IO JSON (~3-4MB per connection)
- Significantly reduces memory pressure under concurrent connections