Saltar al contenido

Cosmética y comercio electrónico · CRM/ERP a medida

CRM omnicanal Sunkiss

Sunkiss es una marca argentina de autobronceantes que vende en su tienda online y en Mercado Libre. Para ellos construimos el sistema que une stock, ventas, cobros, clientes y publicidad con una sola cifra de cada cosa.

Cliente
Sunkiss
Sector
Cosmética y comercio electrónico
Solución
CRM/ERP a medida
Periodo
Desde octubre de 2026
Estado
MVP Desplegado en servidor propio, Fase 1A cerrada

Resumen ejecutivo

CRM y gestión de stock para una marca argentina que vende en Tiendanube y Mercado Libre: lotes con FEFO, ventas unificadas, cobros conciliados y anuncios.

Sunkiss vendía por dos canales sin conexión entre sí y controlaba el stock, los costes y la publicidad por separado. El CRM lleva el stock como un registro de movimientos que no se borra, con remanente estimado por lote y vencimiento, descuenta cada venta pagada de Tiendanube y Mercado Libre una sola vez y gestiona combos, devoluciones y envíos a influencers. Sobre esa base calcula margen real con lo que liquidó Mercado Pago, segmenta clientes, lee Meta y Google Ads en modo lectura y programa las acciones del Cyber Monday. Está desplegado desde finales de octubre de 2026 con la Fase 1A cerrada.

El reto

  1. Las ventas llegaban por Tiendanube y por Mercado Libre, sin ninguna integración entre ambos, y el stock de cada producto había que cuadrarlo a mano.

  2. Los productos tienen fecha de vencimiento y se venden sueltos y en combos que comparten stock, así que no basta con un contador por producto.

  3. Las devoluciones, los reembolsos y los envíos a influencers, a veces registrados también como pedidos de 0 pesos, descuadraban el inventario sin dejar rastro.

  4. El margen real dependía de comisiones, cuotas sin interés y retenciones que cada medio de pago liquida a su manera, y de un gasto en publicidad repartido entre Meta, Google y Mercado Libre.

  5. Cualquier escritura automática en las cuentas publicitarias era un riesgo: hay cuentas de Meta cerradas para siempre por automatizaciones que tocaban presupuestos.

La solución

Una API en FastAPI sobre PostgreSQL en Supabase, con la lógica de stock escrita como funciones puras y probada antes de conectar ningún canal, y una web en Next.js pensada para usarse desde el móvil. Los webhooks de los canales solo disparan una lectura de la orden y el sistema aplica la diferencia contra lo ya descontado. n8n lanza los trabajos programados y toda escritura externa pasa por un único módulo que por defecto solo simula.

Funcionalidades

Qué hace, pantalla a pantalla

  • Stock por lotes con FEFO

    Cada entrada, venta, salida o ajuste es un movimiento que no se puede editar ni borrar. El remanente de cada lote se estima repartiendo las salidas por fecha de vencimiento y la interfaz lo rotula siempre como estimado.

  • Combos con versiones

    Un combo descuenta cada componente y su disponible es el que permite el componente más escaso. Cambiar la composición crea una versión nueva, así las ventas y las devoluciones pasadas conservan la composición con la que se vendieron.

  • Ventas unificadas de Tiendanube y Mercado Libre

    Tiendanube avisa por webhook firmado y los dos canales se consultan cada 15 minutos. Solo descuentan las pagadas, una publicación sin vincular genera una alerta y la vista de ventas muestra el margen con el coste de la fecha de venta.

  • Conteo físico y alertas

    El conteo compara lo contado con el stock estimado más lo pagado sin enviar menos las devoluciones en camino. La diferencia se imputa por lote de forma conservadora y un desvío de más de cien unidades abre una alerta.

  • Devoluciones y envíos a influencers

    Cada caso de posventa guarda su efecto en stock por producto y lote: vuelve a stock, baja o reembolso sin devolución. Un envío a una influencer cargado como salida y como pedido gratuito se detecta en los dos sentidos y descuenta una sola vez.

  • Cobros conciliados y finanzas

    Cada venta se cruza con el pago de Mercado Pago para obtener comisión, cuotas que paga el vendedor, retenciones y dinero pendiente de liberar. Finanzas suma gastos fijos, publicidad y costes en dólares para dar el resultado del mes.

  • Clientes RFM y contactos sugeridos

    Los compradores se deduplican entre canales por email, teléfono y documento. Se segmentan por recencia, frecuencia y monto, con cohortes por mes de primera compra, y el sistema propone mensajes de reposición o reseña que el dueño envía a mano.

  • Anuncios y auditoría en modo lectura

    Lee campañas de Meta y Google Ads, calcula el ROAS de equilibrio con el margen real del CRM y propone cambios con reglas fijas. La auditoría puntúa siete áreas con hallazgos e impacto estimado; el dueño aplica cada cambio a mano.

  • Cyber Monday programado

    Objetivos y comparativa en directo contra el Cyber anterior a la misma hora, día por día y por canal. Una grilla de promociones programa descuentos, cupones y encendido de anuncios de Meta, que se pueden ensayar enteros en modo simulación.

