2026-09-18 — Arquitectura places-turismo: top 5 por rating para campaña
Contexto
Rama places-turismo en ~//nef/estado_turismo — adaptación de smooth-nav/places-explorer para mostrar 5 lugares destacados por sitio turístico, priorizando mejores reseñas. Complemento de la campaña de turismo de Quintana Roo.
Decisiones técnicas
1. Top 5 ordenados por rating
Por qué: La campaña necesita mostrar lo mejor de cada destino, no un catálogo exhaustivo.
Cómo: turismo-api.js ordena por rating descendente, slice(0, 5). Datos de Google Places API (rating 0-5, reviewCount entero).
2. Rating prominente en el panel
Dónde: tier 1 (tarjeta), reemplazando volatilidad.
Formato: “4.8 ★★★★★ (9,500 reseñas)“
Estilos: .pp-rating dorado (—pp-sun), .pp-review-count secundario.
3. Datos de 3 niveles
// Nivel 0: índice (GeoJSON features)
{ id, name, lat, lng, cat, rev }
// Nivel 1: tarjeta (batch request visible)
{ id, summary, rating, reviewCount, price, open, tint }
// Nivel 2: detalle (prefetch + open)
{ id, desc, rating, reviewCount, hours, tags, photos, sources }4. Fuentes de datos
- Coordenadas, categorías:
/spab-retrieval/data/destinos.json(Tulum, Bacalar, etc.) - Lugares, ratings:
googleplaces.ts→base/lugares.csv(place_id, rating, n_reseñas) - Costo: Places API con reviews = tier Enterprise; ~30 lugares × N destinos × mensual
Archivos clave
places-explorer/
├── index.html título, imports turismo-api
├── src/
│ ├── turismo-api.js TOP_5 = RAW.sort(rating).slice(0,5)
│ ├── places-panel.js renderT1() con estrellas
│ ├── places-panel.css .pp-rating, .pp-review-count
│ ├── place-store.js (sin cambios)
│ ├── maplibre-adapter.js (sin cambios)
│ └── types.d.ts PlaceCard += rating, reviewCount
└── README.md instrucciones de integración
Próximos pasos (no implementados)
-
Endpoint real:
GET /api/destinos/{slug}/top-places- Lee
base/lugares.csvfiltrado pordestino = slug - Ordena por
rating DESC, n_resenas DESC - Devuelve top 5 con estructura PlaceIndex[]
- Lee
-
Selector de destino
<select id="destino"> <option value="tulum">Tulum</option> <option value="bacalar">Bacalar</option> <option value="cancun">Cancún</option> </select>→ Recarga
store.loadIndex()con nuevo slug -
Caché localStorage
- Key:
places-${slug}-${rev} - TTL: 1 hora (turístico cambia poco)
- Key:
-
Deploy
- Cloudflare Pages:
/places-explorer - Workers:
/api/destinos/:slug/top-places - Binding: D1 o R2 con
lugares.csvparseado
- Cloudflare Pages:
Ruta Maya (siguiente iteración)
Ver 2026-09-18-ruta-maya-rescate.md — integrar lugares de múltiples destinos en una narrativa geográfica continua.
Comando para servir local:
cd ~//nef/estado_turismo/places-explorer
python3 -m http.server 8000
# → http://localhost:8000Commit: 0f8bf46 en rama places-turismo