Pivot
Pivot is a high-performance real time analytics database on open data formats.
BI visual gamificado + agentes de IA para los vendedores de La Virginia.
Translation pending
DataTypeScript · CSSGitHub @GeronimoTrosseroOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Shippear #3 · Desafío Ranking de Vendedores
Los reportes mensuales de 135 vendedores y 15 sucursales, convertidos en un BI visual que se juega y en agentes de IA que hacen el trabajo administrativo por el vendedor, para que el vendedor solo venda.
V052 (vendedor) y sup-pintos (gerente de equipo). PIN 1234.DECISIONS.md (V3).| Hoy | Con Liga La Virginia |
|---|---|
| Una planilla mensual con 7 KPIs que nadie mira hasta el cierre | Una carta de jugador con semáforos, que el vendedor mira en la calle todos los días |
| "Estás 82% en cobranzas" | "Cobrá a estos 3 clientes → +0,4 pts, subís al #50 y desbloqueás Oro" |
| El gerente descubre los problemas a fin de mes | Mapa de calor del equipo, rachas en riesgo y misión colectiva en vivo |
| El vendedor pierde horas mandando recordatorios y llenando encuestas | Un agente de cobranzas por WhatsApp y un agente de relevamiento que lee la foto de la góndola |
| Competencia que desmotiva a la mitad de abajo | Ligas de 10 de nivel parecido, rachas, MVP del que más mejoró y misiones colectivas |
Tres pilares:
Browser (mobile-first) ──SWR polling 2s──▶ /api/live (firma de cambios filtrada por sesión)
│ │
▼ ▼
Next.js 15 App Router ── Server Components / Server Actions / API routes ── service role ──▶ Supabase Postgres
│ │ (RLS ON, 0 políticas anon)
middleware JWT lib/scoring.ts ← única fuente de verdad del Puntaje Oficial
(cookie firmada) lib/game.ts ← Puntos de Liga, rachas, temporadas, ligas
lib/acciones.ts ← "Mejorá tu carta" (acciones = deltas sobre datos crudos)
lib/automation.ts ← agentes (cobranza, góndola, Dibu)
usuario (rol VENDEDOR o SUPERVISOR, que en pantalla se llama Gerente) con PIN hasheado con scrypt. La sesión es un JWT HS256 en una cookie httpOnly y un middleware redirige según el rol. El vendedor solo ve su carta. El gerente ve a su equipo, el detalle de sus vendedores, la Liga nacional y la Temporada.anon (probado: la API REST con la anon key devuelve []). Todas las lecturas pasan por el servidor con la service role, filtradas por la sesión./api/live cada 2 segundos. Cuando cambia la firma (ajustes, bandeja, reconocimientos), refresca los Server Components.lib/scoring.ts. Define ranking, podio y Balón de Oro.lib/game.ts. Alimentan beneficios y desempates.scripts/extract-pdf.mjs genera data/dataset.json (el dataset vino en PDF). scripts/seed.ts valida la fórmula y carga todo; scripts/seed-usuarios.ts carga los usuarios.| KPI | Real | Objetivo | Sentido | Peso |
|---|---|---|---|---|
| VTA Venta vs OV | Kilos_Vendidos / Kilos_Objetivo | 100% | ↑ | 30% |
| PRD Productividad | Pedidos / Visitas | 65% | ↑ | 10% |
| ACT No compradores | (Cartera − Compradores) / Cartera | 15% | ↓ | 15% |
| LAN Últ. lanzamientos | Con_Lanzamiento / Compradores | 40% | ↑ | 15% |
| ENT No entregados | No_Entregados / Pedidos | 3% | ↓ | 10% |
| COB Cobranzas | Cobros_en_Plazo / Cobros_Mes | 90% | ↑ | 15% |
| REL Relevamientos | Realizadas / Asignadas | 100% | ↑ | 5% |
| Agente | Qué hace | Ahorro estimado* |
|---|---|---|
| 🧤 Comodín Dibu | Redacta el WhatsApp de cobranza, lanzamiento o aviso de entrega con monto y vencimiento reales. Usa Anthropic (claude-haiku-5-5) si hay ANTHROPIC_API_KEY; si no, plantillas. Nunca inventa cifras. | ~2 min por mensaje |
| 🤖 Agente de Cobranzas Autónomo | Detecta los vencimientos de los próximos 5 días, manda el recordatorio y, cuando el cliente responde "ya pagué", marca el pago, suma el cobro al KPI y la carta sube sola. Endpoints listos para n8n + Twilio (/api/automations/cobranza/run, /api/webhooks/pago con x-webhook-secret). | 1–2 h por semana por vendedor |
| 📸 Agente de Relevamiento Visual | Desde una foto de la góndola "lee" frentes, faltantes y precios y completa hasta 5 encuestas de una vez (simulado en la demo). | ~5 min por encuesta |
* Estimaciones para el pitch, no medidas. En la demo los agentes corren en modo simulado dentro de la app.
Vendedor de demo: V052 · Mansilla Germán (Córdoba/Rio Cuarto). Tiene 90,8 pts, que lo pondrían en Oro, pero está 🔒 bloqueado en Plata por Cobranzas (82%).
V052 y PIN 1234. Se ve la carta Plata con el candado, el puesto #54 de 135, las rachas (🔥 12 meses en Venta) y Tu Liga.Para repetir: ↺ Reiniciar demo en la vista del vendedor.
npm i
npm run migrate # schema.sql + schema-v2.sql (requiere DATABASE_URL; alternativa: SQL Editor)
npm run seed # valida la fórmula, carga datos, juego y usuarios (PIN 1234)
npm run dev # http://localhost:3000 (con proxy/antivirus TLS: npm run dev:local)
npm test && npm run validate
Variables de entorno:
NEXT_PUBLIC_SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY y WEBHOOK_SECRET.AUTH_SECRET: si falta, se deriva de la service role.ANTHROPIC_API_KEY.MODO_PRESENTADOR=off: apaga el selector de roles del footer.NEXT_PUBLIC_SUPABASE_ANON_KEY ya no es necesaria: no hay lecturas anónimas.
Ver DECISIONS.md para todo lo que decidimos sin preguntar. Datos 100% ficticios.