Módulos

Qué funciona hoy y qué está propuesto

5 operativos, 3 parciales y 1 propuestos. Los propuestos son diseño de producto: todavía no hay software detrás.

  • Stock, lotes, combos y conteos

    Operativo

    Registro de movimientos inmutable, FEFO, combos versionados, salidas manuales y conteo físico con imputación por lote, cubiertos por tests antes de conectar los canales.

  • Ventas de Tiendanube y Mercado Libre

    Operativo

    Ingesta por webhook y consulta cada 15 minutos, conciliación idempotente, historial completo para informes sin mover stock y webhooks de privacidad de Tiendanube.

  • Posventa y anti-duplicado de influencers

    Operativo

    Devoluciones de Mercado Libre y Tiendanube, reembolsos, envíos no entregados y cruce de salidas manuales con pedidos gratuitos.

  • Conciliación de cobros y finanzas

    Operativo

    Conciliación con Mercado Pago, resultado del mes, precios contra coste de reposición, ficha de costes por producto y cotización del dólar oficial y blue.

  • Costes de Pago Nube y Nave

    Parcial

    Sin API de movimientos, la comisión de Pago Nube se estima con la tarifa del plan y la de Nave espera a que el dueño cargue las tasas de su contrato; hasta entonces la venta queda sin conciliar y dice por qué.

  • Clientes, segmentos y contactos

    Operativo

    Deduplicación entre canales, segmentos RFM, cohortes, contactos sugeridos con baja respetada y encuesta pública de origen por pedido.

  • Anuncios, auditoría y competencia

    Parcial

    Lectura, recomendaciones y auditoría implementadas para Meta y Google Ads, más anuncios y creadores de la competencia; varios campos quedaban por verificar con las cuentas reales y el encendido programado solo existe para Meta.

  • Acciones programadas del Cyber

    Parcial

    Descuentos, cupones y encendido de anuncios programados y ensayables en simulación. Las escrituras reales dependen de activar el modo live, que decide el dueño, y de comprobar varios comportamientos en la tienda real.

  • Avisos por email y respuestas a preguntas de Mercado Libre

    Propuesto

    Las alertas viven hoy en la bandeja del sistema; el envío por email es de la Fase 1B. Los borradores de respuesta con aprobación del dueño están especificados, sin código.

Arquitectura

Cómo está construido

Plano · crm-sunkiss 5 capas · 20 piezas
  1. Clientes

    • Web del dueño y del operador, usable desde el móvil
    • Encuesta pública por pedido con enlace firmado
    • De Clientes a Interfaz web: navegador y móvil
  2. Interfaz web

    • Next.js 16 y React 19
    • Tailwind 4 con la identidad de la marca
    • Login con Supabase Auth y roles dueño y operador
    • De Interfaz web a API: JSON con JWT de Supabase
  3. API

    • FastAPI con psycopg 3 y pool de conexiones
    • JWT de Supabase y permisos por rol
    • Webhooks firmados con HMAC de Tiendanube
    • Módulo outbound, único lector del modo de escritura
    • De API a Dominio y servicios: una transacción por petición
  4. Dominio y servicios

    • Ledger de stock y reparto FEFO como funciones puras
    • Motor de ventas por efecto deseado y posventa
    • Conciliación de cobros, finanzas y segmentos RFM
    • Reglas de anuncios, auditoría y acciones del Cyber
    • Claude con salida JSON validada por esquema
    • De Dominio y servicios a Datos e integraciones: SQL, lecturas de canales y escrituras simuladas o reales
  5. Datos e integraciones

    • PostgreSQL en Supabase con 38 migraciones y RLS
    • Tiendanube, Mercado Libre y Mercado Pago
    • Meta Ads, Google Ads e Instagram en lectura
    • Navegador Chromium propio para la Biblioteca de anuncios y TikTok
    • n8n con 11 flujos que solo disparan trabajos
    • Docker en un VPS de Hetzner

