Aplicación web progresiva (PWA) estilo Zello con comunicación en tiempo real, Push-to-Talk (PTT), y chat multimedia.
- Push-to-Talk (PTT): Comunicación de voz en tiempo real estilo walkie-talkie
- Chat de texto: Mensajería instantánea en canales
- Multimedia: Envío de imágenes, GIFs y videos
- Canales: Múltiples canales de comunicación
- PWA: Instalable en móviles y escritorio
- Diseño moderno: Interfaz oscura estilo WhatsApp/Telegram
- Responsive: Funciona en todos los dispositivos
- Tiempo real: Comunicación instantánea con WebSockets
Backend:
- Node.js + Express
- Socket.io (WebSockets)
- Multer (subida de archivos)
Frontend:
- HTML5 + CSS3
- JavaScript (Vanilla)
- Web Audio API
- MediaRecorder API
- PWA (Service Workers + Manifest)
# Instalar Node.js 20.x
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# Verificar instalación
node --version
npm --version# Si tienes el proyecto en tu VPS
cd /var/www/
# O la ruta donde quieras instalar
# Asegúrate de que los archivos estén en el directorio
ls -lanpm installPor defecto usa el puerto 3000. Para cambiarlo:
export PORT=3000
# O edita server/index.jsnpm run dev# Instalar PM2 globalmente
sudo npm install -g pm2
# Iniciar la aplicación
pm2 start server/index.js --name zello-pwa
# Configurar inicio automático
pm2 startup
pm2 save
# Otros comandos útiles
pm2 status # Ver estado
pm2 logs zello-pwa # Ver logs
pm2 restart zello-pwa # Reiniciar
pm2 stop zello-pwa # Detener# Instalar Nginx
sudo apt install nginx
# Crear configuración
sudo nano /etc/nginx/sites-available/zello-pwaContenido del archivo:
server {
listen 80;
server_name tu-dominio.com; # Cambia esto
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# WebSocket support
location /socket.io/ {
proxy_pass http://localhost:3000/socket.io/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}Activar la configuración:
sudo ln -s /etc/nginx/sites-available/zello-pwa /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx# Instalar Certbot
sudo apt install certbot python3-certbot-nginx
# Obtener certificado SSL
sudo certbot --nginx -d tu-dominio.com
# Renovación automática (ya configurada)
sudo certbot renew --dry-runsudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp # SSH
sudo ufw enable- Abre en el navegador:
http://localhost:3000/generate-icons.html - Se generarán todos los iconos automáticamente
- Haz clic derecho en cada imagen y guárdala en
public/icons/ - Nombres:
icon-72.png,icon-96.png,icon-128.png, etc.
O usa una herramienta online como PWA Asset Generator.
- Abre la aplicación en tu navegador
- Ingresa tu nombre de usuario
- Serás conectado al canal "General"
- Mantén presionado el botón verde grande
- Habla mientras lo mantienes presionado
- Suelta para enviar el mensaje de voz
- Escribe en el campo de texto
- Presiona Enter o el botón de enviar
- Haz clic en el botón de clip 📎
- Selecciona una imagen o video
- Agrega un comentario opcional
- Envía
- Haz clic en el botón de lista (☰)
- Selecciona un canal existente
- O crea uno nuevo
- En Chrome/Edge: Clic en el icono de instalación en la barra de direcciones
- En iOS Safari: Compartir → Agregar a pantalla de inicio
- En Android Chrome: Menú → Instalar aplicación
zello-pwa/
├── server/
│ └── index.js # Servidor Express + Socket.io
├── public/
│ ├── index.html # HTML principal
│ ├── manifest.json # Manifest PWA
│ ├── sw.js # Service Worker
│ ├── css/
│ │ └── style.css # Estilos
│ ├── js/
│ │ └── app.js # Lógica frontend
│ ├── icons/ # Iconos PWA (generar)
│ └── uploads/ # Archivos subidos
├── package.json
└── README.md
Edita server/index.js:
const upload = multer({
storage: storage,
limits: {
fileSize: 10 * 1024 * 1024 // 10MB (cambiar aquí)
}
});Actualmente los mensajes se almacenan en memoria. Para persistencia:
- SQLite: Ligero, sin configuración
npm install better-sqlite3- MongoDB: Más robusto
sudo apt install mongodb
npm install mongooseCrea un archivo .env:
PORT=3000
NODE_ENV=production
MAX_FILE_SIZE=10485760Instala dotenv:
npm install dotenv- Verifica que uses HTTPS (requerido para acceso al micrófono)
- Otorga permisos en el navegador
- Verifica que Nginx esté configurado correctamente para WebSockets
- Revisa los logs:
pm2 logs zello-pwa
- Verifica permisos del directorio
public/uploads/
chmod 755 public/uploads/# Ver qué usa el puerto 3000
sudo lsof -i :3000
# Cambiar puerto en server/index.js o usar variable de entorno
export PORT=3001- Base de datos para persistencia
- Autenticación de usuarios
- Canales privados con contraseña
- Historial de mensajes paginado
- Compartir ubicación
- Videollamadas WebRTC
- Encriptación end-to-end
- Modo offline mejorado
- Notificaciones push del servidor
MIT
Para problemas o preguntas, revisa los logs:
pm2 logs zello-pwaO revisa el navegador:
- F12 → Console para ver errores de JavaScript
- F12 → Network para ver problemas de conexión