BikeControl (SwiftControl)
Zwift Click과 Shimano 컨트롤러를 MyWhoosh와 Rouvy와 Zwift에서 쓴다
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Previsión de surf profesional para la costa de Castellón (Vinaròs, Peñíscola, Oropesa, Benicàssim, Grao de Castellón, Almassora, Burriana, Nules y Almenara), con estética y funciones inspiradas en Surfline y Surf-Forecast. Arquitectura 100 % estática, coste 0 €: sin backend en producción, servida desde GitHub Pages, con automatización diaria en GitHub Actions.
Demo: https://joorcs96.github.io/MeteoSurf_Cs/
Una PWA (Progressive Web App) instalable que calcula, en el propio navegador y a partir de datos abiertos de Open-Meteo, la previsión de olas, viento, marea y calidad de cada spot de la costa de Castellón, y la presenta junto a cámaras en directo, un mapa y un asistente de previsión en español que responde a preguntas sobre cuándo y dónde surfear.
votar.html): formulario para que los usuarios valoren cómo
estaban las olas realmente, guardado en local y con opción de enviarlo como issue de
GitHub para retroalimentar el modelo de calidad.Escala de 8 niveles (Plato, Muy malo, Malo, Malo-Regular, Regular, Regular-Bueno, Bueno, Épico) calibrada para el Mediterráneo: con 0.5–0.7 m en rompiente y poco viento ya hay buen baño, y un periodo de 4–6 s no penaliza (es lo habitual en esta costa); a partir de 7 s se considera mar de fondo de calidad. La calidad combina el tamaño de ola en rompiente (según la exposición y ventana de mar de cada spot), el periodo, y la velocidad y dirección del viento relativa a la orientación de la playa.
ncep_gfswave016, vía Open-Meteo Marine): modelo de respaldo para rellenar
los huecos del modelo principal en los días 11–16, donde este ya no tiene datos.Todo se descarga directamente desde el navegador del usuario; no hay servidor intermedio en producción.
├── index.html # Punto de entrada de la PWA
├── css/
│ └── app.css # Estilos (tokens de color, claro/oscuro, componentes)
├── js/
│ ├── app.js # Enrutado, render de vistas y orquestación general
│ ├── spots.js # Catálogo de spots (coordenadas, orientación, ventanas)
│ ├── forecast.js # Descarga Open-Meteo, física de rompiente y calidad
│ ├── compass.js # Brújula SVG del spot (orientación y ventanas)
│ ├── cams.js # Reproductor de webcams (iframe/YouTube/HLS/MJPEG/JPG)
│ └── assistant.js # Asistente de previsión local en español
├── manifest.json # Manifiesto de instalación PWA
├── sw.js # Service Worker (caché y revalidación)
├── icon.svg / icon-192.png / icon-512.png
├── webcams.json # Catálogo de cámaras costeras y su estado
├── votar.html # Formulario de reporte de sesión
├── backend/
│ ├── motor_fisica.py # Física costera y cálculo de calidad (Python)
│ ├── actualizar_prevision.py # Histórico diario y alerta WhatsApp (GitHub Actions)
│ ├── actualizar_webcams.py # Verificación y refresco del catálogo de webcams
│ └── test_motor_fisica.py # Tests unitarios del motor físico
├── scripts/
│ ├── rewind.py # Graba clips Rewinds de las cámaras y mantiene el índice
│ └── test_rewind.py # Tests unitarios del grabador de Rewinds
├── data/
│ └── rewinds.json # Índice de clips Rewinds (lo escribe el workflow)
├── .github/workflows/
│ ├── prevision_diaria.yml # Cron diario: histórico de olas y alerta WhatsApp
│ ├── rewinds.yml # Cron cada 2 h en horas de luz: graba y publica clips
│ └── webcams.yml # Cron cada 30 min: verifica y actualiza webcams.json
├── historico_olas.csv # Registro histórico de observaciones
└── MASTER_CONTEXT.md # Contexto de arquitectura y decisiones del proyecto
No requiere build ni dependencias: es HTML/CSS/JS estático con módulos ES.
python -m http.server 8000
Y abrir http://localhost:8000/.
Para los tests (Python, solo librería estándar):
python -m unittest backend.test_motor_fisica
python -m unittest scripts.test_rewind
Para grabar un clip de Rewinds a mano (hacen falta ffmpeg y ffprobe en el PATH):
python scripts/rewind.py --cameras cv_grao_castellon
Graba 20 s de las cámaras HLS de Turisme Comunitat Valenciana, los baja a 480p con desenfoque
(para que no se reconozcan caras) y añade la previsión de ese momento al índice
data/rewinds.json. Solo graba entre las 8:00 y las 20:00 de Madrid y si algún spot con cámara
llega a 0,5 m de oleaje. Con --subir publica los clips como assets de la release mensual
rewinds-AAAA-MM; el workflow .github/workflows/rewinds.yml es quien lo hace de forma
automática.
Publicado como sitio estático en GitHub Pages, rama main del repositorio
Joorcs96/MeteoSurf_Cs, en https://joorcs96.github.io/MeteoSurf_Cs/. No se usa Netlify ni
ningún otro hosting; no hay backend en producción, solo tres workflows de GitHub Actions que
mantienen actualizados el histórico de olas, el catálogo de webcams y el índice de clips
Rewinds.