Arquitectura estado_turismo: Backend + Múltiples Rutas Frontend
Fecha: 2026-09-18
Proyecto: ~/nef/estado_turismo
Contexto: Sistema de recomendación turística con visualización de rutas por región
Stack deployado
Backend
- Worker:
engine→ https://engine.nef.workers.dev - Función: Motor de recomendaciones personalizadas con Qwen (Workers AI)
- Input:
POST /con{"usuario": "sarah"|{...}, "destino": "Bacalar"} - Output: Ranking de establecimientos basado en perfil de usuario
- Config:
engine/wrangler.jsonc
Frontend (Pages)
- Proyecto inicial:
ruta-maya-staging→ https://ruta-maya-staging.pages.dev - Función: Visualización interactiva del Tren Maya (MapLibre + datos estáticos)
- Estructura:
ruta-maya/ ├── index.html ├── tren-maya-quintana-roo.geojson └── src/ ├── tren-maya-api.js # Datos hardcodeados ├── place-store.js ├── places-panel.js └── maplibre-adapter.js
Estrategia: Una carpeta por ruta
Decisión: Duplicar la estructura de ruta-maya/ para cada nueva ruta geográfica.
Ventajas
- Cada ruta es independiente (deploy, iteración, datos)
- Sin overhead de router/framework
- Datos estáticos = rápido, sin dependencia del backend
- Fácil A/B testing por ruta
Estructura objetivo
estado_turismo/
├── engine/ # Worker (backend común)
├── ruta-maya/ # Tren Maya Quintana Roo
├── ruta-pacifico/ # Nueva: costa Pacífico
├── ruta-colonial/ # Nueva: ciudades coloniales
└── spab-retrieval/ # Pipeline de datos (no deploy)
Cada carpeta de ruta contiene
index.html: App autocontenida{ruta}.geojson: Geometrías (corredor + estaciones + lugares)src/{ruta}-api.js: Datos de lugares y metadatasrc/place-store.js: Lógica común (copiar)src/places-panel.js: UI común (copiar)DEPLOY.md: Instrucciones específicas
Comando de deploy por ruta
cd ruta-{nombre}
export CLOUDFLARE_API_TOKEN="cfat_..."
wrangler pages deploy . --project-name=ruta-{nombre}-staging --branch=main --commit-dirty=trueFuturas integraciones
Conectar frontend → engine (cuando se requiera)
Modificar src/{ruta}-api.js:
async getRecommendations(usuario, destino) {
const res = await fetch('https://engine.nef.workers.dev', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ usuario, destino })
});
return res.json();
}Multi-ruta dinámica (futuro)
Crear un Pages principal con índice de rutas:
rutas-turismo/
├── index.html # Índice de todas las rutas
├── viewer/ # Visor genérico
└── data/
├── tren-maya.json
├── pacifico.json
└── colonial.json
Tokens y permisos
- Account ID:
162ab69a40524314530193e8a3e8f414 - API Token (en
spab-retrieval/.env): Con permisos:Workers Scripts > EditPages > EditAccount Settings > Read
- Token en shell: Actualizar
~/.zshrcsi cambia
Próximos pasos por ruta nueva
- Duplicar
ruta-maya/→ruta-{nombre}/ - Reemplazar GeoJSON con nueva geometría
- Actualizar datos en
src/{nombre}-api.js - Modificar metadata en
index.html(title, description) - Deploy:
wrangler pages deploy . --project-name=ruta-{nombre}-staging - URL →
https://ruta-{nombre}-staging.pages.dev