Lo que ya funciona en producción, lo que está en construcción, y hacia dónde va el desarrollo. Un panorama honesto del estado real del producto.
01 · Hoy
02 · Arquitectura
Cliente final
│
├── voz ─────┐ ┌──► Gemini Live 3.1 (audio nativo)
│ │ │
│ ▼ │
│ ws-proxy (FaroPi)──── WSS ─────┘
│ :8080 + /health
│
├── WhatsApp ──► wacli-sync (FaroPi)
│ │
│ ▼
│ wacli-poller ──► Vercel /api/whatsapp/inbound
│ │
│ ▼
└── operador ──► demos.faropixel.com ──► Neon Postgres
(Next.js / Vercel) │
├── customers
├── appointments
├── vehicles
├── customer_notes
├── audit_events
└── business_members + sessions03 · Agente
Gemini 3.1 Flash Live Preview
Gemini 2.5 Flash + Groq Whisper Large v3 Turbo
6+ tools per vertical
Patrón VAPI aplicado
04 · Operacional
Identidad, vehículos/atributos, historial de citas, notas (pin/edit), sessions WhatsApp con replay
Status timeline visible, drag-to-advance, undo etiquetado con destino y origen, drawer detalle. Awaiting states con stale detection (verde→amarillo→naranja). Budget approval por WhatsApp.
Vista día/semana/mes per-staff, slot conflict por capacity, EXCLUDE constraint en BD
Buscador único accent + case-insensitive con resultados agrupados (Kanban / clientes / vehículos / notas)
Cita rápida desde header — search-or-create cliente + auto-open NewAppointmentModal
Botones etiquetados con destino ('▶ Pasar a En reparación') + undo con origen ('↶ Volver a Confirmada')
Reemplaza nativo. Jerarquía visual, 15min intervals, keyboard-first (←→↑↓ PgUp/Dn), Aceptar/Hoy
Visible en header con detección de pausa (—:— si stale). Cards Kanban con hora+fecha relativa
102 marcas seed (motos + coches), '+ Crear marca' explícito, campo mileage_km opcional
WhatsApp + Voz pulse-dot por canal en header. /api/health/{agent,voice} con cache 10s
Si operador entra sin token, banner con bootstrap URL. Token via ?op= → sessionStorage → header
Stats banner en /customers, sesiones activas, citas hoy, citas totales en /admin
Jobs con awaiting:customer muestran indicador de color (verde/amarillo/naranja) escalando con el tiempo de espera. Request-approval envía presupuesto al cliente por WhatsApp desde el Kanban.
Agente detecta respuesta a presupuesto e invoca flagForOperator con reason approval_received | customer_declined | customer_question. Contexto inyectado dinámicamente en el system prompt del poller.
9 claves editables por vertical: nombre del agente, clínica, mensajes WhatsApp, system prompts, umbrales stale, toggles handoff. Allowlist server-side, sin exponer API keys.
05 · Seguridad
06 · Roadmap