← Volver al catálogo

🖥 Dashboard Web

Archivo: agentes/supervisores/dashboard-web.ts · Plist: com.rifai.dashboard-web (solo cargado en ~/Library/LaunchAgents, no versionado en cron/) · Horario: cada 1 h (StartInterval 3600s) + RunAtLoad

Qué hace

Genera un panel HTML estático con todo el estado del sistema RifAI: ventas/ROAS reales del último día, estadísticas del Brain corporativo, contenido publicado acumulado, estado de todos los crones launchd, salud de los servicios externos (Meta/Shopify) y últimos blogs/patrones. Se regenera cada hora en dashboard/index.html (abrir con file://) y vuelca también dashboard/state.json para que otros scripts lo consuman.

Cómo funciona

1. Lee métricas históricas de SQLite data/metrics.db (daily_metrics, social_posts, comments/dms_replied).

2. Lee estadísticas del Brain de brain/brain.db (patrones, learnings, corrections, signals, docs indexados) y el tamaño del vector store.

3. Lista los crones con launchctl list | grep com.rifai. y su estado/PID.

4. Comprueba salud de Meta (debug_token, días hasta expirar) y Shopify (/shop.json).

5. Trae los últimos 5 blogs publicados de Shopify.

6. Renderiza un HTML con la estética de marca (charcoal/oro) y tablas, y escribe dashboard/index.html + dashboard/state.json.

Datos/APIs

  • SQLite: data/metrics.db y brain/brain.db (vía better-sqlite3, solo lectura).
  • Meta Graph API (debug_token). Var: META_PAGE_TOKEN.
  • Shopify Admin API (/shop.json, /blogs/.../articles.json). Vars: SHOPIFY_STORE, SHOPIFY_ACCESS_TOKEN.
  • launchctl para el estado de crones. No envía nada a Telegram.

Cómo probarlo

cd /Users/user/rifai-agents && npx tsx agentes/supervisores/dashboard-web.ts

Esperar: 📊 Dashboard generado: file://…/dashboard/index.html. Ábrelo con open file:///Users/user/rifai-agents/dashboard/index.html.

Si se rompe / recuperar

launchctl unload ~/Library/LaunchAgents/com.rifai.dashboard-web.plist && launchctl load ~/Library/LaunchAgents/com.rifai.dashboard-web.plist

Logs: /Users/user/rifai-agents/logs/dashboard-web.log. Si el HTML sale vacío, suele ser que las DBs SQLite no existen aún (los try/catch lo dejan pasar).

Cómo replicarlo

Lectores SQLite de metrics.db y brain.db, checks de salud Meta/Shopify, parseo de launchctl list, fetch de blogs y un generador de HTML estático con plantilla de marca. Output a dashboard/index.html + state.json. Requiere better-sqlite3.