DaddyTV - IPTV PWA
Aplicación web PWA para reproducir listas IPTV (.m3u/.m3u8) con interfaz amigable y enfoque personal para amigos y familiares.
🚀 Características
- PWA Instalable: Funciona como app nativa en PC, móvil y TV
- Autenticación por código: Sin registro, solo validación de código único
- Control de reproducción única: Un canal por usuario simultáneamente
- Navegación con mando: Compatible con controles remotos de TV
- Proxy integrado: Bypass para canales con restricciones CORS/geo
- Sin base de datos: Solo caché en memoria con TTL
- Responsive: Optimizado para todos los dispositivos
🛠️ Tecnologías
Backend
- FastAPI (Python) - API REST modular
- Requests - Cliente HTTP para M3U y proxy
- Cryptography - Cifrado AES para códigos
- Uvicorn - Servidor ASGI
Frontend
- React 18 + TypeScript - Interfaz de usuario
- Vite - Build tool y dev server
- Tailwind CSS - Estilos y diseño responsive
- HLS.js - Reproductor de video streaming
- Lucide React - Iconos
📦 Instalación y Desarrollo
Prerrequisitos
- Node.js 18+
- Python 3.9+
Configuración
- Clonar el repositorio
git clone <repo-url>
cd daddytv
- Configurar variables de entorno
cp .env.example .env
Editar .env
con tus valores:
MAIN_M3U_URL=https://tu-playlist.m3u8
ADMIN_CODE=tu-codigo-admin-hex
AES_SECRET=tu-secreto-aes
BASE_URL=https://tu-dominio.com
- Instalar dependencias del frontend
npm install
- Instalar dependencias del backend
cd api
pip install -r requirements.txt
Desarrollo Local
- Iniciar backend (terminal 1):
cd api
uvicorn main:app --reload --port 8000
- Iniciar frontend (terminal 2):
npm run dev
La aplicación estará disponible en http://localhost:5173
🚀 Despliegue
Vercel (Recomendado)
- Conectar repositorio a Vercel
- Configurar variables de entorno en el dashboard de Vercel
- Deploy automático - Vercel detecta la configuración automáticamente
Render
Backend (Servicio Web):
- Build Command:
pip install -r requirements.txt
- Start Command:
uvicorn main:app --host 0.0.0.0 --port $PORT
- Root Directory:
api
Frontend (Sitio Estático):
- Build Command:
npm run build
- Publish Directory:
dist
📁 Estructura del Proyecto
daddytv/
├── api/ # Backend FastAPI
│ ├── main.py # Punto de entrada
│ ├── auth.py # Autenticación
│ ├── m3u_parser.py # Parser de M3U
│ ├── proxy.py # Proxy para streams
│ ├── viewers.py # Control de visualización
│ ├── admin.py # Panel de administración
│ ├── utils.py # Utilidades
│ └── requirements.txt # Dependencias Python
├── src/ # Frontend React
│ ├── components/ # Componentes UI
│ ├── contexts/ # Context providers
│ ├── hooks/ # Custom hooks
│ ├── services/ # Servicios API
│ ├── types/ # Tipos TypeScript
│ └── main.tsx # Punto de entrada
├── public/ # Archivos estáticos
├── vercel.json # Configuración Vercel
└── package.json # Dependencias Node.js
🔧 API Endpoints
Autenticación
POST /api/auth
- Validar código de accesoPOST /api/logout
- Cerrar sesiónPOST /api/ping
- Verificar autenticación
Canales
GET /api/channels
- Obtener lista de canalesGET /api/playlist.m3u
- Descargar playlist M3U
Streaming
GET /api/proxy?url=<stream_url>
- Proxy para streamsPOST /api/viewers
- Registrar visualizaciónGET /api/viewers/{channel_id}
- Contador de viewers
Administración
POST /api/admin/update
- Actualizar configuraciónGET /api/admin/status
- Estado del sistema
🎮 Controles
Teclado/Mando
- ↑/↓ - Navegar lista de canales
- Enter - Seleccionar canal
- Escape - Volver/Cerrar
- Backspace - Retroceder
Ratón/Táctil
- Click/Tap - Seleccionar elementos
- Scroll - Navegar listas
- Hover - Mostrar controles de video
🔒 Seguridad
- Códigos únicos: Validación sin almacenamiento
- Tokens temporales: Sesiones en memoria
- Rate limiting: Protección contra abuso
- Proxy seguro: Headers de seguridad incluidos
- CORS configurado: Acceso controlado
📱 PWA Features
- Instalable: Funciona como app nativa
- Offline ready: Caché de recursos estáticos
- Responsive: Optimizado para todos los tamaños
- Manifest: Configuración completa de PWA
- Service Worker: Gestión de caché automática
🤝 Contribuir
- Fork el proyecto
- Crear rama feature (
git checkout -b feature/nueva-funcionalidad
) - Commit cambios (
git commit -am 'Agregar nueva funcionalidad'
) - Push a la rama (
git push origin feature/nueva-funcionalidad
) - Crear Pull Request
📄 Licencia
Este proyecto es de uso personal/familiar. Consulta con el autor para otros usos.
🆘 Soporte
Para soporte técnico o dudas, contacta al administrador del sistema.