Esta aplicación es un chat‑app en tiempo real que permite la comunicación entre múltiples usuarios en salas de chat públicas y privadas. Incluye autenticación mediante JWT, gestión de historial de mensajes y notificaciones cuando la ventana está en segundo plano.
- Node.js
- Express
- Socket.IO
- MongoDB
- Mongoose
- CORS
- dotenv
- JSON Web Tokens (JWT)
- React (Create React App – PWA template)
- Socket.IO Client
- nodemon
- concurrently
- Express REST API para autenticación, carga de historial y gestión de usuarios/salas.
- Socket.IO para canal de mensajería en tiempo real: conexión/desconexión, envío/recepción de mensajes y eventos de sala (join/leave).
- MongoDB para almacenamiento de datos:
- Colecciones:
users,rooms,messages(con índices enroomIdytimestamp).
- Colecciones:
- Autenticación
- Registro/login mediante JWT.
- Middleware que valide token en peticiones REST y conexiones Socket.IO.
- Salas de chat
- Crear salas públicas y privadas.
- Unirse y salir dinámicamente.
- Mensajería en tiempo real
- Emisión de mensajes a todos los miembros de la sala.
- Indicador "usuario está escribiendo…" con evento de tipeo.
- Historial de mensajes
- Carga de los últimos N mensajes al unirse a una sala.
- Lista de usuarios online
- Mantenimiento de usuarios conectados en memoria o Redis; actualizaciones al entrar/salir.
- Notificaciones
- Notificaciones de navegador si la ventana está en segundo plano.
- Responsive
- Adaptación a escritorio y móvil con CSS flexbox/grid.
- Escalabilidad: adaptador Redis para Socket.IO en despliegues distribuidos.
- Baja latencia: payloads ligeros y compresión GZIP en Express.
- Seguridad: CORS restringido, sanitización contra XSS y conexión bajo SSL/TLS.
- Mantenibilidad: separación en capas (controllers, services, models) y contenedorización independiente (Docker).
- Disponibilidad: despliegue en plataformas como Heroku, AWS ECS o DigitalOcean, con MongoDB Atlas.
/backend
/src
/controllers
/services
/models
/routes
/sockets
index.js
package.json
/frontend
/public
/src
/components
/Auth
/Chat
/Shared
/hooks
/contexts
/pages
App.jsx
index.jsx
package.json
- Dos campos de entrada: Email y Contraseña
- Botón "Entrar"
- Enlace a "Crear cuenta"
- Sidebar
- Listado de salas (públicas y privadas) y opción "+ Nueva sala"
- Listado de usuarios conectados
- Ventana de chat
- Encabezado con nombre de sala y contador de usuarios
- Área de mensajes desplazable
- Pie de página con campo de texto y botón "Enviar"