Diagnóstico del desarrollo heredado, causas de sus límites, y el camino técnico más eficiente para construir lo que el cliente requiere — priorizando eficiencia sobre reutilización.
Lo construido es un MVP de vitrina, no una plataforma: WooCommerce funciona como tienda, pero la lógica que diferencia a PromoInk (diseñador, precios, decoración, asesor IA) vive apretada en plugins, jQuery y blobs de postmeta, sin modelo de datos ni capa de aplicación. Es un techo arquitectónico, no un problema de código puntual. La recomendación es híbrida: conservar WooCommerce como back-end de comercio (catálogo, carrito, checkout, pagos, pedidos) y reconstruir los diferenciadores sobre un stack desacoplado con esquema de datos real y una capa de IA con Claude + GPT. Rehacer el comercio sería desperdicio; seguir sobre el enfoque actual bloquea la mitad del contrato.
Radiografía medida sobre el código y la base de datos reales del sitio desplegado, no sobre la propuesta.
| Componente | Rol | Tecnología | Estado real |
|---|---|---|---|
| build_pcna_v620.615 LOC PHP | Import + conectores PCNA/SanMar/SAGE | PHP + SOAP; feeds vía WP All Import | Parcial |
| swc-v72.766 PHP · 6.345 JS | Product Designer (canvas) | Fabric.js desde CDN + jQuery, sin build | Parcial |
| swc-supplier-automation-v25.509 LOC PHP | Órdenes de compra + tracking + tarifas | PHP + SOAP; FedEx/UPS en sandbox | Parcial |
| promoink-decorator820 PHP · 1.645 JS | Decorador virtual alterno | PHP monolito + JS | Redundante |
| Modelo de datos4 tablas + postmeta | Diseños, colores, POs | wp_swcpd_saved_designs, _swc_config | Ausente como esquema |
| Capa bilingüe EN/ES | Requisito central del contrato (WS2) | Sin Polylang/WPML | No existe |
| Asesor de campañas IA | El corazón de la nueva visión (WS14–16) | OpenAI solo para análisis de imagen/color | No existe |
Integraciones vivas: catálogo PCNA/SanMar/SAGE apuntando a producción; envío de órdenes en test; Stripe en LIVE; SanMar sale a través de un proxy Cloudflare de terceros (eabucam.workers.dev) no propiedad del cliente.
El contrato (Exhibit A) define 16 workstreams. Los 1–9 son el MVP cotizado; los 10–16 son la expansión "AI Campaign Advisor". Así están hoy:
| WS | Workstream | Estado | Evidencia |
|---|---|---|---|
| 1 | Audit & Transition | Hecho | Este informe + despliegue seguro |
| 2 | Plataforma bilingüe EN/ES | Falta | Sin capa de traducción |
| 3 | Product Designer | Parcial | Fabric.js monolítico; sin versionado/print-ready/móvil sólidos |
| 4 | Product Data / import | Parcial | WP All Import; sin normalización idempotente |
| 5 | Commerce | Base OK | WooCommerce + Stripe live |
| 6 | Supplier Integrations | Parcial | SOAP funcional; órdenes en test; proxy externo |
| 7 | Connector Framework | Parcial | Código por proveedor, sin clase base reutilizable clara |
| 8 | Deployment & Operations | Hecho | Aislamiento, SSL, backups, fail2ban, hardening |
| 9 | QA & Handover | Pendiente | Sin matriz de pruebas ni docs formales |
| 10 | Universal Product & Decoration Schema | Falta | Datos en _swc_config, no en un esquema |
| 11 | Decoration Import & Mapping | Falta | Sin normalización de terminología ni cola de revisión |
| 12 | Decoration Pricing Engine | Falta / inseguro | Precio se calculaba en el cliente (vuln. crítica ya parcheada) |
| 13 | Visual Template & Print-Zone Mapping | Falta | Sin plantillas por familia con coords relativas |
| 14 | AI Campaign Advisor Foundation | Falta | OpenAI solo analiza imágenes, no asesora |
| 15 | Recommendation Knowledge Layer | Falta | Sin taxonomía ni reglas de scoring |
| 16 | Auditability & Human Review | Falta | Sin estados AUTO_READY / MANUAL_REVIEW |
Lectura: los WS 1, 5 y 8 están sólidos; los 3, 4, 6, 7 son bases parciales reutilizables como conocimiento (no como código); toda la mitad de "inteligencia" (10–16) — que es lo que hace único a PromoInk — está por construir.
No es falta de esfuerzo: son techos estructurales. Cada punto está respaldado por evidencia del propio código.
La lógica de negocio (diseñador, precios, decoración) se fuerza dentro de plugins y de blobs serializados en _swc_config. Sin un modelo de datos, no hay dónde vivir el precio, las zonas o las reglas — por eso el precio terminó calculándose en el navegador.
Evidencia: 79 tablas, ninguna de esquema de decoración/precio; el precio del carrito se leía del $_POST (vulnerabilidad crítica que ya corregí).El diseñador es un único archivo de 6.345 líneas de JavaScript con Fabric.js cargado desde un CDN y jQuery, sin bundler, sin componentes, sin módulos ES6. Es inmantenible y no permite la UX que pide el contrato (móvil, versionado, export imprenta 300 DPI).
Evidencia: designer.js = 6.345 LOC, 0 clases/imports ES6, 18 usos de jQuery; sin package.json/webpack/vite en ningún plugin.Conviven Artifi (SaaS), Zakeke (SaaS), swc-v7 y promoink-decorator. Es la huella de intentar el mismo problema cuatro veces sin una decisión de arquitectura — y arrastra el vendor-lock-in que el contrato quiere eliminar.
Evidencia: plugin Zakeke presente + referencias a Artifi en 3 clases de build_pcna_v6 + dos diseñadores custom.PromoStandards entrega las áreas de decoración como medidas físicas, no como píxeles sobre las fotos. El dev anterior intentó "dibujar los 26.000 a mano" — inviable. Falta el paso que hace escalar esto: un pipeline de calibración por familia.
Evidencia: los XSD del estándar no tienen campos de coordenadas; el reto de los 26k productos del video del cliente.SanMar sale a través de un Cloudflare Worker de terceros para alcanzar el endpoint SOAP en el puerto 8080. Funciona, pero es un workaround con un secreto en infraestructura que no es del cliente — frágil y contra la exigencia de ownership.
Evidencia: sanmar_proxy_url = …eabucam.workers.dev en la configuración; import de feeds delegado a WP All Import.Un asesor de campañas, un motor de precios auditable y una consola de revisión necesitan un modelo relacional. Como no existe, esas funciones simplemente no pudieron nacer: OpenAI quedó reducido a analizar imágenes, no a asesorar.
Evidencia: OpenAI se invoca solo en class-designer-image-selector y class-color-resolver; cero tablas de campaña/recomendación.Principio rector: no reconstruir lo que WooCommerce hace bien; reconstruir los diferenciadores sobre un stack desacoplado con un esquema de datos real. Verde = se conserva. Azul = se construye nuevo.
Reusar vs. rehacer: de las ~40K líneas actuales, lo reutilizable no es el código sino el conocimiento de dominio — los mapeos SOAP campo-a-campo de PCNA/SanMar/SAGE y las reglas de negocio. Eso se porta; el monolito del diseñador y el pricing en cliente se descartan.
El Asesor de Campañas (WS14–16) es donde Claude encaja de forma casi perfecta: los 10 golden tests exigen salida estructurada, cero alucinación y revisión humana — exactamente lo que dan las structured outputs + tool use.
El razonamiento del estratega. Salida forzada al esquema de los golden tests.
output_config.format → 3 productos rankeados + rationale + restricciones + estado de precio/stock + confianza + alternativas.Casi calidad Opus a $3/$15 por millón. Para volumen del asesor en producción.
Se conserva OpenAI donde ya está cableado (análisis de imagen/color) y como opción del pipeline de decoración.
Cada recomendación guarda prompt/modelo/regla/snapshot y estado.
Por qué Claude para el asesor y GPT para imagen: el asesor se juzga con un rubric de 10 casos con umbral 85/100 y prohibición de alucinar; salida estructurada + herramientas de grounding son la vía directa a pasar ese rubric. GPT ya está integrado para lo visual, así que se mantiene ahí en vez de reescribir.
Alineada con el faseo que el propio contrato insinúa (fundaciones primero; asesor/pipeline por Change Order).
Hecho: sitio aislado, endurecido y en producción como referencia viva y fuente de datos. Vulnerabilidades críticas corregidas.
Esquema Postgres + servicio de conectores (idempotente, sin proxy externo) + shell del storefront Next.js + Designer MVP para las 2 familias piloto (~500 SKUs) + motor de precios en servidor. WooCommerce queda como back-end de comercio.
Calibrar el piloto, medir el % real de automatización, y escalar hacia los 26.000 con números medidos. Se reusa el editor de zonas del dev anterior como herramienta de excepciones.
Claude con structured outputs + tool use contra los 10 golden tests; consola de revisión y estados AUTO_READY/MANUAL_REVIEW. Bilingüe completo. Retiro de Artifi + Zakeke.