Formato reutilizable para diseñar viajes: src/<viaje>/viaje.yaml es la única
fuente de verdad y de ahí se generan dos páginas estáticas autocontenidas —
el itinerario legible y el mapa interactivo (Leaflet vendorizado, sin CDN).
El HTML es una proyección 1:1 verificada del YAML: verify_roundtrip.py
invierte el render en cada build y compara contra la fuente; todo lo calculado
(horarios encadenados, duraciones de caminata, avisos) va marcado
data-derived y queda fuera de la comparación.
En vivo: https://ratgr.github.io/viajes-2/2026-Japon/mapa.html · https://ratgr.github.io/viajes-2/2026-Japon/itinerario.html
src/2026-Japon/ viaje.yaml (fuente) · plantillas · config.yaml
static/ (app.html + fotos/ + fachadas/ + manifest — va tal cual al sitio)
build/ pipeline: render.py + build_*.py + verify_roundtrip.py
contract.py (vocabulario renderer↔verificador)
dev_server.py (edición local opcional)
assets/ (css/js/vendor copiados al release)
pages/<viaje>/ release generado (fuera de git: la Action lo publica)
scratch/ herramientas fuera del pipeline (migraciones, OSM…)
- Edita
src/2026-Japon/viaje.yaml— desde el editor web de GitHub, el móvil, o por API (contents). Necesitas ser colaborador del repo; para la API basta un PAT fine-grained concontents: read/writeSOLO de este repo (uno por persona). - Al hacer commit, la Action
build & deploycorre sola: construye ambas páginas, verifica el round-trip y publica el sitio por Pages (artefacto del build). Ediciones rápidas se cancelan entre sí (solo se construye el último estado). - GitHub Pages sirve el resultado ~90 s después del commit.
Los diagnósticos del build (horarios incompletos, caminatas que no cuadran,
teletransportes 🌀) salen en el log de la Action — y como
python build/dev_server.py 8791 # sirve todo con no-store + API dev
python build/dev_server.py 8791 --share # 0.0.0.0 para túnel/LAN
En el mapa aparece el botón 🛠 (solo cuando la página la sirve el dev server): click en cualquier fila —también los pasos dentro de options— abre su YAML tal cual está en el archivo (los comentarios sobreviven: la edición es por empalme de texto). Desde el cajón:
- Guardar / Rebuild / Deploy 🚀 — guardar escribe (y auto-commitea); rebuild reconstruye local; deploy hace push y la Action publica.
- + antes / + después / ▲ / ▼ — insertar y mover pasos.
- Referencias — cada clave referenciada se edita ahí mismo; una clave que no existe (o el input ➕ ref) abre modo CREAR con plantillas (lugar/caminata/tren/bus/ferry) = referencias sin cumplir.
- Geometría — editor de vértices (arrastrar/insertar/borrar),
Ajustar a calle (OSRM peatonal para caminatas), Geo auto (traza la
ruta entre las anclas vecinas del paso). Toda edición reporta
N m ≈ ~X min a piecon la misma regla del build (4 km/h, techos de 5/15).
En modo --share, los visitantes remotos inician sesión con GitHub device
flow y deben estar en el allowlist (TF_DEV_ALLOW, default ratgr).
days[].steps[]: cada paso puede llevarlocation:/transit:(claves de catálogo),time-from/time-to/fixed,duration:(oflex,flex(min-max)…),title/notecon markdown mínimo y refs@[texto](clave), variantes*-show(mostrar algo distinto sin perder el dato),hidden-summary(solo geometría del mapa) yoptions:(planes consteps:o tiers conoptions:).- Catálogos
places:(gps: "lat,lng"),transits:(mode,color,coords: "lat,lng lat,lng …",stations, ystops:cuando coords es un trazo denso),lines:. - Horario por snap: cada paso debe cerrar con 2 de {inicio, duración, fin}; lo que falte se encadena a los vecinos y se pinta gris (~). Verde = explícito, rojo = fijo.
- Un
transitdeclarado sin coords es una referencia pendiente: el mapa lo dibuja como conector punteado entre sus anclas vecinas hasta que tenga geometría (el editor la traza en un click).
src/<nuevo>/ con su viaje.yaml + plantillas + config.yaml
(photo_base), y correr los builds con el nombre del viaje. Los estilos de
tiers tienen respaldo posicional (no dependen de llamarse Take/Ai/Shu).