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

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
- 01API REST en Spring Boot con 36 endpoints: películas, emociones, valoraciones, favoritos, watchlist y actividad
- 02Autenticación JWT sin estado con Spring Security y refresco automático del token en el cliente
- 03Clasificador de emociones: cada película nueva se etiqueta por su género y por palabras clave de su sinopsis
- 04Integración con TMDB mediante WebClient y caché en MySQL, para que las consultas repetidas no vuelvan a la API
- 05App en React Native + Expo con randomizador por género, década, plataforma y duración, reseñas y feed de actividad
- 06Capa compartida de hooks para acceder a la API, pensada para reutilizarla en un cliente web
Cómo funciona
4 pasos
- 01
Ingesta
La primera vez que se pide una película, el backend la trae de TMDB y la guarda en MySQL.
- 02
Emoción primaria
Su género se traduce a una emoción (Terror → Ansiedad, Comedia → Felicidad).
- 03
Emoción secundaria
La sinopsis se analiza buscando palabras clave («venganza» → Ira, «superación» → Esperanza).
- 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.
- 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
- 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 →
