
I built a real-time chat application using Node.js, Socket.io, and React to learn how WebSocket communication works in practice. The project supports multiple chat rooms, private messaging, typing indicators, and message history stored in MongoDB. The backend handles connection management, room creation, and authentication using JSON Web Tokens. On the frontend, React components manage the UI while Socket.io handles real-time event listening. Key challenges included managing user disconnections gracefully, preventing duplicate messages, and scaling the WebSocket server for concurrent connections. I deployed the application using Docker containers on a VPS with Nginx as a reverse proxy. This project taught me more about asynchronous programming and event-driven architecture than any tutorial ever did. Check out the repository for the full source code.