Una aplicación clone de Netflix desarrollada con React Native (Expo) para el frontend y Node.js/Express con PostgreSQL para el backend, integrada con TMDB API para contenido real.
- Estructura del Proyecto
- Requisitos Previos
- Instalación
- Configuración
- Base de Datos
- Desarrollo
- Integración TMDB
- Scripts Disponibles
- Tecnologías
- Funcionalidades
├── frontend/ # Aplicación React Native (Expo)
│ ├── app/ # Rutas y pantallas (Expo Router)
│ ├── components/ # Componentes reutilizables
│ ├── services/ # Servicios API (backend y TMDB)
│ ├── contexts/ # Contextos de React
│ └── .env # Variables de entorno del frontend
├── backend/ # Servidor Node.js/Express + PostgreSQL
│ ├── src/ # Código fuente del backend
│ │ ├── controllers/ # Controladores de rutas
│ │ ├── services/ # Lógica de negocio
│ │ ├── routes/ # Definición de rutas
│ │ ├── config/ # Configuración (DB, JWT, etc.)
│ │ └── middlewares/ # Middlewares (auth, etc.)
│ ├── database/ # Scripts de base de datos
│ └── .env # Variables de entorno del backend
├── .gitignore # Archivos ignorados por Git
└── README.md # Este archivo
- Node.js >= 18.0.0
- npm >= 8.0.0
- PostgreSQL >= 12.0
- Expo CLI (para desarrollo móvil)
- Cuenta TMDB (para API key)
git clone [URL_DEL_REPOSITORIO]
cd app-netflix-puyocd backend
npm installcd ../frontend
npm installPaso 1: Navega a la carpeta backend
cd backendPaso 2: Crea el archivo de configuración
copy .env.example .envPaso 3: Abre el archivo backend/.env y configura lo siguiente:
# Configuración de Base de Datos
DATABASE_URL=postgresql://postgres:tu_contraseña@localhost:5432/netflixdb
# Configuración del Servidor
JWT_SECRET=mi_clave_secreta_super_segura_123
PORT=4000
NODE_ENV=developmentImportante: Cambia
tu_contraseñapor la contraseña de tu PostgreSQL
Paso 1: Navega a la carpeta frontend
cd ../frontendPaso 2: Crea el archivo .env en la carpeta frontend con el siguiente contenido:
# API de TMDB (YA CONFIGURADA - NO CAMBIAR)
EXPO_PUBLIC_TMDB_API_KEY=90d95a7bdb9767410b36ac945235fc4a
# Configuración del Backend (CAMBIAR POR TU IP)
EXPO_PUBLIC_API_URL=http://TU_IP_LOCAL:4000
API_BASE_URL=http://TU_IP_LOCAL:4000Importante: Reemplaza
TU_IP_LOCALpor tu dirección IP local (ejemplo:192.168.1.100)
Para encontrar tu IP local:
- Windows: Abre CMD y escribe
ipconfig - Mac/Linux: Abre Terminal y escribe
ifconfig
Paso 1: Instala PostgreSQL en tu computadora
- Descarga desde: https://www.postgresql.org/download/
- Durante la instalación, recuerda la contraseña que pongas para el usuario
postgres
Paso 2: Abre pgAdmin o la consola de PostgreSQL y ejecuta:
CREATE DATABASE netflixdb;Paso 3: Configura las tablas de la base de datos
cd backend
npm run setup-dbNota: Este comando creará automáticamente todas las tablas necesarias y cargará datos de ejemplo
El proyecto utiliza 9 tablas principales:
users- Usuarios registrados en la aplicaciónprofiles- Perfiles múltiples por usuario (máximo 5 por cuenta)
content- Películas y series del catálogo localcontent_categories- Categorías (Tendencias, Acción, Comedia, etc.)content_category_mapping- Relación entre contenido y categoríasepisodes- Episodios de las series
user_content_progress- Progreso de visualización de cada usuariouser_watchlist- "Mi Lista" personal de cada perfiltmdb_watchlist- Lista de películas favoritas de TMDB
Opción 1: Ejecutar Backend y Frontend por separado (Recomendado)
-
Ejecutar el Backend:
cd backend npm run devEl backend se ejecutará en:
http://localhost:4000 -
Ejecutar el Frontend (en otra terminal):
cd frontend npm startExpo abrirá automáticamente en tu navegador
Opción 2: Ejecutar ambos simultáneamente
npm run dev- Backend API:
http://localhost:4000 - Frontend: Expo DevTools (puerto dinámico)
- Base de Datos: PostgreSQL en puerto 5432
TMDB (The Movie Database) es una base de datos de películas y series que nos proporciona información real sobre miles de títulos, incluyendo imágenes, descripciones, reparto, y más.
- Películas populares - Las más vistas actualmente
- Mejor valoradas - Las mejores según los usuarios
- En cartelera - Películas que están en cines
- Próximos estrenos - Películas que se estrenarán pronto
- Búsqueda - Buscar cualquier película por nombre
- Series populares - Las más vistas
- Mejor valoradas - Las mejores series
- Al aire - Series que están transmitiéndose
- Información completa - Temporadas, episodios, reparto
- Búsqueda general - Buscar películas y series al mismo tiempo
- Filtros por género - Acción, Comedia, Drama, etc.
- Mi Lista TMDB - Guardar tus películas favoritas
✅ La API de TMDB ya está configurada y lista para usar
- No necesitas crear cuenta en TMDB
- No necesitas obtener tu propia API key
- Todo está listo para funcionar
// Los servicios ya están configurados en el proyecto
import { getPopularMovies } from '../services/tmdb';
// Obtener películas populares
const movies = await getPopularMovies(1);# Instalar dependencias del backend
cd backend && npm install
# Instalar dependencias del frontend
cd frontend && npm install
# Ejecutar solo el backend
cd backend && npm run dev
# Ejecutar solo el frontend
cd frontend && npm start
# Configurar la base de datos
cd backend && npm run setup-db# Ejecutar ambos proyectos a la vez
npm run dev
# Limpiar node_modules de ambos proyectos
npm run clean
# Construir el proyecto frontend
npm run build- React Native (Expo)
- TypeScript
- Expo Router (navegación basada en archivos)
- Expo Components
- Context API (gestión de estado)
- Node.js
- Express.js
- PostgreSQL
- JWT para autenticación
- bcrypt para hash de contraseñas
- dotenv para variables de entorno
- TMDB API - The Movie Database para contenido real
- Registro y login de usuarios
- Autenticación JWT
- Middleware de autenticación
- Hasta 5 perfiles por usuario
- Perfiles para niños
- Avatares personalizables
- Contenido local: Películas y series almacenadas
- Contenido TMDB: Miles de películas y series reales
- Categorías: Organización por géneros
- Búsqueda: Búsqueda en ambos catálogos
- "Mi Lista": Watchlist personal por perfil
- Continuar viendo: Seguimiento de progreso
- Recomendaciones: Basadas en historial
- Progreso de visualización: Guardado automático
- UI moderna: Inspirada en Netflix
- Responsive: Adaptable a diferentes pantallas
- Navegación fluida: Expo Router
- Componentes reutilizables: Arquitectura modular
- Frontend:
frontend/app/(enrutamiento basado en archivos) - Backend:
backend/src/(estructura de API REST)
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Solución:
- Verifica que PostgreSQL esté ejecutándose en tu computadora
- Revisa que la contraseña en
backend/.envsea correcta - Asegúrate de haber creado la base de datos
netflixdb
Solución:
- Verifica que el backend esté ejecutándose (
cd backend && npm run dev) - Revisa que la IP en
frontend/.envsea correcta - Asegúrate de que ambas computadoras estén en la misma red WiFi
Solución:
- No cambies la API key que está en el archivo
- Verifica tu conexión a internet
- Reinicia la aplicación
Solución:
# Limpia la caché de npm
npm cache clean --force
# Borra node_modules y reinstala
rm -rf node_modules
npm installSolución:
- Instala Expo CLI globalmente:
npm install -g @expo/cli - Reinicia la terminal
- Ejecuta
cd frontend && npm start
# Ver si PostgreSQL está ejecutándose (Windows)
net start postgresql*
# Ver procesos en puerto 4000
netstat -ano | findstr :4000
# Reiniciar todo desde cero
cd backend && npm run setup-db
cd ../frontend && npm startEste proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Desarrollado con ❤️ para el aprendizaje de desarrollo full-stack