A-04
Koru Power Seller
Social selling para vendedores de tiendas VTEX. Marca blanca y multitenant: un solo deploy sirve a todos los retailers, cada uno con su marca y sus credenciales.
This sheet is not translated yet. Shown in Spanish.
| Client | Koru Suite · producto propio de la agencia |
|---|---|
| Type | producto |
| Platform | Cloudflare Workers |
| Year | 2026 |
| Role | Autor |
| Stack | TypeScript · React · Cloudflare Pages · D1 · KV · VTEX Catalog · VTEX OMS · Master Data |
| Código | 10.382 líneas · git ls-files ts/tsx, sin node_modules ni dist |
| Commits propios | 105 de 105 |
| Casos de test | 90 |
Contexto
Los vendedores de una tienda VTEX venden por WhatsApp, en el local, en la calle. Necesitan el catálogo, el precio real y la posibilidad de cerrar la orden desde el teléfono. Cada retailer quiere que eso se vea como su marca, no como la nuestra.
Opciones
Lo simple es un deploy por cliente: cada retailer con su instancia, su dominio y sus variables. Es simple hasta el tercero. Después son tres pipelines, tres certificados y tres versiones distintas del mismo bug.
Decisión
Un solo deploy, multitenant, con un único hostname para todos. El problema que eso crea es de identidad: si todos entran por la misma puerta, la puerta no puede tener el logo de nadie.
La resolución es un login en dos pasos. Primero el email: con eso la app busca a qué tienda pertenece esa persona y pinta la marca —logo y color— antes de pedir la contraseña. Cuando escribís la clave ya estás viendo tu tienda.
Hay dos tipos de cuenta y no comparten mecanismo. El administrador entra con su usuario de Koru Suite y no tiene contraseña propia en la app; si maneja varias tiendas, elige. El vendedor entra con email y contraseña que le da su administrador, y no tiene acceso ni a Koru ni al panel.
Verificación
10.382 líneas y 90 casos de test sobre Cloudflare Pages con D1 y KV. Las credenciales de VTEX son por tenant y viven del lado del servidor.
Consecuencias
Multitenant sobre un hostname significa que cada consulta lleva el tenant adentro y que un error de resolución es un error de seguridad, no de UI. Por eso la mitad de los tests son de eso y no de pantallas.