Volver a proyectosMarketplace SaaS + IA aplicada

ShopYA — Marketplace SaaS

Ingeniería de producto y arquitectura distribuida de marketplace, extendidas con un asistente RAG integrado en producción para descubrimiento conversacional.

Rol

Líder de Producto y Tecnología

Equipo multidisciplinario de aproximadamente 9–10 personas

300+tiendas incorporadas o cargadas
  • Servicios orientados a dominios
  • RAG en producción con OpenAI + pgvector
  • Consistencia entre servicios y aislamiento entre tenants
Página principal del marketplace ShopYA mostrada en una notebook

Problema

Los pequeños negocios de Argentina necesitaban una forma accesible de crear y operar una tienda online. ShopYA combinó tiendas individuales con descubrimiento dentro de un marketplace y utilizó planes de suscripción en lugar de cobrar comisiones por cada venta.

Contexto y responsabilidad

Creé ShopYA desde cero y lideré el proyecto de manera sostenida como Líder de Producto y Tecnología. Fui responsable de la arquitectura y la dirección técnica, y participé en decisiones y compensaciones de producto y negocio dentro de un equipo multidisciplinario de aproximadamente 9–10 personas.

Alcance del sistema

  • Autenticación y acceso aislado por tenant
  • Tiendas de vendedores, catálogo y descubrimiento en el marketplace
  • Pedidos, pagos y operaciones de vendedores
  • Planes de suscripción y límites
  • Envíos e integraciones con transportistas
  • Mensajería, notificaciones y funciones en tiempo real
  • Incorporación, aprobación y analíticas para vendedores

Arquitectura

Una aplicación web en Next.js se conectaba con servicios en NestJS y TypeScript organizados alrededor de autenticación, catálogo, pedidos, pagos, suscripciones, envíos y mensajería. PostgreSQL almacenaba el núcleo transaccional y relacional del marketplace; Firestore resolvía necesidades orientadas a documentos y en tiempo real, como el chat entre compradores y vendedores y las notificaciones. El aislamiento entre tenants atravesaba todos los dominios en lugar de pertenecer a un único servicio.

  • Aplicación web en Next.js
  • Servicios de dominio en NestJS
  • TypeScript
  • Núcleo transaccional en PostgreSQL
  • Funciones en tiempo real con Firestore

Desafío de ingeniería

Mantener coherente el estado distribuido del marketplace

El desafío principal fue mantener un estado de negocio consistente entre dominios del marketplace desplegados de manera independiente, preservando el aislamiento entre tenants y evitando estados inválidos entre dominios. Un mismo flujo podía atravesar pedidos, pagos, suscripciones, envíos y operaciones de vendedores, por lo que los límites de servicio debían seguir siendo claros sin tratar cada dominio como una funcionalidad aislada.

Decisiones y fundamentos

Límites de servicio orientados a dominios

Decisión
Separar autenticación, catálogo, pedidos, pagos, suscripciones, envíos y mensajería mediante límites explícitos de servicio y dominio.
Fundamento
Los límites representaban responsabilidades de negocio diferentes, superficies de integración, necesidades de despliegue independiente y el crecimiento esperado del producto. Reducían el acoplamiento y aclaraban la propiedad de las reglas de negocio.
Compensaciones
La separación introdujo mantenimiento de contratos entre servicios, coordinación de despliegues, mayores necesidades de observabilidad, más modos de falla, trabajo de consistencia entre servicios y una sobrecarga operativa superior a la de un monolito modular.

PostgreSQL y Firestore según la carga de trabajo

Decisión
Usar PostgreSQL para el núcleo transaccional y relacional del marketplace, y Firestore para necesidades documentales y en tiempo real como chat y notificaciones.
Fundamento
Las dos bases respondían a características distintas: el estado relacional del comercio requería un modelo transaccional estructurado, mientras que la mensajería y las notificaciones se beneficiaban del acceso documental en tiempo real.
Compensaciones
Usar ambos modelos de persistencia aumentó la complejidad operativa y conceptual. Los flujos entre dominios requerían contratos y reglas de propiedad deliberados para evitar estados de negocio inconsistentes; el diseño no implicaba una base de datos separada por servicio.

Contexto de producción

ShopYA se desplegó como un producto real. Más de 300 tiendas fueron incorporadas o cargadas en la plataforma. La plataforma alcanzó un nivel de desarrollo técnico mayor que su tracción comercial y la adquisición de clientes terminó convirtiéndose en la principal restricción del producto.

Resultado e impacto

300+tiendas incorporadas o cargadas

Se entregó el marketplace multitienda con sus principales dominios operativos. El trabajo validó el alcance técnico y reforzó una lección de liderazgo de producto: la solidez técnica y la arquitectura no sustituyen una estrategia de adquisición validada.

Tecnologías

  • TypeScript
  • Node.js
  • Next.js
  • NestJS
  • OpenAI SDK
  • gpt-4o-mini
  • text-embedding-3-small
  • Supabase
  • PostgreSQL / pgvector
  • Firestore
  • Server-Sent Events
  • Winston / Loki
  • PM2
  • Vercel

