Remove invalid connectionTimeout property from STOMP ClientOptions
- Removed connectionTimeout property which is not part of ClientOptions type - Connection timeout is already handled manually via connectionTimeoutRef
Resolve TypeScript build error in LeadManager component
- Fixed Chip icon prop type error by changing ReactNode to ReactElement - Removed unused imports and props - Fixed useMemo dependency warning by wrapping IdRend...
Update leads page with LeadManager component matching doc manager layout
- Created LeadManager component similar to DocManager with lead-specific fields - Updated /leads/page.tsx to match doc manager layout with gradient header - Add...
Auto-scroll chat to bottom on load and new messages
Track previous message count and scroll smoothly when new messages arrive; scroll immediately on initial load or when un-minimizing
Frontend WebSocket persistence - match backend timing and faster reconnect
Heartbeat: 4s -> 20s to match backend, reconnect delay: 5s -> 1s, add 30s connection timeout
Unified header design spanning both chat and softphone panels
REMOVED: Status bar from softphone (wifi, signal, time - unnecessary for web app) SHARED HEADER: Title bar now spans both softphone and chat when expanded LAY...
Optimize softphone to fit all content without scrolling at 680px height
CHATBOX HEIGHT: 550px -> 680px (optimal balance) PHONE DISPLAY: Reduced minHeight (100/75 -> 85/65), padding (14/16 -> 12/14) CALL CONTROLS: All 9 buttons - p...
Reduce ChatBox height to more comfortable 550px
Changed from 85% viewport (750-850px) to fixed 550px for better UX WebRTC call controls remain fully intact and functional
Add premium enterprise features - Analytics, CRM, AI Assistant, Advanced
ANALYTICS DASHBOARD - Real-time call metrics with interactive charts CRM INTEGRATION - Customer data, lifetime value, activity tracking AI ASSISTANT - Sentime...
Implement 100% enterprise VoIP desk phone features
Complete implementation of 100+ features matching Cisco 8800, Polycom VVX 600, Yealink T58A 7 Tabs: Dialpad, Speed Dial/BLF, History, Voicemail, Contacts, Queu...
Make softphone fully visible without scrolling - comprehensive compact layout
CHATBOX HEIGHT: - Changed from fixed 600px to 85% of viewport height - Uses Math.floor(window.innerHeight * 0.85) for responsive sizing - Provides much more ver...
Eliminate horizontal scrollbars and increase softphone visibility
LAYOUT FIXES: - Increase DOCKED_HEIGHT from 480px to 600px for better vertical space - Add explicit width constraints (minWidth, maxWidth) to SoftphonePanel roo...
Elevate softphone to enterprise-grade with premium features
ENTERPRISE FEATURES: - Call Recording with visual indicator and pulsing animation - Call Transfer functionality for seamless handoffs - Call Notes with expandab...
Add expandable softphone panel to ChatBox
- Add PhoneInTalk icon button to ChatBox header for softphone toggle - Create comprehensive SoftphonePanel component with full UI - Implement dialpad with 0-9, ...
Remove connected check and add debug logging for STOMP activation
STOMP client was not activating because connected check was preventing it. Added debug logs to diagnose.
Activate STOMP client only after SockJS opens
Critical bug fix: STOMP client was being activated before SockJS opened, causing immediate disconnect. Now waits for SockJS onopen event before activating STOMP...
Enable SockJS fallback transports for WebSocket connection
Allow xhr-streaming and xhr-polling as fallback if WebSocket upgrade fails.
Enhance ChatBox with dynamic color system and increased height
- Increase message viewing area by 33% (DOCKED_HEIGHT: 360 -> 480) - Create ChatBoxStyles.tsx with dynamic CSS variable-based color system - Apply primary color...
Modernize ChatBox design with professional polish
- Implement clean white background with subtle gray gradients - Add custom scrollbar styling integrated with primary color scheme - Enhance message bubbles with...
Remove invalid 'active' property check in useChatWebSocket
The Client type from @stomp/stompjs doesn't have an 'active' property. Removed the invalid check since client.activate() is called immediately after client crea...
Wait for SockJS to open before activating STOMP client
- Fix race condition where STOMP client activated before SockJS connection was ready - Move client.activate() to SockJS onopen callback - This should fix immedi...
Route ALL WebRTC API requests to port 8443
- Updated all WebRTC API routes to use media.{domain}:8443 - No longer using Traefik for WebRTC endpoints - Matches media API and WebSocket configuration
Route ALL MediaService requests to port 8443 (bypass Traefik)
- Updated all media API routes to use media.{domain}:8443 - No longer using Traefik for MediaService - Both API and WebSocket go direct to port 8443 - internal....
Connect to port 8443 (external) which routes to NodePort 30843
- Router forwards external 8443 to k1m1 NodePort 30843 - Browser uses media.kamocrm.com:8443 - Internal NodePort is 30843 (Kubernetes valid range)
Connect to MediaService port 8443 for WebSocket
- Updated WebSocket connection to use media.kamocrm.com:8443 - Bypasses Traefik for WebSocket-only traffic - Uses direct HTTPS/HTTP1.1 connection to MediaServic...
Remove WebSocket-only transport restriction for HTTP/2 compatibility
- Browser WebSocket API doesn't support HTTP/2 (RFC 8441 not implemented) - Native WebSocket requires HTTP/1.1 Upgrade which fails over HTTP/2 - Let SockJS auto...
Use WebSocket-only transport (disable XHR polling)
- Changed SockJS transports from [websocket, xhr-streaming, xhr-polling] to [websocket] - Removes fallback to XHR polling - Forces pure WebSocket connection - F...
Connect WebSocket directly to media.kamocrm.com
- Reverted to original approach: connect to media.* subdomain directly - Removed unnecessary same-origin complexity - Removed /ws bypass from middleware (not ne...
Remove explicit namespace reference from kamowsmedia-service
- Both services are in same namespace (kamo) - Explicit namespace reference not needed - Avoids potential cross-namespace issues
Remove /ws rewrite from next.config (handled by Traefik)
- Removed Next.js rewrite for /ws paths - WebSocket routing now handled at Traefik IngressRoute level - Traefik routes internal.kamocrm.com/ws -> MediaService d...
Route /ws requests directly to MediaService via Traefik
- Added dedicated route for /ws paths in IngressRoute - Routes internal.kamocrm.com/ws -> MediaService directly - Uses same ServersTransport as media-route for ...
Allow /ws WebSocket endpoints without auth redirect
- Added /ws path to middleware bypass - SockJS needs to connect to /ws/info without redirect - WebSocket connections will still have *** cookie - Fixes WebSocke...
Change WebSocket connection to same-origin
- Changed from media.kamocrm.com to same origin (internal.kamocrm.com) - Avoids cross-origin WebSocket connection issues - Added Next.js rewrite rule to proxy /...
Add API proxy routes for WebRTC endpoints
- Added /api/webrtc/config proxy to MediaService - Added /api/webrtc/token proxy for Janus authentication - Added /api/webrtc/call/initiate, answer, end proxies...
Remove invalid coder property from getDisplayMedia
- Using simple video: true for screen sharing - Build should now succeed
Resolve build error - replace PhoneOff with CallEnd
- PhoneOff icon doesn't exist in @mui/icons-material - Using CallEnd which is the correct MUI icon - Removed unused duplicate files (ChatBoxWithWebRTC, VideoCal...
Complete peer-to-peer WebRTC calling with signaling
- Added useWebRTC hook with full signaling support - Integrated WebSocket signaling (offers, answers, ICE candidates) - Added incoming call notifications with a...
Add Janus WebRTC integration for audio/video calls
- Added useJanusWebRTC hook for WebRTC call management - Added VideoCallPanel component for in-chat video display - Integrated with ChatBox for seamless call ex...
Restore WebSocket transport in SockJS
- Revert to using websocket transport (not polling) - WebSockets are standard and should work properly - Focus on fixing the actual WebSocket connection issue
Skip WebSocket transport in SockJS to avoid HTTP/2 issues
- Use xhr-streaming and xhr-polling transports instead of websocket - These transports work with both HTTP/1.1 and HTTP/2 without requiring WebSocket upgrades -...
Configure SockJS transports to handle HTTP/2 WebSocket upgrade issues
- Explicitly configure SockJS transport order to prefer WebSocket, then fallback to xhr-streaming/xhr-polling - HTTP/2 WebSocket upgrades may fail, so SockJS wi...
Ensure messages route is recognized by Next.js
- Added logging to verify route is being hit - Route file exists and structure is correct for Next.js 15
Remove non-existent 'active' property from STOMP Client logging
- STOMP Client doesn't have an 'active' property - Only check 'connected' property which is the correct state indicator
Remove unsupported onWebSocketError handler from STOMP client
- onWebSocketError is not a valid property in ClientOptions - SockJS error handlers (onerror, onclose) already provide error handling
Add comprehensive WebSocket error handling and logging
- Added SockJS error handlers (onopen, onerror, onclose) to catch connection failures - Added connection timeout detection (10 seconds) to identify silent failu...
Remove incorrect HTTPS agent workaround
- Reverted changes that bypassed certificate validation - Certificates are issued by auto-cert service (Let's Encrypt), not self-signed - Need to investigate wh...
Use HTTPS with agent that accepts self-signed certificates
- Reverted to always use HTTPS (not HTTP) - Added HTTPS agent with rejectUnauthorized: false for self-signed certs - This allows server-side Next.js routes to c...
Use Kubernetes service name for MediaService to avoid SSL cert issues
- Server-side Next.js routes now use **************** - This avoids self-signed certificate errors when connecting to https://media.kamocrm.com - Client-side re...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.