OlaEcuador — Un pronóstico de surf que revisa su propia tarea
30 de septiembre de 2026
Visión general
OlaEcuador responde una pregunta: ¿a qué hora vale la pena de verdad meterse al mar? Puntúa cada hora de la semana entrante para un tramo de la costa del Pacífico ecuatoriano, tanto para surfear como para un simple día de playa, combinando modelos gratuitos de oleaje y viento con las mareas oficiales del INOCAR, la luz del día local y las alertas de estado del mar del propio INOCAR.Lo diseñé y lo construí: la pipeline de datos, el scoring, el mapa, los gráficos y la interfaz.Lo que lo hace más que otra fachada de pronóstico es la parte que casi todos los pronósticos se saltan: está construido para averiguar si sus propios números son ciertos. Es un proyecto de validación, y la honestidad sobre la incertidumbre es justamente el punto.
El problema real
La costa ecuatoriana no está bien atendida por los grandes pronósticos de surf. Los modelos globales existen, pero se muestrean mar adentro, en aguas profundas, y el número que le importa a un surfista —la ola que de verdad rompe en Montañita a las 7am— es producto de una docena de factores locales que esos modelos suavizan.Así que la pregunta honesta de partida no fue «¿cómo muestro un pronóstico?». Fue: ¿los datos gratuitos de modelos, muestreados a unos 5 km mar adentro, dicen algo útil sobre las olas que realmente reciben los surfistas aquí? La primera entrega está deliberadamente acotada como una prueba de validación sobre dos spots, Montañita y Engabao, para responder exactamente eso antes de pretender cubrir toda la costa.Diseñar alrededor de esa pregunta, y no alrededor de una tarjeta bonita de pronóstico, es lo que definió todo lo demás.
Cómo funciona el puntaje
Cada hora recibe un puntaje de surf construido con factores que se multiplican entre sí, de modo que un solo factor malo arrastra toda la hora hacia abajo — que es como funciona el surf de verdad:
El tamaño no es la altura cruda del modelo. Cada tren de swell se escala por su exposición —máximo dentro de la ventana de swell del spot, cayendo a cero a medida que el ángulo se aleja 30° fuera de ella, y reducido cuando el swell llega oblicuo—. El swell expuesto se convierte en altura de rompiente (con la relación de Komar y Gaudiano de 1983), se combina entre trenes por energía y se compara con la ola ideal del spot.
El viento se pondera según qué tan onshore es respecto a hacia dónde mira la playa. El viento onshore cuenta casi por completo en contra; el offshore apenas la toca.
La marea compara la fase del INOCAR con las horas de alrededor y la ajusta a la marea preferida del spot. Suaviza el puntaje pero nunca lo pone en cero.
Un puntaje de día de playa aparte es una media geométrica ponderada de agua calma, viento suave, sin lluvia, sol y calor, por la luz del día — porque «buen día de playa» y «buen surf» son preguntas distintas.
Las alertas del INOCAR mandan sobre todo: una alerta de mar agitado limita el puntaje, una de muy agitado casi lo anula, y esas horas nunca se sugieren como «las mejores».
Cada puntaje lleva su desglose por componente y razones legibles, para que la interfaz siempre pueda explicar por qué una hora puntuó lo que puntuó en lugar de solo mostrar un número.
La interfaz
El panel de la costa es un mapa de MapLibre con el campo de estado del mar en vivo —una malla de celdas oceánicas coloreadas por altura de ola con flechas de dirección, conmutable al campo de viento— con cada spot coloreado por su puntaje. Puedes darle play y recorrer la semana y ver llegar el swell. Alrededor del mapa hay tarjetas KPI con sparklines, un ranking de spots, una rosa de swell contra la ventana de cada spot y un meteograma.El laboratorio del spot es donde se ve el trabajo real. Un heatmap de nueve días de puntajes horarios se abre en el detalle de una hora con sus razones y una brújula de playa. Dibuja la curva de marea del INOCAR contra la marea modelada por Open-Meteo para que las veas discrepar. Y expone el spread de modelos: tres modelos de oleaje contra seis de viento, dieciocho combinaciones, porque cerca de la costa discrepan lo suficiente como para que ocultarlo sería deshonesto.
Lo que lo hace real: el diario de campo
Cualquier pronóstico puede verse autoritario. Este está hecho para ser comprobado.Antes o después de una sesión, abres el spot, tocas la hora y registras lo que de verdad pasó en el diario de campo: una valoración del uno al cinco, el tamaño en pies, el viento que sentiste y de dónde viene la información — tu propia sesión, o lo que reportan surfistas y escuelas locales. Cada entrada congela lo que las dieciocho combinaciones de modelos predijeron para esa hora en el momento de registrar.Luego una tabla de concordancia ordena las combinaciones por error medio y sesgo. Con veinte o más entradas por spot, te dice en qué modelo de oleaje y de viento confiar cerca de esta costa, y si el puntaje es sistemáticamente optimista. Si un spot falla siempre en una dirección, un panel de afinado ajusta su orientación, ventana de swell, mejor marea o tamaño ideal, y la página vuelve a puntuar en vivo.Ese ciclo —predecir, registrar la realidad, medir la brecha, afinar— es el producto. Todo lo demás está a su servicio.
Lo que mostraron los datos
Construir la herramienta de validación produjo de inmediato hallazgos que valía la pena tener, que es el objetivo de construirla:
Las mareas 2026 del INOCAR existen como datos abiertos —un CSV horario en hora local— pero cubren nueve estaciones, no las veinticinco que uno supondría. La Libertad es la más cercana a ambos spots. La marea modelada de Open-Meteo coincide en fase dentro de una hora pero se pasa en el rango, así que ganan los datos oficiales del INOCAR.
La malla del modelo marino es gruesa —unos nueve kilómetros— y las celdas de tierra no devuelven nada, así que la app ancla deliberadamente cada spot a una celda oceánica sensata en vez de la meramente más cercana.
Los modelos discrepan mucho cerca de la costa. En una corrida temprana, el pico diario previsto de Montañita fue de 37 a 77 según la combinación de modelos. Un modelo llamó al swell principal un mar de viento de período corto mientras otro reportaba un groundswell de período largo para la mismísima hora. El viento del mediodía fue de 6 a 20 km/h entre modelos. Esa discrepancia es justo lo que el diario de campo existe para resolver — y justo por qué un pronóstico de un solo número para esta costa sería una mentira con confianza.
Tecnologías utilizadas
Framework: Next.js 16 (App Router, páginas estáticas refrescadas en un intervalo de 3 horas) y React 19.
Mapa: MapLibre GL con teselas de OpenFreeMap — sin API key, uso comercial permitido.
Gráficos: ECharts, con tree-shaking, para el meteograma, la línea de tiempo y la rosa de swell.
Datos: modelos marinos y meteorológicos de Open-Meteo (todas las combinaciones traídas en una sola llamada por lotes), CSVs de marea del INOCAR, alertas de estado del mar del INOCAR.
Estilos: propiedades personalizadas de CSS con temas claro y oscuro.
Pruebas: Vitest sobre el scoring y el parser de mareas.
Herramientas: un «spike» de línea de comandos que imprime la tabla horaria para cualquier spot y combinación de modelos y vuelca cada hora a CSV, para correr la comparación de modelos sin el navegador.
El scoring es TypeScript puro, sin entrada ni salida propia, compartido sin cambios entre el servidor, la línea de comandos y el navegador — lo que significa que el eventual trabajo programado que escriba puntajes en una base de datos puede reutilizar exactamente el mismo código que corre la interfaz.
Retos y aprendizajes
Acotar a una pregunta, no a una costa. El movimiento disciplinado fue entregar dos spots y un ciclo de validación en vez de un pronóstico de toda la costa que se ve terminado y podría estar mal. Un pronóstico que no puedes comprobar es decoración.La discrepancia de modelos es un problema de diseño, no un bug que ocultar. El instinto es elegir un modelo y presentar un número limpio. Cerca de esta costa eso sería deshonesto, así que el spread se muestra a propósito y el diario de campo existe para, con el tiempo, colapsarlo en una elección justificada.Los datos gratuitos vienen con límites reales, y nombrarlos es el trabajo. El plan gratuito de Open-Meteo es no comercial, la malla marina es gruesa y la marea modelada se pasa de rango. Cada una de esas cosas está escrita en el proyecto en lugar de disimulada, porque la credibilidad de un pronóstico es exactamente su honestidad sobre lo que no sabe.
Resultado
Un pronóstico honesto y funcional de surf y día de playa para dos spots ecuatorianos, envuelto en las herramientas para probar si merece que se confíe en él — el mapa para ver la semana, el laboratorio para entender una hora y el diario de campo para calificar el pronóstico contra el mar mismo. Está hecho para expandirse al resto de la costa solo cuando los datos se lo hayan ganado, y cada pieza del scoring ya está lista para mudarse a un backend programado sin reescribirse.El sitio tiene cuidado de decir lo que es: muestra cuándo las condiciones se ven agradables, no cuándo son seguras. Respeta las banderas, los salvavidas y las alertas del INOCAR.