A real-time chat application built with React and Node.js using WebSocket technology for instant messaging.
- Real-time messaging - Instant message delivery using WebSocket connections
 - Room-based chat - Join different chat rooms with multiple users
 - User management - Track users in each room with live updates
 - Emoji support - Built-in emoji picker for expressive messaging
 - Responsive design - Modern UI with custom components and styling
 - Message types - Different styling for own messages, others, and bot notifications
 
- Express.js server with Socket.IO for WebSocket connections
 - Modular structure with separated handlers, services, and utilities
 - In-memory user management for active chat sessions
 - CORS enabled for cross-origin requests
 
- React 19 with TypeScript for type safety
 - React Router for navigation between pages
 - Less with CSS modules for styling
 - Socket.IO Client for real-time communication
 
- Node.js - Runtime environment
 - Express.js - Web framework
 - Socket.IO - WebSocket library for real-time communication
 - CORS - Cross-origin resource sharing
 - dotenv - Environment variable management
 
- React 19 - UI library
 - TypeScript - Type-safe JavaScript
 - Socket.IO Client - WebSocket client
 - React Router DOM - Client-side routing
 - Less - CSS preprocessor
 - Emoji Picker React - Emoji selection component
 - React Icons - Icon library
 - Vite - Build tool and dev server
 
websocket-chat-app/
βββ backend/
β   βββ config/          # Configuration files
β   βββ constants/        # Application constants
β   βββ database/         # User management logic
β   βββ routes/          # Express routes
β   βββ socket/          # WebSocket handlers
β   β   βββ handlers/    # Event handlers
β   β   βββ events.js    # Socket event constants
β   β   βββ socketManager.js
β   βββ utils/           # Utility functions
β   βββ index.js         # Main server file
βββ frontend/
    βββ src/
    β   βββ components/  # Reusable UI components
    β   βββ pages/       # Application pages
    β   βββ styles/      # Global styles and variables
    β   βββ types/       # TypeScript type definitions
    β   βββ constants/   # Frontend constants
    βββ public/          # Static assets
- Uses WebSocket connections for instant message delivery
 - No page refresh needed for new messages
 - Live user count updates in each room
 
- Own messages - Light purple background, dark text
 - Other users - Dark background, light text
 - Bot messages - Blue background, white text (for join/leave notifications)
 
- Multiple users can join the same room
 - Users are tracked per room
 - Automatic notifications when users join or leave