Hackathon UPM 2026 | Next Digital
Protegiendo a la Comunidad Valenciana con Inteligencia Artificial y Comunicacion en Tiempo Real
SARC es una plataforma Full-Stack disenada para proteger a los ciudadanos antes, durante y despues de desastres climaticos. Combinando datos meteorologicos en tiempo real, Inteligencia Artificial generativa (LLM) y comunicacion mediante WebSockets (ActionCable), el sistema ofrece recomendaciones de autoproteccion hiper-personalizadas basadas en la vulnerabilidad de cada usuario.
Stack: Ruby on Rails 8 (API) + React 18 + Vite + SQLite + ActionCable + AWS Bedrock
Reto: Gestion de Emergencias Climaticas - Comunidad Valenciana
- Descripcion
- Caracteristicas Principales
- Roles y Funcionalidades
- Arquitectura
- Tecnologias
- Estructura del Proyecto
- Instalacion y Ejecucion
- Variables de Entorno
- Guia de Pruebas para el Jurado
- API del Backend
- Modelo de Datos
- Enfoque Sostenible
- Equipo EcoCode
- Licencia
SARC responde a una necesidad critica: la informacion generica no salva vidas. Durante una DANA o inundacion, una persona en sotano necesita instrucciones distintas a alguien en planta alta; una persona con movilidad reducida requiere rutas de evacuacion accesibles.
Nuestro sistema integra:
- API Meteorologica del Hackathon: Datos en tiempo real de la Comunidad Valenciana.
- Perfil de Vulnerabilidad Ciudadana: Ubicacion, tipo de vivienda, necesidades especiales, mascotas, etc.
- LLM con Prompt Engineering Contextual: Genera recomendaciones que combinan clima + perfil + protocolos oficiales.
- Sistema de Alertas Push: WebSockets para notificaciones inmediatas sin polling.
Resultado: Un ciudadano recibe "Cierra ventanas, sube a planta 2a y evita el garaje" en lugar de "Protegete de la lluvia".
-
Inteligencia Artificial Contextual (Prompt Engineering Avanzado): La IA no da consejos genericos. Adapta sus instrucciones de evacuacion y supervivencia considerando el tipo de vivienda (ej. sotano vs. piso alto), la ubicacion y las necesidades especiales (silla de ruedas, dependientes, ninos, mascotas).
-
Asistente Virtual Bidireccional: Un chat en vivo donde el ciudadano puede consultar dudas criticas (ej. "Que hago con los electrodomesticos?") y recibir respuestas autoritarias y seguras basadas en el contexto meteorologico actual.
-
Alertas en Tiempo Real (WebSockets): Mediante ActionCable, los Administradores (Backoffice) pueden emitir alertas que cambian la interfaz y notifican a los ciudadanos al instante, sin necesidad de refrescar la pagina.
-
Seguridad y Control de Acceso (RBAC): Flujo de registro seguro que diferencia entre Ciudadanos y Administradores (mediante token secreto de validacion), preparado para integracion federada (OAuth2).
-
Trazabilidad y Registro Historico: Todo el sistema guarda un registro inmutable de alertas oficiales, datos meteorologicos y consultas a la IA, permitiendo auditorias y seguimiento post-emergencia.
- Registro con perfil de vulnerabilidad: Recoge ubicacion, vivienda, movilidad, mascotas, contactos de emergencia.
- Consulta meteorologica en tiempo real: Datos oficiales de la API del hackathon.
- Recomendaciones IA personalizadas: Prompt que inyecta perfil + clima + reglas de la CV.
- Chat con asistente virtual: Preguntas en lenguaje natural con respuestas contextualizadas.
- Alertas push en tiempo real: Notificaciones visuales + sonido al emitir alertas criticas.
- Historial personal: Consultas meteorologicas, recomendaciones y alertas recibidas.
- Dashboard de emergencia: Vista agregada por provincia: clima, alertas activas, ciudadanos registrados.
- Gestion de alertas: Crear/editar alertas con niveles verde/amarillo/rojo, alcance provincial o global.
- Gestion de usuarios: Listado, busqueda y creacion de nuevos administradores (con token secreto).
- Auditoria y logs: Historial global de consultas meteorologicas y llamadas al LLM.
- Emision push: Alertas que se propagan instantaneamente via WebSockets.
Frontend (React + Vite, puerto 5173)
|
| HTTP/JSON + WebSocket (ActionCable)
v
Backend (Ruby on Rails API, puerto 3000)
|
|--- JWT Auth
|--- ActionCable
|--- Services: WeatherService, LLMService, AlertService
|
v
SQLite (desarrollo) / PostgreSQL (produccion)
|
v
API Hackathon AWS (/weather, /prompt con Bedrock)
Backend
- Ruby 3.2+
- Ruby on Rails 8
- ActiveRecord
- JWT (autenticacion)
- ActionCable (WebSockets)
- Rack-CORS
Frontend
- React 18
- Vite
- Axios
- Tailwind CSS
- React Context + Hooks
Base de datos
- SQLite3 (desarrollo)
- PostgreSQL (produccion, opcional)
Integraciones Externas
- API UPM Hackathon (datos meteorologicos y LLM)
- Amazon Bedrock (AWS) - Motor de modelos de lenguaje
ecocode-sarc/
├── backend-hackathon/ # Ruby on Rails API
│ ├── app/
│ │ ├── channels/ # AlertChannel (ActionCable)
│ │ ├── controllers/api/ # Auth, Citizen, Admin controllers
│ │ ├── models/ # User, Alert, WeatherLog, LLMLog
│ │ └── services/ # WeatherService, LLMService, PromptBuilder
│ ├── config/
│ │ ├── routes.rb # API endpoints
│ │ └── initializers/ # CORS, JWT config
│ ├── db/
│ │ ├── schema.rb
│ │ └── migrate/
│ └── Gemfile
│
├── frontend-hackathon/ # React SPA
│ ├── src/
│ │ ├── components/ # UI reutilizable
│ │ ├── pages/ # Login, Dashboard, Perfil, AdminPanel
│ │ ├── services/ # API client, WebSocket connection
│ │ └── context/ # AuthContext, AlertContext
│ ├── package.json
│ └── vite.config.js
│
├── README.md
├── package.json
└── package-lock.json
- Ruby 3.2+ (rbenv o rvm recomendado)
- Node.js 18+ y npm
- SQLite3 (incluido en Ruby)
cd backend-hackathon
# Instalar dependencias
bundle install
# Configurar base de datos
rails db:create
rails db:migrate
# Iniciar servidor (puerto 3000)
rails server -p 3000Backend disponible en: http://localhost:3000
cd frontend-hackathon
# Instalar dependencias
npm install
# Iniciar servidor de desarrollo
npm run devFrontend disponible en: http://localhost:5173
Nota: Asegurate de que el frontend apunte a http://localhost:3000 como URL base de la API.
RAILS_ENV=development
DATABASE_URL=sqlite3:db/development.sqlite3
JWT_SECRET_KEY=tu-clave-secreta-super-segura
HACKATHON_API_BASE=http://ec2-54-171-51-31.eu-west-1.compute.amazonaws.com
HACKATHON_BEARER_TOKEN=tu-token-obtenido-del-login
ADMIN_REGISTRATION_TOKEN=UPM_HACK_2026_SECRET
CORS_ALLOWED_ORIGINS=http://localhost:5173
VITE_API_BASE_URL=http://localhost:3000
Importante: Nunca subas archivos .env con credenciales reales al repositorio.
Para comprobar la potencia de SARC, recomendamos el siguiente flujo de pruebas:
Registrate como "Ciudadano", indicando que vives en un Sotano y usas Silla de Ruedas.
Ve al Asistente de IA y pregunta: "El agua esta entrando, que hago?". Observa como la IA te da instrucciones especificas para no usar ascensores y como te pide que contactes al 112 inmediatamente.
Abre el sistema en dos navegadores distintos. En uno, entra como Administrador (usa la clave secreta UPM_HACK_2026_SECRET durante el registro). En el otro, mantien la vista del Ciudadano.
Desde el panel de Administrador, lanza una alerta global. Veras como la pantalla del ciudadano se actualiza al instante (WebSockets) sin recargar la pagina.
Revisa el "Historial de Actividad" para ver como el sistema ha guardado toda la traza de la emergencia.
POST /api/auth/register- Registro de ciudadano/adminPOST /api/auth/login- Login (devuelve JWT)GET /api/auth/me- Perfil del usuario autenticadoPUT /api/auth/me- Actualizar perfil
GET /api/citizen/weather- Datos meteorologicosPOST /api/citizen/recommendations- Recomendaciones IAGET /api/citizen/alerts- Alertas activas (por provincia)GET /api/citizen/history- Historial personal
GET /api/admin/dashboard- Estadisticas por provinciaPOST /api/admin/alerts- Crear alertaDELETE /api/admin/alerts/:id- Desactivar alertaPOST /api/admin/users- Crear administradorGET /api/admin/audit- Logs de auditoria
- email (unico), password_digest, role (citizen/admin)
- provincia, municipio, codigo_postal, cerca_cauce
- tipo_vivienda, numero_planta, num_personas
- movilidad_reducida, persona_dependiente
- detalle_mascotas, telefono_emergencia
- titulo, mensaje, nivel (verde/amarillo/rojo)
- provincia (vacio = todas), activa
- created_by (referencia a User), timestamps
- user_id (referencia)
- request_payload, response_payload (JSON)
- endpoint, timestamps
SARC contribuye a la resiliencia climática mediante:
- Prevencion hiperpersonalizada: Recomendaciones adaptadas a la realidad fisica de cada ciudadano reducen exposicion a riesgos.
- Inclusion y accesibilidad: Diseno pensado para colectivos vulnerables (movilidad reducida, personas mayores, familias con ninos).
- Concienciacion contextual: El ciudadano entiende como le afectan los fenomenos extremos en su situacion real.
- Reduccion de desplazamientos innecesarios: Instrucciones claras evitan salir a zonas de riesgo durante emergencias.
- Codigo eficiente: Arquitectura ligera con SQLite en desarrollo minimiza recursos computacionales.
Hackathon UPM 2026 - Next Digital
Universidad Politecnica de Madrid
Transformando tecnologia en salvavidas
| Nombre | Rol |
|---|---|
| Junjing Wu | Frontend / React + UX |
| Adriana Zambrano Argandoña | Backend / APIs + WebSockets |
Proyecto desarrollado con fines educativos para el Hackathon UPM 2026, organizado por Next Digital.
Codigo bajo licencia MIT. La API externa y sus terminos de uso pertenecen a la organizacion del evento.
SARC - Sistema de Alerta y Resiliencia Ciudadana