Files
chatty/templates/index.html
ComputerTech312 357ed5798e Major feature update: Add IRC-style chat, performance optimizations, and mobile support
🚀 New Features:
- Real-time IRC-style text chat with commands (/me, /clear, /help, etc.)
- Full mobile optimization with responsive design and touch controls
- Performance monitoring and adaptive video quality
- Configuration-driven settings with config.json

💬 Chat System:
- IRC-style formatting with timestamps and usernames
- Mobile full-screen chat overlay
- Join/leave notifications and system messages
- Message history with automatic cleanup
- Desktop side panel + mobile overlay sync

📱 Mobile Optimizations:
- Touch-friendly controls with emoji icons
- Progressive Web App meta tags
- Orientation change handling
- Mobile-optimized video constraints
- Dedicated mobile chat interface

 Performance Improvements:
- Adaptive video quality based on network conditions
- Video element pooling and efficient DOM operations
- Connection quality monitoring with visual indicators
- Enhanced peer connection management and cleanup
- SDP optimization for better codec preferences

🔧 Technical Changes:
- Renamed main.js to script.js for better organization
- Added comprehensive configuration system
- Fixed port mismatch (3232) and dynamic connection handling
- Improved ICE candidate routing and WebRTC stability
- Enhanced error handling and resource cleanup

🎨 UI/UX Improvements:
- Modern responsive design with light/dark themes
- Connection quality indicator in header
- Better button styling with icons and text
- Mobile-first responsive breakpoints
- Smooth animations and touch feedback
2025-10-02 20:01:03 +01:00

128 lines
5.5 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, viewport-fit=cover">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="mobile-web-app-capable" content="yes">
<meta name="theme-color" content="#212529">
<title>IRC VideoChat - Terminal</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='styles.css') }}">
</head>
<body>
<!-- Username Modal -->
<div id="usernameModal" class="modal">
<div class="modal-content">
<div class="modal-header">
<h2>IRC Video Chat Server</h2>
<p>* Connecting to #videochat...</p>
<p>* Enter your nickname to join</p>
</div>
<form id="usernameForm">
<div class="input-group">
<input type="text" id="usernameInput" placeholder="your_nickname" maxlength="20" required>
</div>
<button type="submit" id="joinButton">
Join Channel
</button>
</form>
</div>
</div>
<!-- Main Chat Interface -->
<div id="chatInterface" class="hidden">
<header class="chat-header">
<div class="header-left">
<h1>#videochat</h1>
<span id="participantCount">1 user</span>
<span id="connectionQuality" class="connection-quality" title="Connection quality">
<span class="quality-indicator good"></span>
<span class="quality-text">Good</span>
</span>
</div>
<div class="header-right">
<button id="themeToggle" class="header-btn" title="Toggle theme">
🌙
</button>
<button id="toggleSelfViewButton" class="header-btn" title="Toggle self view">
View
</button>
</div>
</header>
<main class="chat-main">
<div class="main-content">
<div id="remoteVideos" class="video-grid" aria-label="Remote Videos"></div>
<!-- Self View (Initially hidden) -->
<div id="selfViewContainer" class="self-view hidden">
<video id="selfVideo" autoplay muted></video>
<div class="self-view-label">
<span id="selfViewUsername">[SELF]</span>
</div>
</div>
</div>
<!-- IRC-style Chat Panel -->
<div id="chatPanel" class="chat-panel">
<div class="chat-header-bar">
<span class="chat-title">[#videochat]</span>
<button id="toggleChatButton" class="chat-toggle-btn" title="Toggle chat">
<span>💬</span>
</button>
</div>
<div class="chat-messages" id="chatMessages">
<div class="system-message">* Now talking in #videochat</div>
<div class="system-message">* Topic is: Welcome to the video chat room</div>
</div>
<div class="chat-input-container">
<span class="chat-prompt">&gt;</span>
<input type="text" id="chatInput" class="chat-input" placeholder="Type a message..." maxlength="500">
<button id="sendButton" class="send-button">Send</button>
</div>
</div>
</main>
<footer class="chat-controls">
<button id="muteButton" class="control-btn mute-btn">
<span class="btn-icon">🎤</span>
<span class="btn-text">mic</span>
</button>
<button id="videoButton" class="control-btn video-btn">
<span class="btn-icon">📹</span>
<span class="btn-text">cam</span>
</button>
<button id="mobileChatToggle" class="control-btn chat-btn mobile-only">
<span class="btn-icon">💬</span>
<span class="btn-text">chat</span>
</button>
<button id="hangupButton" class="control-btn hangup-btn">
<span class="btn-icon">📞</span>
<span class="btn-text">disconnect</span>
</button>
</footer>
<!-- Mobile Chat Overlay -->
<div id="mobileChatOverlay" class="mobile-chat-overlay hidden">
<div class="mobile-chat-header">
<h3>#videochat</h3>
<button id="closeMobileChatButton" class="close-chat-btn"></button>
</div>
<div class="mobile-chat-messages" id="mobileChatMessages"></div>
<div class="mobile-chat-input-container">
<input type="text" id="mobileChatInput" class="mobile-chat-input" placeholder="Type a message..." maxlength="500">
<button id="mobileSendButton" class="mobile-send-button">Send</button>
</div>
</div>
</div>
<!-- Hidden local video for WebRTC -->
<video id="localVideo" autoplay muted style="display: none;"></video>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.7.2/socket.io.js"></script>
<script src="{{ url_for('static', filename='script.js') }}"></script>
</body>
</html>