Fixed three major issues with the Local Transcription application and multi-user server setup.
---
## Issue 1: Python App Server Sync Not Working ✅ FIXED
### Problem
The desktop application had server sync configuration in settings but wasn't actually using it. The `ServerSyncClient` was never instantiated or started.
1. Added import for `ServerSyncClient` from `client.server_sync`
2. Added `self.server_sync_client` attribute to track sync client
3. Added `_start_server_sync()` method to initialize and start the client
4. Modified `_start_transcription()` to start server sync if enabled
5. Modified `_stop_transcription()` to stop server sync when stopping
6. Modified `_process_audio_chunk()` to send transcriptions to server
7. Modified `_on_settings_saved()` to restart server sync if settings changed
**How it works now:**
1. User enables "Server Sync" in Settings
2. Enters Server URL, Room Name, and Passphrase
3. Starts transcription
4. App automatically starts `ServerSyncClient` in background
5. Each transcription is sent to both local web server AND remote multi-user server
6. When transcription stops, server sync client is cleanly shut down
**Testing:**
```bash
# Start Node.js server
cd server/nodejs
npm start
# In desktop app:
# Settings → Server Sync → Enable
# Server URL: http://localhost:3000/api/send
# Room: test-room
# Passphrase: testpass
# Start transcription
# Open browser to: http://localhost:3000/display?room=test-room
# Should see transcriptions appear in real-time
```
---
## Issue 2: Node.js Server Missing Room Generator ✅ FIXED
### Problem
The PHP server ([server/php/index.html](server/php/index.html)) had a nice UI with a "Generate New Room" button that created random room names and passphrases. The Node.js server landing page didn't have this feature.
1. Replaced static "Quick Start" section with dynamic room generator
2. Added "🎲 Generate New Room" button
3. Added JavaScript `generateRoom()` function that:
- Generates random room name (e.g., "swift-phoenix-1234")
- Generates 16-character random passphrase
- Builds Server URL for desktop app
- Builds Display URL for OBS
4. Added `copyText()` function for one-click copying
5. Shows all credentials in clickable boxes with visual feedback
**Features:**
- Click "Generate New Room" → instant room creation
- Click any credential box → copies to clipboard
- Green flash + tooltip confirms copy
- Clean, modern UI matching the PHP version
- No manual typing needed - just click and paste
**Result:**
Visit `http://localhost:3000` and you get a beautiful landing page with one-click room setup, just like the PHP version but better.
---
## Issue 3: GUI Shows "CPU" Even When Using CUDA ✅ FIXED
### Problem
The device label in the GUI was set once during initialization based on config, but never updated after the model was actually loaded. So even when logs showed "Using CUDA", the GUI still displayed "Device: CPU".
## Issue 4: Server Sync Performance - Major Lag ✅ FIXED
### Problem
Even though server sync was working after Fix #1, the shared display was **several seconds behind** the local transcription. Test script worked fast, but real usage was laggy.
### Root Causes
1.**Wrong URL format for Node.js** - Client sent `?action=send` parameter (PHP only)
2.**Serial HTTP requests** - Each message waited for previous one to complete