Javier Morales Galisteo
Proyectos de Javier Morales
Software, inteligencia artificial y robótica. Cada proyecto con su contexto, cómo lo construí y qué aprendí.
Atalaya

Sala de mando para incendios forestales con agentes de IA que detectan focos, calculan su avance y proponen la respuesta, siempre con un humano al mando. Desarrollado en el hackathon HackSpain.
La plataforma detectó correctamente humo real en imágenes de las cámaras de la DGT.
El reto
Cuando empieza un incendio forestal cada minuto cuenta, y la información llega dispersa: satélites, cámaras, llamadas al 112, prensa y redes. La apuesta fue clara: reunirlo todo en una sala de mando donde la IA haga el trabajo pesado, pero la decisión final siga siendo de una persona.
Así nació Atalaya, una sala de mando para incendios forestales en España construida durante el hackathon HackSpain.
La solución
Atalaya detecta el fuego por cinco caminos a la vez: focos térmicos de satélite, unas 2.300 cámaras de tráfico analizadas con visión, un 112 virtual atendido por un agente de voz, la prensa y las redes, y un formulario ciudadano. Con el viento real, la pendiente y el combustible del terreno, calcula hacia dónde avanza el frente, a qué pueblos llegará y cuándo.
Varios agentes de IA proponen y ejecutan la respuesta: despachar medios desde parques de bomberos reales por carretera real, avisar a la población por SMS y publicar comunicados. Una política define qué puede hacer la máquina sola y qué tiene que aprobar un humano, y cada decisión deja un acta trazable con el razonamiento del agente, las evidencias y sus fundamentos legales.
Detección de humo real
La plataforma detectó correctamente humo real en imágenes de las cámaras de la DGT.
Vídeo de la detección: enlace pendiente.
Tecnologías: Next.js, TypeScript, Supabase, Leaflet, HappyRobot, Railway
GRPO Studio

