Una aplicación de chat full-stack en tiempo real que conecta usuarios de forma anónima para mensajería privada 1-a-1. Construida con React, Node.js, Express, Socket.IO y MongoDB.
📢 Estado del Proyecto: Este proyecto fue hecho privado previamente, pero ahora está disponible públicamente nuevamente como un proyecto de código abierto activamente mantenido. Estamos comprometidos con la transparencia y el desarrollo impulsado por la comunidad. Anteriormente tenía 29 estrellas y 17 bifurcaciones—¡gracias por su continuo apoyo!
- Vista Previa
- Características
- Requisitos Previos
- Instrucciones de Instalación
- Stack Tecnológico
- Estructura del Proyecto
- Despliegue
- Contribuciones
- Transparencia y Confianza
- Hecho por Contribuidores
- Agradecimientos
- Contacto
- Licencia
| Página de Login | Registro | Página Principal |
|---|---|---|
![]() |
![]() |
![]() |
- 🔐 Autenticación segura de usuarios (Login/Registro)
- 🎲 Chat privado 1-a-1 aleatorio
- 📡 Mensajería en tiempo real con Socket.IO
- 📜 Historial de chats persistente con MongoDB
- ✏️ Indicador de escritura (opcional)
- 🛡️ Rutas protegidas para usuarios autenticados
- 🕒 Mensajes con marca de tiempo
- 📱 UI completamente responsiva (Móvil y Escritorio)
- 🔔 Notificaciones básicas
- ⭐ Soporte prioritario
- 🎎 Temas personalizados y personalización
- 📸 Uso compartido avanzado de medios
- 🔐 Controles de privacidad mejorados
- 📊 Analítica e información del usuario
- 🌐 Soporte de múltiples idiomas
- 📱 Instalación de aplicación PWA
- 🎵 Tonos de mensaje personalizados
Asegúrate de tener lo siguiente instalado antes de comenzar:
- Node.js (v18 o superior)
- Git
- Una cuenta de MongoDB Atlas (o usar MongoDB local)
¿Necesitas ayuda con MongoDB Atlas? Sigue esta guía: Deploy a Free Cluster
Después de desplegar el cluster:
- Haz clic en Connect → Drivers
- Selecciona Node.js como driver
- Copia la cadena de conexión y úsala como
MONGO_URIen.env
Ejemplo de cadena de conexión:
MONGO_URI=mongodb+srv://<usuario>:<contraseña>@cluster0.mongodb.net/?retryWrites=true&w=majoritySigue estos pasos para ejecutar la app localmente:
git clone https://github.com/behan05/real-time-chat-app.git
cd real-time-chat-appNavega a la carpeta del servidor:
cd connect-serverInstala las dependencias:
npm installCrea un archivo para las variables de entorno:
cp .env.example .envAbre el archivo .env y configura:
PORT=5000
MONGO_URI=tu_mongo_db_uri_aqui
JWT_SECRET=tu_jwt_secret_aquiInicia el servidor backend:
npm startDeberías ver algo como:
Server running on port 5000...
Connected to MongoDBEn una nueva ventana o pestaña de terminal:
cd connect-ui
npm install
npm run devLa app se abrirá en: http://localhost:5173/
Errores comunes y soluciones:
- MongooseServerSelectionError: Verifica tu URI de MongoDB y conexión a internet.
- Puerto en uso: Cambia el valor de
PORTen.envo detén el proceso en conflicto. - El frontend no carga: Asegúrate de que el servidor backend esté corriendo.
Frontend:
- ⚛️ React + Vite
- 💅 Material UI (MUI)
- 🔁 React Router
- 📦 Redux or Context API
- 📢 Toastify
- 🌐 Socket.IO Client
Backend:
- 🟩 Node.js + Express
- 🛢️ MongoDB + Mongoose
- 🔐 Autenticación con JWT
- 🔒 Hashing con bcrypt
- 📡 Socket.IO para comunicación en tiempo real
pairly/
├── pairly-ui/ # Aplicación Frontend React
│ ├── src/
│ │ ├── api/ # Llamadas de servicio API
│ │ ├── assets/ # Imágenes, fuentes, activos estáticos
│ │ ├── components/ # Componentes React reutilizables
│ │ ├── context/ # Configuración de Context API
│ │ ├── features/ # Módulos específicos de características
│ │ ├── layouts/ # Componentes de diseño
│ │ ├── middleware/ # Middleware personalizado
│ │ ├── MUI/ # Personalizaciones de Material-UI
│ │ ├── pages/ # Componentes de página
│ │ ├── redux/ # Tienda Redux y slices
│ │ ├── routes/ # Definiciones de rutas
│ │ ├── services/ # Funciones de servicio
│ │ ├── styles/ # Estilos globales
│ │ ├── utils/ # Funciones de utilidad
│ │ ├── installPrompt/ # Indicador de instalación PWA
│ │ ├── SubscriptionManager/ # Gestión de suscripciones
│ │ ├── App.jsx # Componente principal
│ │ └── main.jsx # Punto de entrada
│ ├── public/
│ │ ├── manifest.json # Manifiesto PWA
│ │ ├── robots.txt # Configuración de robots SEO
│ │ ├── service-worker.js # Service worker
│ │ ├── messageTone/ # Archivos de audio de mensajes
│ │ └── sounds/ # Efectos de sonido
│ ├── vite.config.js
│ ├── eslint.config.js
│ ├── package.json
│ └── README.md
│
├── pairly-server/ # Aplicación Backend Express
│ ├── controllers/
│ │ ├── authController.js
│ │ ├── profileController.js
│ │ ├── settingsController.js
│ │ ├── adminPanelControllers/ # Gestión de administrador
│ │ ├── feedbackControllers/ # Retroalimentación del usuario
│ │ ├── paymentControllers/ # Procesamiento de pagos
│ │ ├── privateChatControllers/ # Lógica de chat privado
│ │ ├── randomChatControllers/ # Coincidencia de chat aleatorio
│ │ ├── searchUserControllers/ # Búsqueda de usuario
│ │ ├── support-ticket/ # Tickets de soporte
│ │ └── common/ # Lógica de controlador compartida
│ │
│ ├── models/
│ │ ├── User.model.js # Esquema de usuario
│ │ ├── Profile.model.js # Perfil de usuario
│ │ ├── settings.model.js # Configuración de usuario
│ │ ├── LoginActivity.model.js # Seguimiento de inicio de sesión
│ │ ├── UserActivity.model.js # Registros de actividad del usuario
│ │ ├── ReportProblem.model.js # Reportes de problemas
│ │ ├── SupportTicket.model.js # Tickets de soporte
│ │ ├── admin/ # Modelos relacionados con administrador
│ │ ├── chat/ # Modelos relacionados con chat
│ │ ├── feedback/ # Modelos de retroalimentación
│ │ ├── payment/ # Modelos de pago
│ │ └── proposal/ # Modelos de propuesta
│ │
│ ├── routers/
│ │ ├── profileRoutes.js
│ │ ├── settingsRoutes.js
│ │ ├── admin/ # Rutas de administrador
│ │ ├── auth/ # Rutas de autenticación
│ │ ├── chat/ # Rutas de chat
│ │ ├── feedback/ # Rutas de retroalimentación
│ │ ├── payment/ # Rutas de pago
│ │ └── searchUsers/ # Rutas de búsqueda
│ │
│ ├── middlewares/
│ │ ├── authMiddleware.js # Autenticación JWT
│ │ ├── adminAuthMiddleware.js # Autorización de administrador
│ │ ├── multerMiddleware.js # Manejo de carga de archivos
│ │ ├── uploadPrivateMedia.js # Carga de medios de chat privado
│ │ ├── uploadRandomMedia.js # Carga de medios de chat aleatorio
│ │ └── uploadProfileS3.js # Carga de perfil S3
│ │
│ ├── sockets/
│ │ ├── socketServer.js # Configuración principal de socket
│ │ ├── privateChat/ # Eventos de socket de chat privado
│ │ └── randomChat/ # Eventos de socket de chat aleatorio
│ │
│ ├── config/
│ │ ├── db.js # Conexión de MongoDB
│ │ ├── passport/ # Estrategias OAuth
│ │ │ ├── passportGithub.js
│ │ │ └── passportGoogle.js
│ │ └── razorpay/
│ │ └── razorpay.js # Integración de Razorpay
│ │
│ ├── utils/
│ │ ├── generateToken.js
│ │ ├── aws/ # Utilidades AWS S3
│ │ ├── email/ # Servicio de correo electrónico
│ │ └── socket/ # Utilidades de socket
│ │
│ ├── cron/
│ │ ├── cleanupUnverifiedUsers.cron.js
│ │ └── deleteRandomExpiredMessages.cron.js
│ │
│ ├── tests/
│ │ ├── unit/ # Pruebas unitarias
│ │ └── integration/ # Pruebas de integración
│ │
│ ├── server.js # Entrada principal del servidor
│ └── package.json
│
├── docs/
│ ├── screenshot/ # Capturas de pantalla de la app
│ └── translations/
│ ├── README.en.md # Documentación en inglés
│ ├── README.es.md # Documentación en español
│ └── README.id.md # Documentación en indonesio
│
├── CODE_OF_CONDUCT.md # Directrices comunitarias
├── CONTRIBUTING.md # Guía de contribución
├── LICENSE # Licencia MIT
└── README.md # Este archivo- Frontend: Vercel
- Backend: Render
No te preocupes si eres nuevo en open source, estaremos felices de ayudarte 😄 Simplemente abre un issue o comenta en uno que te interese.
Si eres nuevo en open source, aquí hay algunas tareas ideales para comenzar:
- Mejorar mensajes de error o feedback al usuario
- Configurar GitHub Actions para CI
- Agregar pruebas unitarias o de extremo a extremo
- Mejorar la accesibilidad
- Escribir documentación
- 🌱 Haz un fork del repositorio
- 🛠️ Crea una rama para tu contribución
- 🔃 Abre un Pull Request
- ❤️ ¡Y no olvides dejar una estrella al proyecto!
Asegúrate de leer la guia de contribución si está disponible.
Entendemos que hacer un proyecto privado y luego hacerlo público nuevamente puede generar preocupaciones. Esto es lo que queremos que sepas:
- Necesitábamos tiempo para reestructurar el código y mejorar la estabilidad
- Queríamos asegurar que el proyecto estuviera listo para producción
- Estábamos evaluando el mejor camino para el mantenimiento a largo plazo
- 100% Código Abierto: Todo el código es visible y auditable públicamente
- Mantenimiento Activo: El proyecto se mantiene activamente y se actualiza regularmente
- Impulsado por la Comunidad: Bienvenimos feedback, issues y pull requests de la comunidad
- Hoja de Ruta Clara: Estamos comprometidos con prácticas de desarrollo transparentes
- Licencia MIT: Puedes usar, modificar y distribuir este software libremente
- Todo el desarrollo futuro será en abierto
- Mantendremos comunicación regular a través de issues y discusiones
- La seguridad y estabilidad son nuestras prioridades principales
- Tu feedback y contribuciones dan forma directa al futuro del proyecto
Agradecemos a todos los contribuidores que mejoran este proyecto cada día.
¡Agregate en CONTRIBUTORS.md cuando hagas tu primera contribución!
Gracias a todos los contribuidores y a las librerías de código abierto utilizadas en este proyecto. ¡Este proyecto no sería posible sin ellos!
¿Tienes preguntas o quieres colaborar? Siéntete libre de contactarme: ✉️ behankrbth@outlook.com
Este proyecto está licenciado bajo la Licencia MIT


