- Add convertChess960Fen() function to convert Chess960 file-based
castling notation (e.g., "HAha") to standard notation ("KQkq")
- chess.js doesn't support Chess960 FEN natively, so we convert before
loading
- Apply conversion in all places where FEN is loaded: waiting state,
playing state, and opponent move handler
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Nakama Dockerfile to build custom image with chess modules
- Update docker-compose.prod.yml to use custom Nakama image with --runtime.js_entrypoint
- Fix chat WebSocket to use wss:// on HTTPS pages (was hardcoded ws://)
- Add SSL configuration to nginx port 8088 for HLS/LLHLS streaming
- Add Nakama build step to CI workflow
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Profile page: Add cache: 'no-store' to always fetch fresh balance data
- Profile page: Update balance immediately after tip using transaction result
to avoid race conditions where DB hasn't committed yet
- Profile page: Reload profile after 500ms delay for data consistency
- UbercoinTipModal: Clarify "Your balance" to avoid confusion with recipient's
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- CSP: Allow WebSocket/HTTP connections to any domain (for production)
- Nakama: Detect host/SSL from browser location instead of hardcoded localhost
- WebSocket: Dynamic protocol/host detection for stream and watch sync
- HLS/LLHLS/WebRTC: Dynamic URLs in live page and stream components
- RTMP/SRT: Show actual domain in my-realms settings page
- Forums: Use numeric forum ID for banner/title-color API calls
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>