GRPO Studio reúne datos, prompts, entrenamiento con GRPO y LoRA, evaluación sobre ArangoDB y gestión de experimentos en GPU. En la evaluación del proyecto, llevé la tasa de acierto del 36,8% al 84,9%.
De una pregunta a una consulta útil
GRPO Studio es una plataforma web autoalojada y multiusuario para adaptar modelos de lenguaje a consultas sobre ArangoDB. Su objetivo es que una pregunta en lenguaje natural se convierta en una consulta AQL que devuelva los datos esperados. La desarrollo durante mi beca internacional en ArangoDB, a través de la cátedra Arango–UPM.
He unido en una misma aplicación el ciclo de experimentación: preparar datos y prompts, entrenar, comparar resultados y probar el asistente resultante.
Aprender de lo que devuelve la base de datos
El entrenamiento combina GRPO con adaptadores LoRA. La recompensa tiene dos componentes: el formato y los elementos de la consulta, y su ejecución real en ArangoDB. Se comprueba la sintaxis, se ejecuta el AQL y se compara su resultado con el esperado, con distintos grados de recompensa según la coincidencia.
La plataforma permite entrenamiento distribuido en varias GPUs y generación con vLLM. Conserva configuraciones, métricas y checkpoints para seguir y reanudar los experimentos.
Preparar y evaluar con criterio
- Datos vinculados a la base de datos: preguntas, consultas de referencia y resultados esperados, con selección de colecciones y grafos.
- Prompts editables: plantillas con el esquema de la base de datos y ejemplos seleccionados del dataset. Los ejemplos incluidos en el prompt y las filas que comparten su pregunta o consulta se excluyen del entrenamiento y la evaluación.
- Comparación antes y después: modelo base y modelo entrenado responden sobre un conjunto reservado. Sus consultas se ejecutan y se guardan los resultados, errores y tiempos de cada pregunta.
- Análisis de resultados: métricas de coincidencia estricta y de equivalencia según las reglas del evaluador, además de comparación de recompensas, configuraciones y tiempos entre experimentos.
En la evaluación del proyecto, la tasa de acierto pasó del 36,8% al 84,9%. Es un resultado de esa evaluación, no una garantía para cualquier modelo o base de datos.
La ingeniería que sostiene los experimentos
Una interfaz React y un backend Python con FastAPI coordinan usuarios, datasets, modelos y ejecuciones. Hay experimentos por lotes, colas de entrenamiento y evaluación, reservas de VRAM, monitorización de GPUs y seguimiento de métricas y logs en directo.
El playground permite preguntar al modelo entrenado, inspeccionar el AQL y consultar los resultados mediante una ruta de solo lectura. También hay exportación de modelos a Hugging Face. El entrenamiento y la generación de AQL se ejecutan en la infraestructura donde se despliega la plataforma; de forma opcional, se puede configurar un proveedor externo para redactar una respuesta a partir de los resultados.
Presentación y analíticas
La presentación pública recorre las funcionalidades del producto. En GRPO Studio Analyzer publico análisis de entrenamientos y comparaciones de modelos. La aplicación desarrollada para la empresa y su código no son públicos.
Tecnologías: React, Python, vLLM, LoRA, ArangoDB, Hugging Face
Cabify Jarvis
Experiencia de viaje sin conductor con un asistente de voz con IA y móvil y vehículo sincronizados en tiempo real. 🏆 Primer premio del Product Hackathon de Cabify.
El reto
Nuestra apuesta fue clara: poner la confianza del pasajero en el centro del producto. Si no hay conductor, ¿qué hace que te sientas seguro y acompañado durante el trayecto?
Así nació Cabify Jarvis, una solución funcional con dos dispositivos sincronizados en tiempo real: el móvil del usuario y el vehículo con su pantalla táctil e interactiva.
La solución
En el móvil recreamos el flujo completo de un viaje: escribir la dirección, pedir el coche, esperar a que llegue, disfrutar del trayecto y llegar al destino.
En el vehículo instauramos el corazón del producto. Durante el viaje, un asistente de voz con IA – Jarvis – acompaña al pasajero, le habla para generar confianza y le muestra en la pantalla todo lo que puede hacer, en sincronía con su móvil. Lo más innovador es que el pasajero puede interactuar directamente con Jarvis para controlarlo absolutamente todo, sin necesidad de navegar por la interfaz. Solo con la voz, tocando un único botón para hablar, puede ajustar la temperatura, poner música ambiente, preguntar detalles del viaje o, incluso, pedir una parada de emergencia para detener el vehículo en una zona segura.
Reconocimientos
🏆 Con este proyecto ganamos el primer premio del Product Hackathon de Cabify.
Tecnologías: React, Node.js, ElevenLabs, PostgreSQL
UrbanDesk

Plataforma Full-Stack (React y Spring Boot) para gestión de incidencias con IA, reportes por voz automatizados y mapas interactivos.
UrbanDesk es una aplicación web integral diseñada para el reporte y gestión inteligente de incidencias urbanas. Permite a los ciudadanos localizar problemas en un mapa interactivo o registrarlos automáticamente mediante mensajes de voz procesados por IA, facilitando reportes rápidos con evidencias multimedia. El sistema optimiza la resolución de tareas para operadores y técnicos a través de un flujo de trabajo seguro basado en roles.
Tecnologías
- Frontend: Construido con React (Vite) y Leaflet.
- Backend: Desarrollado en Spring Boot, garantiza robustez mediante Spring Security y JPA/Hibernate, ofreciendo una arquitectura escalable con notificaciones automáticas y un historial detallado de cada incidencia.
Servicios de Inteligencia Artificial
- Transcripción de audio para rellenar una incidencia automáticamente.
- Validación de la descripción de las incidencias.
- Generación inteligente de informes detallados basados en información de la base de datos.
- Búsqueda de incidencias cercanas a una ubicación que compartan la misma descripción.
Reconocimientos
Este proyecto ha sido presentado a la competición empresarial ActuaUPM en su 23ª edición, logrando superar la primera etapa y avanzando a la segunda fase.
Tecnologías: React, Java, Spring Boot, PostgreSQL, Supabase, Koyeb
Weddo