Otros flujos

  • Datos e integraciones → API : webhooks firmados y consultas periódicas

Tecnologías

Stack verificado en el código

Interfaz

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS

Backend

  • Python
  • FastAPI
  • Pydantic
  • JWT

Datos

  • PostgreSQL
  • Supabase

IA y voz

  • Claude (Anthropic)

Automatización y vídeo

  • n8n
  • Playwright

Infraestructura

  • Docker
  • Hetzner

Integraciones

  • Mercado Libre
  • Mercado Pago
  • Meta Ads
  • Google Ads
  • Instagram Graph API
  • TikTok

Web y comercio

  • Tiendanube

Calidad

  • pytest

Ingeniería

Cómo se planteó y se construyó

  1. Auditoría y decisiones (octubre de 2026)

    Antes de escribir código se auditaron otros sistemas propios para reutilizar piezas y se documentaron las API de Tiendanube, Mercado Libre y Mercado Pago, con lo verificado separado de lo pendiente de comprobar. El dueño aprobó catorce decisiones y un mapa de estados por canal que fija cuándo cada orden mueve stock.

  2. Núcleo de stock y Tiendanube (octubre de 2026)

    Primero el catálogo con historial de costes y combos versionados, después los lotes, el ledger inmutable, el conteo y el motor de ventas, todo con tests sobre un Postgres propio. La conexión con Tiendanube llegó al final de la Fase 1A, con OAuth, webhooks firmados e importación.

  3. Mercado Libre, cobros y anuncios (octubre de 2026)

    Mercado Libre se conectó leyendo la cuenta real sin escribir en ella, con rotación del token bajo bloqueo. Siguieron la conciliación con Mercado Pago, verificada contra pagos reales, la lectura de Meta y Google Ads, la auditoría de anuncios, el análisis de la competencia y las finanzas del mes.

  4. Despliegue y Cyber Monday (octubre de 2026)

    La API, la web y los flujos de n8n se desplegaron en contenedores en un VPS de Hetzner. En los últimos días se añadieron la identidad visual de la marca, la ficha de costes, el asistente con el contexto del negocio y la planificación del Cyber Monday con su grilla de promociones.

Retos técnicos resueltos

Que la misma orden nunca descuente stock dos veces aunque lleguen webhooks repetidos, desordenados o con estados que cambian después del envío.
El webhook solo dispara una lectura de la orden. Con su estado actual se calcula el efecto deseado en stock y se aplica solo la diferencia contra lo ya registrado, con una clave de idempotencia única por movimiento y bloqueos por producto.
Saber cuánto queda de cada lote sin que el depósito registre qué lote sale en cada pedido.
El remanente por lote se calcula como una función pura del ledger: las salidas se reparten por fecha de vencimiento y los movimientos anclados a un lote lo respetan. El conteo físico recalibra los lotes y la pantalla rotula el resultado como estimado.
Calcular el coste real de cobrar cada venta con comisiones, cuotas sin interés y retenciones que cada medio liquida de forma distinta.
Se lee cada pago de Mercado Pago y se guarda lo que costó cobrarlo y lo retenido. Al contrastarlo con pagos reales se corrigió un doble conteo de las cuotas en Mercado Libre: el coste pasó a ser el mayor entre la comisión y la suma de comisión y cuotas.
Automatizar el Cyber Monday sin arriesgar las cuentas publicitarias ni los descuentos que el dueño ya tenía cargados.
Toda escritura pasa por un único módulo que solo simula salvo que el modo sea live, y un test impide cualquier otra forma de activarlo. Cada acción guarda el estado anterior y lo restituye al terminar, y las publicaciones con descuentos propios se saltan.
Usar IA para analizar anuncios y redactar textos sin que aparezcan afirmaciones que la marca no puede hacer.
Claude responde siempre en JSON validado por esquema y un validador determinista rechaza las expresiones prohibidas por la marca, con una sola reescritura. El contexto que recibe lleva solo totales, sin datos de clientes.

