Brief reutilizable — siguiente sesión SPAB (Cloudflare scrape / HF / Claude local / opencode DeepSeek / pickle)
Fecha: 2026-09-18 Uso: pegar como prompt inicial, con los paths y reglas abajo.
Brief — SPAB: silos de reseñas y panel de burbuja turística (retoma)
Eres mi agente en sesión nueva. Responde en español (bilingüe ES/EN). Contexto: diseñador-desarrollador en México; clientes WordPress/Elementor + R&D web creativo; local-first (System76 + Ollama). Proyecto SPAB: análisis de burbuja turística en Quintana Roo con varias capas de datos → panel Streamlit + silos semánticos + señales de demanda.
Stack disponible en esta sesión
- Cloudflare: Workers + Browser Rendering (Playwright) para scrapear lo que bloquee Reddit/sitios; D1/KV para cache si hace falta. Nota: Google Maps ya cubierto gratis por actor Apify
memo23(10 reseñas/run,APIFY_API_KEYen~/nef/estado_turismo/spab-retrieval/.env). - Hugging Face: embeddings
Qwen/Qwen3-Embedding-0.6B(multilingüe, funciona con español;all-MiniLM-L6-v2NO). Token HF:~/nef/news-silo/.env(HF_APIKEY, cargar →HF_TOKEN). Sentiment:cardiffnlp/twitter-xlm-roberta-base-sentiment(ES) o SetFit few-shot si elijo fine-tune. - Claude local: revisión/redacción (claude code).
- opencode + DeepSeek: agente principal de código.
- pickle: cachear embeddings por id de doc (
embeddings.pkl) para no re-embedear en cada corrida.
Estado actual (paths y corpus)
~/nef/estado_turismo/spab-retrieval/panel.py(Streamlit+Plotly,.venv-panel, corre enhttp://localhost:8501; 6 tabs: índice, ocupación, valor, demanda, estacional, cobertura — FALTA tab reseñas).scripts/corpus_resenas.py(Google Maps memo23 + Reddit subreddit RSS),scripts/corpus_x_qroo.py,scripts/hedonico.py(descartado, R² 0.167),scripts/ocupacion_bacalar.py(débil, no imputar).data/corpus/:resenas_maps.jsonl(36 reseñas polares 1★/5★, 5 destinos),reddit.jsonl(198: tulum 50, cozumel 50, bacalar 50, solotravel 48),x_qroo.jsonl(75 posts X: MaraLezama, SEDETURQROO, SECTUR_mx, RivieraMaya),prensa_qroo.jsonl(25 NewsAPI)..env:APIFY_API_KEY.
~/nef/news-silo/(git, commit 67513a4):silo.py,silo_medios.py(Qwen3-Embedding + HDBSCAN + c-TF-IDF, respeta campodestinodel doc, filtro limpieza),.venv(Py 3.12, sentence-transformers, torch). Correr:cd ~/nef/news-silo && .venv/bin/python silo_medios.py --dir <corpus> --min-cluster-size 4(sin--youtube).~/nef/surtido/→ contenedor dockerrsshub-surtidoen :1200 (X timelines vía RSSHub),.env.local(TWITTER_AUTH_TOKEN, NEWSAPI_KEY).
Restricciones de fetching (verificadas)
- Reddit:
www.reddit.com/search.json→ 403;search.rss→ 429;/r/<sub>/.rss?sort=new→ funciona con UA navegador, pero rate-limit ~40-60 s entre peticiones (429). Backoff ya encorpus_resenas.py. - X por query: bloqueado sin pagar (twitterapi.io, RSSHub
/twitter/keyword404, Apify tweet-scraper Demo Mode). Vivir: timelines RSSHub + prensa NewsAPI.
Pendientes priorizados
- Backfill Reddit (pacing ~45 s o background): r/cancun, r/playadelcarmen, r/puertovallarta, r/QuintanaRoo, r/MexicoTravel. Prioridad r/cancun.
- Más reseñas Google Maps (memo23, 10/run free): cubrir destinos faltantes.
- Sentiment scoring (NO existe aún): ground truth = estrellas en
resenas_maps.jsonl; aplicar a reseñas y luego Reddit/X/prensa. YouTube ya fue decidido = solo sentiment. - Tab “Reseñas” en el panel: cruce destino × tema × polaridad + TEMA 0 como indicador de demanda.
- Re-correr silo_medios con corpus completo (incl. reseñas, sin youtube).
- Índice de demanda desde reseñas: volumen/recencia del TEMA 0 (seguridad, presupuesto, transporte) + pregunta de r/bacalar “¿cómo impactó el aeropuerto de Tulum a Bacalar?” → cruzar con AFAC/aeropuerto Tulum.
- Cachear embeddings con pickle en silo_medios.py.
- Commit pendiente:
engine/(motor Qwen) en estado_turismo.
Reglas de trabajo
- Scope pequeño: la versión más chica que funcione.
- Persistir TODO insumo reutilizable en
~/nef/decisions/YYYY-MM-DD-*.md(prompts, scripts, decisiones, briefs). Decirme el path cuando lo guardes. - Nunca commitear secretos (
.env, tokens);.envy.venvestán gitignored. - Al cerrar: resumir estado por capa + responder quién verá el panel esta semana (testigo externo, p.ej. UI2).