Weddo es un proyecto individual: una plataforma web para bodas que conecta la organización con la experiencia de los invitados, desde la información del evento hasta los recuerdos compartidos.
Una boda, un espacio compartido
Weddo reúne la información, la organización y la participación de los invitados en una plataforma accesible desde el navegador. Cada pareja tiene su propio espacio y los invitados acceden mediante una invitación o el código de la boda.
Organización y experiencia de los invitados
- Información del evento: horarios, ubicación y detalles prácticos para preparar la asistencia.
- Distribución de mesas: un plano interactivo para organizar los asientos y consultar el sitio asignado desde el móvil.
- Muro social y álbum colaborativo: publicaciones, comentarios, fotos y vídeos compartidos entre los invitados.
- Mensajería y participación: chat, libro de firmas, propuestas de canciones y encuestas.
- Asistente con IA: respuestas a las dudas de los invitados a partir de la información de su boda.
Desarrollo individual
He desarrollado el proyecto de forma individual, conectando una interfaz React con un backend Node.js y Express, PostgreSQL y comunicación en tiempo real con Socket.IO. El producto incorpora gestión de cuentas, personalización de cada boda y pagos con Stripe.
El objetivo es reunir tareas que suelen quedar repartidas entre mensajes, documentos y galerías en una experiencia común para la pareja y sus invitados.
Tecnologías: React, Node.js, Express, PostgreSQL, Socket.IO, Stripe
OptimIA

Router inteligente de IA que optimiza modelos por coste, calidad y consumo energético
Este proyecto implementa un router inteligente de modelos de IA capaz de decidir dinámicamente qué modelo utilizar en función de:
- Categoría de la pregunta
- Dificultad estimada (easy / medium / hard)
- Modo del usuario (ahorro / equilibrado / calidad)
- Tabla real de performance
- Coste por token input/output
- Consumo energético relativo de cada modelo
Incluye, además:
- Clasificador automático en Python
- Selector óptimo por coste/calidad
- Streaming estilo ChatGPT
- Historial persistente
- Coste ahorrado
- Consumo evitado
- Dashboard con métricas globales
Tecnologías: React, Python, Firebase
QuesoPassion

Web divulgativa de quesos con información y valoraciones comunitarias sobre cada queso.
QuesoPassion es una web enfocada en quesos en la que los usuarios de internet pueden encontrar una amplia gama de estos lácteos clasificados según su origen. Pudiendo ver además:
- Una breve descripción del lácteo.
- Las recetas en las que es más común encontrarlo.
- Su valoración según los usuarios que acceden a la web.
Esto último se consigue gracias a que los visitantes pueden dejar su opinión mediante un rápido comentario en un apartado situado en la parte inferior de la página web.
El Origen
La web QuesoPassion surge como necesidad de crear un portal en internet en el que se pueda encontrar una gran diversidad de quesos, ya que es difícil encontrar una página web que facilite el acceso a esta información más divulgativa, ya que la mayoría son webs de tiendas y por consiguiente están limitadas a la variedad que estas ofrecen.
Tecnologías: PHP, MySQL, InfinityFree
Blog Online

Blog Node.js MVC con autenticación, gestión de usuarios, posts y adjuntos.
Esta es una aplicación web tipo blog o plataforma de contenidos desarrollada bajo el patrón MVC (Modelo-Vista-Controlador). Permite la gestión completa de:
- Usuarios y sesiones (registro, login y autenticación).
- Creación, edición y visualización de posts (artículos) que incluyen título, cuerpo y la posibilidad de añadir adjuntos (como imágenes o archivos), tal y como sugieren los modelos y vistas presentes en el proyecto.
Técnicamente, está construida sobre Node.js utilizando:
- El framework Express.
- Sequelize como ORM para interactuar con la base de datos (configurada por defecto para SQLite).
- El motor de plantillas EJS para la interfaz de usuario.
- La librería Passport para la seguridad y autenticación de usuarios (con estrategias local y Google OAuth), gestionando las sesiones de usuario de forma persistente.
Tecnologías: ExpressJS, Node.js, SQLite, Render
Web de productos

