Plan Maestro Plant 2.0
<!-- ESTADO-VIVO:INICIO -->
⚡ ÚLTIMO ESTADO VIVO (Actualizado: 2026-10-29 16:48 · Orden Cronológico Inverso: Más Nuevo Arriba)
- Aislamiento de CI/CD e Infraestructura (09-oct-2026): Prohibido compilar aplicaciones Next.js en el mismo VPS donde corre MongoDB o procesos productivos. Todo build se compila en runners aislados en la nube (GitLab Cloud Runners) generando contenedores o artefactos standalone. El VPS solo ejecuta, sin riesgo de saturar memoria ni requerir precompila...
<!-- ESTADO-VIVO:FIN -->
Redactado el 2026-10-07 por Claude Code y Antigravity. Es una propuesta: lo marcado ⏳ lo decide Gabriel.
Principios
- No romper nada antes de construir. La Fase 0 bloquea el pase a producción.
- Un solo núcleo, muchos canales. Web, app, WhatsApp y agentes usan el mismo catálogo, carrito y servicio de pedidos.
- En la ficha, sólo datos verificables. El propósito (conciencia, Grinberg) va en el relato y en la estética, nunca como propiedad saludable de un producto (CAA / ANMAT).
- La IA propone, la persona confirma. Nada se compra ni se publica sin un toque humano.
- Cada fase tiene un criterio para pasar a la siguiente. Sin criterio cumplido, no se avanza.
Decisiones tomadas
- App: Capacitor (
apps/shop-mobile) + PWA. React Native, no: duplicaría la interfaz con un solo desarrollador. - Fase 0 bloquea el lanzamiento: 3.424 URLs y los sellos inventados primero.
- Extracción de envases: la corre Antigravity (Gemini) sobre los 200 más vendidos.
- Consultas de arquitectura: a Juanchi y su Antigravity por el grupo legacy de WhatsApp (autorizado por Gabriel según Antigravity, 7-oct).
- Aislamiento de CI/CD e Infraestructura (09-oct-2026): Prohibido compilar aplicaciones Next.js en el mismo VPS donde corre MongoDB o procesos productivos. Todo build se compila en runners aislados en la nube (GitLab Cloud Runners) generando contenedores o artefactos standalone. El VPS solo ejecuta, sin riesgo de saturar memoria ni requerir precompilación local por SSH.
- Fronteras estrictas en el monorepo: Desacople absoluto entre módulos compartidos (
@repo/business-logic) para que el login o administración de un portal nunca arrastre dependencias de otro (ej. Firebase/Carrito del Shop en el Admin).
⏳ Decisiones abiertas para Gabriel
- Número del piloto de WhatsApp. Antigravity propone Baileys para los 100 clientes del piloto; Claude Code advierte que un baneo de Meta se lleva el número entero. Condición mínima si va Baileys: un número nuevo dedicado a Plant, nunca el de Gabriel ni el del asistente, con mensajes sólo como respuesta a lo que escribe el cliente (nada de envíos masivos). La capa de canal queda abstraída para pasar a Cloud API sin tocar el resto.
- Política de afirmaciones: qué se puede decir de un producto y qué va sólo en el manifiesto.
- Fecha objetivo del pase a producción, una vez cumplida la Fase 0.
Arquitectura
- Núcleo (
plant-hub/packages/business-logic): catálogo, precios, stock, carrito independiente del canal con reserva de stock, identidad. El teléfono se vincula a la cuenta con un código. - Servicio de pedidos en lenguaje natural (uno solo): texto, audio transcripto o foto → búsqueda en el catálogo (Atlas Search, ya hecho) → carrito propuesto con alternativas, confianza y preguntas si hay ambigüedad. Reutiliza el asistente de carrito que ya existe (
apps/shop/app/api/cart/ai-assistant). - Canales:
- Web (Next 16): contenido renderizado en servidor; micrófono con transcripción en vivo.
- App (Capacitor): push, micrófono, presencia en tiendas.
- WhatsApp: mensaje → cola → servicio de pedidos → resumen + link de pago firmado que vence a las 24 h. Interfaz de canal intercambiable (Baileys hoy / Cloud API mañana).
- Agentes de IA: servidor MCP público de sólo lectura (buscar, ficha, stock, link de carrito precargado), feeds a Merchant Center y ChatGPT, WebMCP en el navegador (ya existen 4 herramientas).
- Carga de datos del catálogo (proceso aparte): fotos + fichas técnicas PDF + RNPA → extracción con IA → cola de revisión en el admin → publicación. Cada dato guarda fuente, confianza, quién lo aprobó y cuándo. La ficha muestra sólo datos verificados.
- Pruebas de calidad: 200 pedidos y frases reales; el pedido conversado no se abre a clientes por debajo de 90% de carritos correctos.
Formato del JSON de extracción (Antigravity → Claude Code / Juanchi)
Por producto, cada campo con su procedencia. Nada se inyecta directo a producción: entra a la cola de revisión.
{
"productId": "6a6d3f5d59ef31369cbb9288",
"legacyId": "0ErFy0kIlEgrU83FJGni",
"imagen": "products/0ErFy0kIlEgrU83FJGni/image_trimed_20260413-233953.jpg",
"caraDelEnvase": "frente",
"campos": {
"ingredientes": {"valor": "...", "confianza": 0.0, "fuente": "foto-frente|foto-dorso|ficha-pdf|marca"},
"porcion": {"valor": "35 g", "confianza": 0.0, "fuente": "..."},
"nutricion": {"valor": {"proteinas_g": 9, "fibra_g": 6, "kcal": 143}, "confianza": 0.0, "fuente": "..."},
"alergenos": {"valor": [], "confianza": 0.0, "fuente": "..."},
"sellos": {"valor": ["Sin TACC", "Vegano"], "confianza": 0.0, "fuente": "..."},
"octogonos": {"valor": ["Exceso en grasas totales"], "confianza": 0.0, "fuente": "..."},
"rnpa": {"valor": "...", "confianza": 0.0, "fuente": "..."}
},
"faltaDorso": true,
"notas": ""
}
Reglas: campo que no se lee → null, nunca un valor inferido. Alérgenos y «Sin TACC» se publican sólo con fuente verificada (RNPA, declaración de la marca o foto del dorso) y aprobación humana. Si sólo hay foto del frente, faltaDorso: true y se le pide el dorso a la marca desde el portal de proveedores.
Fases
Fase 0 · semanas 1-2 · no romper nada (bloquea producción)
- 301 de las 3.424 URLs viejas (el id viejo está en la ruta de cada foto) y 404 reales.
- Sitemap completo, canonical único, un solo dominio.
- Borrar sellos placeholder, «5.0» sin opiniones y la compra recurrente desconectada.
- Estáticos estables (build en carpeta nueva + swap) y cacheados; confirmar que producción se indexa.
- Títulos reales de home y categorías; limpiar etiquetas
cat-…. - Criterio: cero «producto no encontrado» recorriendo el sitemap viejo; cero sellos sin dato.
Fase 1 · 30 días · que nos entiendan
- Campos nuevos en la base (ingredientes, nutrición, alérgenos, origen, certificaciones) con procedencia.
- Extracción + revisión de los 200 más vendidos; pedido de dorsos y fichas a las marcas.
- Schema.org completo, opiniones en el HTML, feeds a Merchant Center y ChatGPT, llms.txt.
- Sistema visual editorial; ficha viva con audio en los 50 más vendidos.
- Criterio: 200 más vendidos con datos verificados; Search Console sin caída frente a septiembre.
Fase 2 · días 30-60 · el pedido conversado
- Servicio de pedidos + set de pruebas; micrófono en web y app.
- Piloto de WhatsApp con ~100 clientes recurrentes que acepten (número según decisión ⏳1).
- Criterio: ≥90% de carritos correctos; conversión del piloto medida contra la web.
Fase 3 · días 60-90 · agentes y personalización
- Servidor MCP público + links de carrito precargado.
- Ritmo de reposición (push / WhatsApp), perfil en tres toques, orden personalizado.
- Páginas por necesidad, guías comparativas, recetas que se compran.
- Cloud API de WhatsApp si el piloto escala.
- Panel mensual de 30 preguntas en ChatGPT, Claude, Perplexity, Gemini y Google.
Roles
- Juanchi: dueño del código de plant-hub y del deploy.
- Claude Code: especificaciones, código en ramas listo para revisión, script de redirecciones, set de pruebas, auditorías.
- Antigravity: extracción de envases, datos operativos, relación con marcas para dorsos y fichas, contenido editorial, monitoreo.
- Gabriel: decisiones ⏳ y aprobación de cada fase.
Bitácora
- 2026-10-07 — Plan redactado tras la auditoría de staging y el debate Claude Code / Antigravity.
Temas/plan-maestro-plant-20