Integraciones

  • Andreani
  • OCA

Diagrama de arquitectura

Arquitectura de ShopYA con una aplicación Next.js conectada a servicios orientados a autenticación, catálogo, pedidos, pagos, suscripciones, envíos y mensajería. El aislamiento entre tenants atraviesa todos los dominios. PostgreSQL sostiene los datos transaccionales del marketplace, Firestore resuelve chat, notificaciones y funciones en tiempo real, y envíos se conecta con Andreani y OCA.
Subsistema de IA aplicada

IA aplicada: Asistente RAG para el marketplace

Un asistente RAG integrado en producción que fundamenta el descubrimiento dentro del marketplace en el catálogo de ShopYA y conocimiento curado de la plataforma, en lugar de depender solo de la memoria del modelo.

  • RAG con OpenAI + pgvector
  • Reescritura de consultas multivuelta
  • Suite de evaluación versionada con 36 casos

Problema

Los visitantes anónimos del marketplace necesitaban una forma conversacional de descubrir productos, categorías y tiendas, hacer preguntas de seguimiento, aprender mediante guías curadas de ShopYA y navegar hacia páginas relevantes. Una experiencia basada solo en el modelo no reflejaría de forma confiable un catálogo cambiante ni la orientación específica de ShopYA.

Por qué RAG

El inventario del marketplace y la orientación de la plataforma cambian con el tiempo, por lo que las respuestas debían provenir del catálogo y del conocimiento gestionados por ShopYA, no de la memoria preentrenada del modelo. La recuperación aporta ese contexto cambiante y mantiene la generación enfocada en descubrimiento y navegación.

Contexto y responsabilidad

Diseñé e implementé el asistente de IA como parte de ShopYA, desde el formateo del conocimiento y la recuperación vectorial hasta la composición del prompt, el streaming de la API, la integración con la tienda y la posterior suite de evaluación. Esta sección distingue ese trabajo de IA aplicada dentro de mi liderazgo más amplio de producto y arquitectura en la plataforma ShopYA.

Alcance del sistema

  • Descubrimiento anónimo de productos, categorías y tiendas
  • Orientación mediante conocimiento curado de la plataforma
  • Historial de conversación y reescritura opcional de preguntas de seguimiento
  • Recuperación vectorial sobre contexto del marketplace y la plataforma
  • Respuestas transmitidas, enlaces al marketplace y sugerencias de respuesta rápida
  • Registro de chats, tokens y costo estimado
  • Orientación de solo lectura, sin capacidad de modificar el comercio

Arquitectura

La ruta de solicitud conecta un widget de chat en Next.js con una API NestJS que transporta el historial, puede reescribir una pregunta de seguimiento como consulta independiente, crea un embedding con OpenAI y recupera los vectores más similares desde Supabase/PostgreSQL. El contexto recuperado se combina con instrucciones, ejemplos, historial y el mensaje actual para gpt-4o-mini; la respuesta llega a la tienda mediante Server-Sent Events y se registra el uso. Firestore continúa siendo la fuente autoritativa de los datos del marketplace y del conocimiento de la plataforma, mientras Supabase con pgvector almacena datos derivados para la recuperación de IA.

  • Widget de chat en Next.js
  • Orquestación en NestJS
  • Reescritura de consultas según la conversación
  • Embeddings y generación con OpenAI
  • Supabase / PostgreSQL pgvector
  • Server-Sent Events
  • Observabilidad con Winston / Loki

Diagrama de arquitectura

Arquitectura del Asistente de IA de ShopYA en dos carriles. El carril de solicitudes va desde el visitante y el widget de chat en Next.js hasta la API NestJS, el historial, la reescritura opcional de la pregunta, text-embedding-3-small, la recuperación con pgvector en Supabase, el contexto recuperado, gpt-4o-mini, la respuesta por SSE y el registro de chat, tokens y costo. El carril de indexación lleva productos, tiendas y categorías autoritativos en Firestore, además del contenido de conocimiento de la plataforma, a través de formateadores y text-embedding-3-small hasta el índice vectorial derivado en Supabase.

Flujo de IA

La ejecución sigue una secuencia acotada de recuperación y generación. Puede mejorar la consulta de recuperación para una pregunta de seguimiento, pero no entra en un bucle autónomo ni invoca herramientas de negocio.

  1. Recibir el mensaje del visitante y el historial reciente de la conversación.
  2. Reescribir una pregunta de seguimiento contextual como consulta independiente cuando sea necesario.
  3. Crear el embedding de la consulta con text-embedding-3-small.
  4. Ejecutar recuperación por similitud coseno en pgvector con umbral 0,4 y top-k 10.
  5. Insertar el texto recuperado del marketplace y la plataforma en el contexto final.
  6. Generar con gpt-4o-mini y temperatura 0,1.
  7. Transmitir la respuesta mediante SSE y registrar chat, tokens y costo estimado.

Estrategia de prompt y contexto