Catálogo React con búsqueda, filtros y análisis de comentarios con IA.
Esta es una aplicación web de catálogo de productos construida con React, Vite y Bootstrap. La aplicación puede obtener datos de productos de una API externa o usar datos locales simulados, mostrando una lista de artículos que incluyen detalles como precio, categoría, stock y valoraciones.
La funcionalidad principal permite a los usuarios:
- Buscar productos por nombre mediante una barra de búsqueda.
- Filtrarlos por categoría usando un menú desplegable que actualiza la URL.
Además, en la página de detalles del producto, se integra una característica avanzada que utiliza Inteligencia Artificial para generar automáticamente un resumen de los comentarios y opiniones de los usuarios sobre cada artículo.
Tecnologías: React, Firebase
App React Native
Aplicación React Native para listar productos y ver sus detalles.
Es una aplicación móvil de catálogo de productos construida con React Native y Expo. Su función principal es mostrar un listado de artículos que obtiene de un servidor o de datos locales, permitiendo al usuario navegar por ellos.
Cuando el usuario selecciona un producto en la pantalla de inicio, la aplicación navega a una vista de detalle específica. En esta pantalla se muestra:
- La información completa del ítem.
- Su imagen.
- Un resumen de las valoraciones (calculando la nota media y listando los últimos tres comentarios de los clientes).
Tecnologías: React Native
App Swift
Juego de preguntas y respuestas en iOS con persistencia de aciertos.
Juego de Preguntas y Respuestas (iOS)
Esta aplicación es un juego de preguntas y respuestas para dispositivos iOS que permite a los usuarios poner a prueba sus conocimientos. Al entrar, se muestra un listado de cuestionarios que se cargan desde un archivo de datos local.
Funcionalidades principales:
- Navegar por la lista de cuestionarios.
- Utilizar filtros para ver solo preguntas favoritas o aquellas aún no acertadas, facilitando el seguimiento del progreso.
Experiencia de juego:
- Al seleccionar una pregunta, se abre una pantalla de juego con el enunciado, una imagen adjunta y detalles del autor.
- La distribución visual es adaptable dependiendo de la orientación del dispositivo.
- El jugador puede escribir su respuesta y comprobar si es correcta.
- Guardado automático: Si el jugador acierta, la aplicación guarda el resultado para recordarlo en futuras sesiones.
Tecnologías: Swift
Transcripción de audio a texto

App React que graba audio y lo transcribe usando API Groq.
Esta aplicación es una herramienta web construida con React que permite a los usuarios grabar audio directamente desde su navegador y convertirlo a texto de manera automática.
Utiliza una librería especializada para gestionar la captura del micrófono, ofreciendo controles sencillos para:
- Iniciar, detener y escuchar la grabación.
- Descargar el archivo de audio resultante.
Para realizar la transcripción, la aplicación se conecta a la API de Groq utilizando el modelo Whisper. Una vez grabado el audio, el usuario puede enviarlo pulsando un botón, y el sistema procesa el archivo para devolver el texto transcrito en la pantalla.
También incluye funcionalidades para verificar los permisos del micrófono y validar que la clave de la API esté configurada correctamente.
Tecnologías: React, Node.js, Firebase
Proyecto Urbanite
Sistema de aparcamiento STM32 con ultrasonidos, LED, zumbador y máquinas de estados.
El proyecto Urbanite consiste en el desarrollo de un sistema de ayuda al aparcamiento basado en la placa de desarrollo STM32F446RE.
Su función principal es medir la distancia a los obstáculos mediante sensores de ultrasonidos y proporcionar información al conductor a través de:
- Un indicador visual LED.
- Un zumbador sonoro.
Arquitectura del Software
La arquitectura del software utiliza máquinas de estados finitos para controlar de forma modular cada componente. Existe una máquina de estados principal que coordina el sistema, permitiendo:
- Cambiar entre diferentes modos de funcionamiento, como la medición frontal o trasera.
- Gestionar estados de bajo consumo para ahorrar energía cuando no se está utilizando.
Destacado: Este proyecto ganó el premio al mejor proyecto de los presentados, siendo publicado en el perfil de YouTube de SDG2-ETSIT.
Tecnologías: C
Robot E-puck autónomo
Control de robot autónomo bombero para rescate y extinción de incendios.
Esta aplicación es el código fuente para el control de un robot autónomo E-puck dentro del simulador IRSIM. Su objetivo principal es simular el comportamiento de un bombero robótico que opera en un entorno que recrea un aula.
El robot utiliza una arquitectura basada en comportamientos para:
- Explorar el escenario de forma autónoma.
- Buscar 'víctimas' (estudiantes) que emiten señales de auxilio.
- Trasladarlas a una zona segura.
Además del rescate, el robot incorpora funcionalidades avanzadas para la gestión de emergencias:
- Es capaz de detectar fuegos activos.
- Buscar extintores.
- Priorizar la extinción del incendio sobre las tareas de rescate.
Para lograr esto, implementa algoritmos de navegación que incluyen la evasión de obstáculos y una arquitectura híbrida que combina comportamientos reactivos con la resolución de mapas para planificar rutas de forma inteligente.
Tecnologías: C++
Psicolingüística en OpenAI

