The client's gameConfig always used DEFAULT_GAME_CONFIG (timerEnabled: true),
so the GameScreen never showed the infinity symbol or End Question button.
Now the client syncs timerEnabled from QUESTION_START and WELCOME messages
into its local gameConfig state.
Add a 'Question Timer' toggle to game settings that lets the host disable
the countdown timer. When disabled, questions show ∞ instead of a countdown,
the host gets an 'End Question' button to manually advance, and all correct
answers receive maximum points.
Also fix a bug where per-question time limits were ignored — the timer and
scoring always used the hardcoded 20-second default instead of each question's
individual timeLimit.
Client sends all files in a single request to /api/upload/batch,
server receives them all upfront via multer then processes OCR
sequentially. Eliminates network round-trips between each file.
Server: replace hard 503 rejection with a bounded queue (50 slots,
2min timeout) so requests wait for a processing slot instead of failing.
Client: upload files sequentially instead of via Promise.all, and
retry with exponential backoff on 503/504 responses.
- Host can kick players from lobby (removes from game, clears presenter if needed)
- Client can voluntarily leave game
- Fix browser-compatible base64 decoding for document upload (atob vs Buffer)