El prompt define el alcance, el tono, el formato para el marketplace, orientación contra alucinaciones, rechazo de inyecciones de prompt, comportamiento explícito sin resultados y sintaxis para respuestas rápidas. El contexto final se arma en este orden deliberado:

  1. Instrucciones del sistema
  2. Contexto recuperado del marketplace y conocimiento de la plataforma
  3. Ejemplos estáticos few-shot
  4. Historial de conversación
  5. Mensaje actual del usuario

Contexto de producción

El asistente está integrado en la arquitectura real del marketplace ShopYA: una tienda Next.js en Vercel, un backend NestJS operado con PM2 y registros mediante Winston/Loki. La implementación usa gpt-4o-mini para generación conversacional y text-embedding-3-small para recuperación, equilibrando una experiencia responsiva con un costo de inferencia práctico. Es una aplicación RAG para descubrimiento, no un sistema autónomo ni operativo.

Decisiones y fundamentos

Usar RAG en lugar de respuestas basadas solo en el modelo

Decisión
Recuperar contexto del catálogo de ShopYA y de la plataforma antes de generar respuestas de descubrimiento.
Fundamento
Los datos cambiantes del marketplace y la orientación específica de ShopYA deben provenir de contenido mantenido, no solo de la memoria del modelo.
Compensaciones
El sistema requiere sincronización de vectores y la calidad de recuperación agrega otro modo de falla.

Mantener Firestore autoritativo y los vectores derivados

Decisión
Tratar los registros del marketplace y del conocimiento de la plataforma en Firestore como datos fuente, y las filas pgvector en Supabase como datos derivados para IA.
Fundamento
El índice de IA no debe convertirse en la fuente de verdad de productos, tiendas, categorías ni orientación de la plataforma.
Compensaciones
Los almacenes autoritativo y derivado deben sincronizarse cuando cambia el contenido fuente.

Mantener el modelo en modo de solo lectura

Decisión
Limitar el asistente a recomendaciones, explicaciones, enlaces y sugerencias de seguimiento, sin capacidades de modificación del negocio.
Fundamento
El descubrimiento y la orientación no justificaban exponer al modelo modificaciones de pedidos, productos, tiendas, reembolsos o pagos.
Compensaciones
El asistente puede guiar al visitante hacia el próximo paso, pero no completar acciones operativas.

Transmitir respuestas mediante SSE

Decisión
Enviar el texto generado de forma incremental desde la API NestJS hacia la tienda.
Fundamento
El streaming mejora la latencia percibida durante el descubrimiento conversacional sin inventar cifras de latencia.
Compensaciones
Las respuestas parciales y los errores posteriores al inicio de la transmisión requieren un manejo más cuidadoso en cliente y servidor.

Agregar evaluación antes de optimizar la recuperación

Decisión
Crear un dataset versionado y una suite de evaluación determinística antes de introducir cambios como chunking o reranking.
Fundamento
Los cambios futuros deben compararse con casos explícitos en lugar de ajustarse por impresiones subjetivas o complejidad impulsada por frameworks.
Compensaciones
La infraestructura de evaluación agrega mantenimiento y establece un método de comparación; por sí sola no mejora la calidad del modelo.

Evaluación

Luego agregué una suite reproducible de evaluación de IA para que los cambios futuros del RAG puedan compararse con casos explícitos en lugar de ajustarse por impresiones subjetivas. El dataset versionado contiene 36 casos y las pruebas determinísticas del evaluador pasan.

Cobertura de casos

  • Descubrimiento de productos, tiendas y categorías
  • Conocimiento de la plataforma
  • Reescritura de seguimiento y recuperación vacía
  • Solicitudes no admitidas e inyección de prompt

Métricas disponibles

  • Tasa de aciertos de recuperación y rango recíproco medio
  • Corrección sin resultados y comportamiento de reescritura
  • Comportamiento fundamentado y afirmaciones prohibidas
  • Enlaces inválidos y fallas del contrato de respuesta
  • Comportamiento ante inyección de prompt y datos de tokens/costo

No se informa una línea base de calidad con proveedores. Las credenciales aisladas de evaluación no se configuraron intencionalmente, por lo que no existen porcentajes de recuperación o generación para afirmar.

Limitaciones y próximos interrogantes

La primera versión en producción favoreció deliberadamente una recuperación simple y un alcance acotado. Estas restricciones mantienen el sistema comprensible y hacen explícitos los próximos interrogantes de ingeniería.

  • Un vector por entidad o artículo, sin chunking ni reranking
  • Sin citas de fuentes ni una capa de verificación de procedencia
  • Salida Markdown libre en lugar de una salida estructurada
  • Sin herramientas del modelo, bucle autónomo ni modificaciones del negocio
  • Observabilidad específica de IA limitada al registro de chats, tokens, costo y aplicación
  • Suite de evaluación implementada, pero sin línea base ejecutada con proveedores

Los próximos cambios de recuperación —como chunking o reranking— deberían justificarse mediante fallas medidas en una línea base controlada, no agregarse de forma preventiva.

Resultado e impacto

Entregué un asistente de descubrimiento de solo lectura, integrado en producción y fundamentado en contenido del marketplace y la plataforma ShopYA, además de una base de evaluación versionada para comparar futuros cambios de recuperación y prompt sin inventar resultados de calidad.