Reto edición NASA Space Apps Challenge
Universidad Católica del Uruguay
Tutores:
Sebastián Feirres
Mateo Machado
Integrantes del grupo:
Agustin Negreira
Rodrigo Doldán
Enzo Barreto
Brian Morat
Felipe Seré
Montevideo, Uruguay
23 de octubre
El presente documento técnico constituye la descripción del trabajo realizado posterior a la finalización del evento NASA Space Apps Challenge 2025, única y exclusivamente para el reto informático académico propuesto por la Universidad Católica del Uruguay, basándonos en la continuación y mejora de lo realizado en dicho evento.
En este se detallan los principales aspectos técnicos del sistema, su arquitectura, el alcance del prototipo, las decisiones de diseño adoptadas y los pasos previstos para su evolución. El objetivo es dejar registro claro del trabajo realizado y servir como guía base para futuras iteraciones del proyecto.
El proyecto se desarrolló en el marco del desafío “Will it Rain on My Parade?” del NASA Space Apps Challenge 2025, cuyo objetivo consistía en diseñar una herramienta para ayudar a las personas y organizaciones a planificar actividades al aire libre considerando la probabilidad de condiciones climáticas adversas. El reto planteaba la utilización de datos satelitales y registros históricos de la NASA para estimar patrones climáticos y proporcionar información útil para la toma de decisiones.
Como respuesta a este desafío, se propuso el desarrollo de una aplicación web que permitiera a los usuarios conocer la probabilidad de experimentar distintas condiciones meteorológicas (temperatura, precipitación, nubosidad, viento, entre otras) en una fecha y lugar determinados, incluso con meses de anticipación.
Para ello se utilizó la NASA POWER API como fuente de datos climáticos históricos y se implementó una arquitectura compuesta por un frontend en Vite + React y un backend en Node.js + Express. El backend consumió la API de la NASA y procesó los datos para luego servirlos al frontend. Además, se investigaron distintas metodologías de forecasting probabilístico basadas en climatología e inferencia estadística, desarrollando una versión preliminar del algoritmo con el objetivo de optimizarlo en futuras iteraciones.
El prototipo desarrollado constituye una primera versión funcional de la solución propuesta para el desafío “Will it Rain on My Parade?”. Su propósito fue validar la factibilidad técnica de integrar datos climáticos oficiales de la NASA, procesarlos estadísticamente y presentarlos de manera clara al usuario final a través de una interfaz web.
El sistema implementado consta de cuatro componentes principales:
El prototipo incluye un sistema de autenticación mediante JSON Web Tokens (JWT) que protege las rutas relacionadas con la gestión de locaciones favoritas. Los usuarios autenticados pueden crear, eliminar y consultar sus locaciones, así como obtener el pronóstico de siete días para cualquiera de ellas.
Además, se incorporó la funcionalidad para descargar los resultados en formato JSON o CSV, permitiendo la reutilización o análisis externo de los datos generados.
El núcleo del procesamiento estadístico implementa un algoritmo de forecasting probabilístico basado en análisis de series históricas. Este modelo, en lugar de intentar predecir valores exactos, estima probabilidades y rangos de confianza para distintas condiciones climáticas, calculadas a partir de promedios y desviaciones estándar.
Si bien el sistema aún no integra modelos predictivos avanzados ni visualizaciones con funcionalidades altamente desarrolladas pensando en el 100% de las heurísticas de usabilidad, el prototipo desarrollado representa adecuadamente la esencia de la solución final, al demostrar la viabilidad técnica del flujo completo de autenticación, obtención, procesamiento, cacheo, exportación y visualización de datos.
Se considera, por tanto, que el alcance alcanzado resulta representativo y oportuno para el objetivo y contexto académico del proyecto, ya que valida la arquitectura propuesta, prueba la integración con fuentes oficiales de información y sienta las bases para una futura versión ampliada y de producción del sistema.
El sistema se compone de cinco elementos principales: un frontend web desarrollado en React, un backend en Node.js con Express encargado de la lógica de negocio, una base de datos SQLite para la persistencia de usuarios y locaciones, un sistema de cacheo Redis para acelerar respuestas de pronóstico, y dos fuentes de datos externas (NASA POWER API y una API de pronóstico meteorológico real).
El flujo general consiste en que el usuario interactúa con el frontend, que envía solicitudes al backend. Éste procesa la información, consulta las fuentes necesarias, almacena resultados en la caché o la base de datos y devuelve la respuesta al cliente (este flujo será representado de manera más detallada en la sección de diagramas de arquitectura).
Durante la construcción del prototipo se evaluaron diferentes alternativas tecnológicas para cada uno de los componentes de la arquitectura. La selección final respondió principalmente a la familiaridad del equipo con las herramientas, la simplicidad de implementación, la portabilidad del sistema y la necesidad de cumplir con los tiempos acotados tanto del hackathon NASA Space Apps Challenge como del reto académico posterior en la UCU.
A continuación, se detallan las decisiones adoptadas y su justificación:
Se optó por Node.js junto con el framework Express debido a la experiencia previa del equipo con este entorno, su baja curva de aprendizaje y la facilidad para construir APIs REST de forma rápida y modular.
Alternativas como Django (Python) o Spring Boot (Java) fueron descartadas por requerir una configuración más extensa y un mayor tiempo de desarrollo inicial, lo cual resultaba poco viable en el contexto del desafío.
La elección permitió un desarrollo ágil, compatibilidad con una gran cantidad de librerías y un entorno de ejecución eficiente en términos de concurrencia.
Para la capa de presentación se seleccionó React junto con Vite como herramienta de build. La decisión se basó en la familiaridad del grupo con React y en las ventajas de Vite en tiempos de compilación y recarga, lo que permitió un flujo de trabajo fluido durante el desarrollo.
Otras alternativas consideradas de forma superficial fueron Vue.js y Angular, pero se priorizó React por su ecosistema maduro, su enfoque declarativo y la rapidez de desarrollo que ofrecía dada la experiencia previa del equipo (justamente habiendo trabajado con estas tecnologías en la asignatura DWYM).
La base de datos elegida fue SQLite, fundamentalmente por su simplicidad, portabilidad y bajo costo de configuración.
En comparación con sistemas como PostgreSQL o MySQL, SQLite resultó más adecuada para un prototipo que debía ejecutarse fácilmente en entornos locales o de demostración, sin requerir un servidor de base de datos dedicado.
Además, la familiaridad del equipo con esta herramienta permitió implementar la persistencia de datos (usuarios y locaciones favoritas) de manera rápida y confiable.
Se incorporó Redis como sistema de caché para almacenar temporalmente los resultados de pronósticos, tanto históricos como de corto plazo.
Esta decisión se tomó por su simplicidad de uso, rendimiento en operaciones en memoria y porque es una de las herramientas más reconocidas para este tipo de tareas.
Si bien se consideraron alternativas como la implementación de caché en memoria dentro del propio backend, Redis ofrecía mayor escalabilidad y flexibilidad, permitiendo evitar llamadas repetitivas a las APIs externas y reduciendo significativamente los tiempos de respuesta.
Se emplearon dos APIs externas:
En conjunto, las decisiones tomadas reflejan un enfoque orientado a la eficiencia, la simplicidad y la ejecución rápida, priorizando herramientas que el equipo ya dominaba para garantizar la viabilidad del prototipo dentro de los plazos del desafío.
Incompleto.
En caso de continuar con el desarrollo del proyecto, los siguientes pasos se orientarían a profundizar el modelo de pronóstico, optimizar y mejorar la experiencia de usuario y preparar la aplicación para un entorno de producción.
Los principales aspectos a abordar serían los siguientes:
Incompleto.