Automatiza experimentos lingüísticos en español usando la API de OpenAI.
Esta aplicación es una herramienta automatizada para realizar experimentos de análisis lingüístico sobre expresiones en español utilizando modelos de inteligencia artificial de OpenAI (como GPT-4 y GPT-5). Su función principal es procesar lotes de texto y evaluarlos según diferentes dimensiones psicolingüísticas, como:
- Activación (arousal)
- Concreción
- Familiaridad
- Valencia
El flujo de trabajo se estructura en tres etapas:
- Preparación: se preparan los experimentos generando archivos de lotes a partir de una configuración y plantillas de instrucciones (prompts).
- Ejecución: se ejecutan dichos lotes enviándolos a la API de OpenAI.
- Recopilación y Procesamiento: finalmente, se recopilan y procesan los resultados para obtener métricas cuantitativas sobre cómo se perciben las expresiones analizadas.
Tecnologías: Python
Psicolingüística en Apertus

Experimentos psicolingüísticos utilizando el modelo de pesos abiertos Apertus-8B-Instruct.
Esta aplicación es un sistema automatizado para realizar experimentos psicolingüísticos utilizando modelos de lenguaje grandes, específicamente diseñado para evaluar la familiaridad de palabras con el modelo Apertus-8B-Instruct. Su función principal es presentar estímulos lingüísticos al modelo de inteligencia artificial y registrar sus respuestas de manera estructurada para su posterior análisis científico.
El flujo de trabajo se controla desde un cuaderno central que gestiona todas las etapas del proceso, desde la preparación de los datos y la generación de las instrucciones para el modelo, hasta la ejecución de la prueba y la validación de los resultados obtenidos. El diseño permite configurar fácilmente diferentes experimentos separando los datos y las configuraciones específicas en carpetas independientes, lo que facilita la replicación y la escalabilidad de las pruebas.
Tecnologías: Python, Jupyter Notebook
Robot E-puck potenciado con algoritmos evolutivos
Robot E-puck usa algoritmos evolutivos para aprender a apagar fuegos.
Proyecto de Robótica Evolutiva
Esta aplicación es un proyecto de robótica evolutiva desarrollado para el simulador IRSIM, cuyo objetivo es diseñar el controlador de un robot autónomo E-puck.
Tarea Principal
Consiste en una versión simplificada de un escenario de rescate:
- Navegación: El robot debe navegar por un entorno sin obstáculos.
- Objetivos:
- Localizar 'fuegos' (representados por luces rojas y suelo gris).
- Buscar 'extintores' (luces azules y suelo negro).
- Comportamiento: Demostrar comportamientos de búsqueda y reacción a estímulos visuales y de suelo.
Aspectos Técnicos
El proyecto implementa y compara diferentes arquitecturas de redes neuronales, incluyendo:
- Redes estáticas (ANN)
- Redes neuronales recurrentes de tiempo continuo (CTRNN)
Para configurar los parámetros de estas redes, se utilizan algoritmos genéticos que evolucionan los controladores a lo largo de varias generaciones. El sistema emplea una función de fitness (evaluación de idoneidad) para medir el desempeño de cada robot, aplicando operadores evolutivos como:
Esto permite mejorar progresivamente el comportamiento de los agentes autónomos.
Tecnologías: C++