Resultados

Lo que se ha medido

Cada cifra lleva su fuente y su fecha. Lo que no se ha medido va aparte, como potencial.

  • 487

    casos de test automatizados de backend, en 63 archivos (dominio, servicios, API y canales)

    Recuento de funciones test_ en apps/api/tests del repositorio del CRM (commit 4133177) · 2026-11

Potencial · sin medición propia

  • 1 vez

    descuenta cada orden aunque el canal envíe el mismo webhook varias veces

  • 2 canales

    de venta con un único stock, un único listado de clientes y margen con el coste del momento

  • 0 escrituras

    en las cuentas publicitarias salvo el encendido programado que decide el dueño

Cronología

Cómo ha evolucionado

  1. Fase 0 aprobada por el dueño con las decisiones de stock, canales y combos.

  2. Núcleo de stock con FEFO, combos y posventa, y conexión con Tiendanube; cierre de la Fase 1A.

  3. Mercado Libre, conciliación con Mercado Pago y lectura de Meta y Google Ads.

  4. Despliegue en servidor propio y planificación del Cyber Monday.

Evolución prevista

Lo siguiente

Trabajo planificado, todavía no disponible.

  1. Previsto · 01

    Avisos por email y resumen semanal

    Envío por email de las alertas críticas y del resumen semanal, previsto para la Fase 1B; el canal de WhatsApp queda para después.

  2. Previsto · 02

    Respuestas a preguntas de Mercado Libre

    Borradores de respuesta redactados con la ficha de cada producto que el dueño aprueba desde el móvil antes de publicarlos, con los temas sensibles siempre en revisión manual.

  3. Previsto · 03

    Panel de pérdidas en reclamos y devoluciones vencidas

    Mostrar el coste de lo perdido en reclamos, que ya se guarda por línea, y avisar de las devoluciones sin revisar después de 15 días.

  4. Previsto · 04

    SEO mensual y publicación en redes

    Fases posteriores con informes de Search Console y GA4 y un publicador de contenido en redes sociales.

Proyectos relacionados

Más trabajo en esta línea

Ver todos los proyectos
  • Ficha del Self Tanning Mousse en sunkiss.com.ar: galería de fotos, sellos ANMAT, cruelty free y natural, precio con descuento, seis cuotas sin interés y botón de agregar al carrito.

    Sunkiss En producción

    Tienda online Sunkiss

    Cosmética y comercio electrónico · Tienda online y SEO

    Tema a medida para la tienda Tiendanube de Sunkiss: fichas de producto, listados y portada rediseñados, datos estructurados y un blog de 120 artículos.

    • Tiendanube
    • Sass
    • GSAP
    • YouTube Data API
  • Datos de demostración Tablero del CRM con las órdenes repartidas por estación del taller (preparación, diamantado, pintura, montaje, control de calidad y terminado), con operario y tiempo en curso.

    The Wheel Lab En producción

    CRM y ERP a medida para un taller de llantas

    Automoción y posventa · CRM/ERP a medida

    CRM y ERP a medida para un taller de reparación de llantas: de la consulta al cobro, con QR por llanta, recogidas con conductor y facturación por sucursal.

    • Python
    • FastAPI
    • SQLModel
    • Pydantic
  • Concesionario de vehículos de ocasión En producción

    CRM/DMS para un concesionario de ocasión

    Compraventa de vehículos de ocasión · CRM/DMS a medida

    CRM y DMS a medida para un concesionario de ocasión: stock, ventas, inversores, depósitos, facturación encadenada y fiscalidad REBU e IVA.

    • Next.js
    • React
    • TypeScript
    • Tailwind CSS

Hablemos

¿Necesitas desarrollar una solución similar?

Cuéntanos el problema. Te respondemos con un planteamiento claro: qué haríamos, en cuánto tiempo y con qué entregables.