Skip to content

bvelastegui/cineteca

Repository files navigation

CineTeca Logo

CineTeca

Tu Biblioteca Personal de Películas

Descubre, organiza y gestiona tus películas favoritas con CineTeca.
Conecta con la API de TMDB y crea listas personalizadas de tus películas preferidas.

Made with Vanilla JavaScript Bootstrap 5 TMDB API License: MIT

Ver DemoReportar BugSolicitar Característica

Capturas de Pantalla

Dashboard Principal

Dashboard principal con películas populares

Inicio de Sesión

Inicio de Sesión
Autenticación OAuth con TMDB

Búsqueda

Búsqueda Avanzada
Encuentra películas al instante

Crear Lista

Crear Listas
Listas personalizadas

Gestión de Listas

Gestión de Listas
Administra tus colecciones

Editar Lista

Editar Listas
Modifica fácilmente

Agregar Película

Agregar Películas
Añade a tus listas

Características Principales

Búsqueda Avanzada

Busca películas en tiempo real utilizando la API de TMDB. Encuentra cualquier película con búsqueda instantánea y resultados paginados.

Listas Personalizadas

Crea y gestiona listas personalizadas de películas. Organiza tus favoritas, películas por ver, o cualquier categoría que imagines.

Autenticación OAuth

Inicia sesión de forma segura con tu cuenta de TMDB. Tus datos están protegidos con autenticación OAuth 2.0.

Caché Inteligente

Sistema de caché con TTL de 1 hora que optimiza las peticiones y mejora la velocidad de carga de la aplicación.

Películas Populares

Descubre las películas más populares del momento. Explora tendencias y encuentra tu próxima película favorita.

Gestión Completa

CRUD completo de listas: crea, edita, elimina y organiza. Agrega o quita películas de tus listas con un solo clic.

Inicio Rápido

Requisitos Previos

  • Navegador web moderno (Chrome, Firefox, Safari, Edge)
  • API Key de TMDB (gratuita)
  • Servidor HTTP local para desarrollo

Obtener API Key de TMDB

  1. Crear cuenta en The Movie Database
  2. Ir a Configuración → API
  3. Solicitar API Key (seleccionar "Developer")
  4. Copiar la API Key generada

Ejecutar Localmente

# Clonar el repositorio
git clone https://github.com/bvelastegui/cineteca.git
cd cineteca

# Opción 1: Python 3 (recomendado)
python3 -m http.server 8000

# Opción 2: Node.js
npx http-server -p 8000

# Opción 3: PHP
php -S localhost:8000

# Abrir en el navegador
# http://localhost:8000

Nota: Usa un servidor HTTP local en lugar de abrir index.html directamente para evitar problemas con CORS y módulos ES6.

Tecnologías Utilizadas

Frontend API & Storage Deployment
HTML5 TMDB GitHub Pages
CSS3 localStorage
JavaScript
Bootstrap

Características Técnicas

  • Vanilla JavaScript: Aplicación sin frameworks, usando JavaScript puro con ES6+ Modules, async/await
  • Arquitectura Modular: Código organizado siguiendo el patrón ETL (Extract-Transform-Load)
  • Sin Dependencias: No requiere npm, webpack, o bundlers
  • Responsive Design: Compatible con móviles, tablets y desktop

Estructura del Proyecto

cineteca/
├── assets/
│   └── img/
│       ├── logo.svg
│       └── landing/          # Screenshots de la app
├── js/
│   ├── core/                 # Núcleo de la aplicación
│   │   ├── auth.js          # Sistema de autenticación OAuth
│   │   ├── cache.js         # Sistema de caché con TTL
│   │   └── dom.js           # Utilidades DOM
│   ├── peliculas/           # Módulo de películas
│   │   ├── api.js           # API de TMDB
│   │   ├── normalizador.js  # Adaptador ETL
│   │   └── renderizador.js  # Renderizado de UI
│   ├── listas/              # Módulo de listas
│   │   ├── api.js
│   │   ├── normalizador.js
│   │   └── renderizador.js
│   └── config/
│       └── constantes.js    # Constantes globales
├── index.html               # Landing page
├── login.html               # Página de autenticación
├── home.html                # Dashboard principal
└── README.md

Patrón de Arquitectura

El proyecto implementa el patrón ETL (Extract-Transform-Load):

  1. Extract: Los datos se obtienen de la API de TMDB
  2. Transform: Los adaptadores/normalizadores convierten los datos (inglés → español)
  3. Load: Los datos transformados se cargan en la UI y localStorage

Funcionalidades

Sistema de Autenticación OAuth

  • Flujo OAuth completo con TMDB
  • Persistencia de sesión (localStorage/sessionStorage)
  • Gestión segura de cierre de sesión
  • Validación de sesión activa

Dashboard de Películas

  • Visualización de películas populares
  • Sistema de paginación
  • Loading spinners y estados de carga
  • Sistema de tabs (Populares / Listas)

Búsqueda y Filtros

  • Búsqueda en tiempo real con debounce
  • Paginación de resultados
  • Filtrado por género
  • Detección de películas duplicadas

CRUD de Listas

  • Crear listas personalizadas
  • Ver todas las listas del usuario
  • Editar listas (nombre y descripción)
  • Eliminar listas completas
  • Agregar/eliminar películas de listas
  • Modals de confirmación

Experiencia de Usuario

  • Bootstrap Toasts para notificaciones
  • Placeholders para imágenes
  • Sistema de caché inteligente (TTL 1h)
  • Landing page con galería de screenshots

Futuras Mejoras

  • Filtros avanzados por fecha de estreno
  • Búsqueda por actor y director
  • Ordenamiento personalizado de resultados
  • Sistema de favoritos y watchlist
  • Modo oscuro/claro
  • Compartir listas con otros usuarios

Arquitectura Técnica

Sistema de Caché Inteligente

// TTL de 1 hora por defecto
// Namespacing automático
// Limpieza automática de datos expirados
// Manejo de QuotaExceededError

const cache = new CacheService('movies_');
cache.set('popular', data, 60); // 60 minutos TTL
const cached = cache.get('popular');

Arquitectura Modular

┌─────────────────────────────────────────┐
│          Capa de Presentación           │
│        (HTML + Renderizadores)          │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│        Capa de Normalizadores           │
│        (Patrón ETL - Transform)         │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│            Capa de API                  │
│    (Comunicación con TMDB - Extract)    │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│          Capa de Caché/Storage          │
│      (localStorage - Load/Persist)      │
└─────────────────────────────────────────┘

Documentación Adicional

Equipo de Desarrollo

Bryan Velastegui
Bryan Velastegui

@bvelastegui
Evelyn Morocho
Evelyn Morocho

@evelyn18m

Licencia

Este proyecto está licenciado bajo la MIT License - ver LICENSE para más detalles.

Uso Académico

Este proyecto fue desarrollado como parte de un proyecto final de la asignatura de Desarrollo de Software con fines educativos.

Atribuciones

Enlaces Útiles

Instituto Tecnológico Superior CENESTUR • 2026

Hecho con ❤️ usando Vanilla JavaScript

About

Aplicación Web desarrollada con Javascript Vanilla

Topics

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Contributors