Moodflix

App móvil que recomienda películas según cómo te sientes, con un backend REST propio en Java y Spring Boot.

Año
2025
Rol
Proyecto final de DAM — individual
Stack
Java 23, Spring Boot 3, Spring Security, JWT, MySQL, React Native, Expo, Docker
Enlaces
Ver demo en vídeo ↗︎Código en GitHub ↗︎
Moodflix — vista principal del proyecto

El proyecto

Abres una plataforma de streaming, pasas veinte minutos buscando y no ves nada: las recomendaciones se basan en tu historial, no en cómo te sientes ahora. Moodflix parte de la emoción del momento (nostalgia, euforia, ansiedad…) y propone una película para ella. Desarrollé la app móvil en React Native y el backend completo en Java con Spring Boot, conectado a MySQL y a la API de TMDB.

Qué hice

  1. 01API REST en Spring Boot con 36 endpoints: películas, emociones, valoraciones, favoritos, watchlist y actividad
  2. 02Autenticación JWT sin estado con Spring Security y refresco automático del token en el cliente
  3. 03Clasificador de emociones: cada película nueva se etiqueta por su género y por palabras clave de su sinopsis
  4. 04Integración con TMDB mediante WebClient y caché en MySQL, para que las consultas repetidas no vuelvan a la API
  5. 05App en React Native + Expo con randomizador por género, década, plataforma y duración, reseñas y feed de actividad
  6. 06Capa compartida de hooks para acceder a la API, pensada para reutilizarla en un cliente web

Cómo funciona

4 pasos

  1. 01

    Ingesta

    La primera vez que se pide una película, el backend la trae de TMDB y la guarda en MySQL.

  2. 02

    Emoción primaria

    Su género se traduce a una emoción (Terror → Ansiedad, Comedia → Felicidad).

  3. 03

    Emoción secundaria

    La sinopsis se analiza buscando palabras clave («venganza» → Ira, «superación» → Esperanza).

  4. 04

    Recomendación

    La app pide películas para la emoción elegida y recibe resultados ya etiquetados, sin esperar a TMDB.

Decisiones técnicas

Las decisiones que más pesaron en la arquitectura, y lo que costó cada una.

  1. 01

    JDBC en lugar de un ORM

    El acceso a datos está escrito con JDBC y SQL explícito, sin JPA/Hibernate, para controlar exactamente las consultas que se lanzan.

    Trade-off

    Más código repetitivo de mapeo a cambio de consultas predecibles y fáciles de optimizar.

    • JDBC
    • MySQL
    • SQL
  2. 02

    Caché local de TMDB

    Las películas se guardan la primera vez que se consultan y el etiquetado de emociones se hace en ese momento, una sola vez por película.

    Trade-off

    Los datos pueden quedar desactualizados respecto a TMDB, aceptable para metadatos de películas que casi no cambian.

    • Spring WebFlux
    • WebClient
    • Caché

Siguiente proyecto · 04

Abode Pets →