File size: 5,354 Bytes
84121fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# 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

1. **Clonar el repositorio**
```bash
git clone <repo-url>
cd daddytv
```

2. **Configurar variables de entorno**
```bash
cp .env.example .env
```

Editar `.env` con tus valores:
```env
MAIN_M3U_URL=https://tu-playlist.m3u8
ADMIN_CODE=tu-codigo-admin-hex
AES_SECRET=tu-secreto-aes
BASE_URL=https://tu-dominio.com
```

3. **Instalar dependencias del frontend**
```bash
npm install
```

4. **Instalar dependencias del backend**
```bash
cd api
pip install -r requirements.txt
```

### Desarrollo Local

1. **Iniciar backend** (terminal 1):
```bash
cd api
uvicorn main:app --reload --port 8000
```

2. **Iniciar frontend** (terminal 2):
```bash
npm run dev
```

La aplicación estará disponible en `http://localhost:5173`

## 🚀 Despliegue

### Vercel (Recomendado)

1. **Conectar repositorio a Vercel**
2. **Configurar variables de entorno** en el dashboard de Vercel
3. **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 acceso
- `POST /api/logout` - Cerrar sesión
- `POST /api/ping` - Verificar autenticación

### Canales
- `GET /api/channels` - Obtener lista de canales
- `GET /api/playlist.m3u` - Descargar playlist M3U

### Streaming
- `GET /api/proxy?url=<stream_url>` - Proxy para streams
- `POST /api/viewers` - Registrar visualización
- `GET /api/viewers/{channel_id}` - Contador de viewers

### Administración
- `POST /api/admin/update` - Actualizar configuración
- `GET /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

1. Fork el proyecto
2. Crear rama feature (`git checkout -b feature/nueva-funcionalidad`)
3. Commit cambios (`git commit -am 'Agregar nueva funcionalidad'`)
4. Push a la rama (`git push origin feature/nueva-funcionalidad`)
5. 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.