El puesto de mando del e-commerce de Castañer
El Dashboard Castañer es el lugar donde todos los datos de la tienda online —ventas, pedidos, stock, tráfico, devoluciones, fulfillment— confluyen en una sola verdad, viva las 24 horas del día.
No es un informe que se mira una vez al mes. Es el pulso diario del negocio: lo primero que se abre por la mañana y lo que responde, en segundos, la pregunta que importa en cada momento. Una sola fuente de verdad, siempre actualizada, en la que se puede confiar ciegamente. Esta confianza es todo el proyecto; todo lo demás —la arquitectura, los automatismos, los agentes— existe para protegerla.
El proyecto en 30 segundos
Qué es. Un dashboard interno 24/7 de KPIs operativos para castaner.com, la tienda online de Castañer (marca catalana de calzado, fundada en 1927).
Para quién. El equipo de e-commerce de Castañer. Nació como herramienta de un solo usuario y hoy es multiusuario con roles: gestión, agencia, dirección, operaciones, marketing y el equipo de tienda UK, cada uno con su vista.
Qué problema resuelve. Castañer vende por muchos canales y mercados; los datos viven dispersos entre Shopify, Klaviyo, GA4 y REVENI, a menudo con criterios que no cuadran entre sí. El dashboard los unifica, los hace consistentes y los sirve consolidados, sin que nadie tenga que exportar Excels ni recalcular nada.
Datos clave
| Dato | Detalle |
|---|---|
| Mercados | ES · FR · IT · UK · US · GR · resto de la UE/mundo |
| Canales | Web · Marketplaces · Tiendas físicas (10+ puntos) |
| 2 tiendas online | Principal (EUR) + UK (GBP) |
| Integraciones | Shopify · Klaviyo · GA4 · REVENI · transportistas |
| Idiomas | Trilingüe completo CA / EN / ES |
| Automatismos | ~20 procesos automáticos: snapshots, sincronización, 2 emails automáticos, auditoría diaria |
| Asistentes de IA | 4 asistentes especializados: redactor de emails, 2 traductores, auditor de datos |
Principios y reglas de oro
Principios no negociables. Cada uno ha nacido de un error real; seguirlos es lo que mantiene el dashboard fiable y mantenible.
Los datos no se inventan nunca
Todo lo que se afirma sale de una cifra real. Cuando una vista, un email o el chat necesitan un número, leen el campo ya publicado en el snapshot JSON; no vuelven a hacer la query a la base de datos.
Todo texto pasa por i18n (CA/EN/ES)
Ningún texto se codifica directamente ("hardcoded"). Todo va vía el diccionario de frontend/js/01-core.js: una clave en ca:{}, en:{} y es:{}, y en el HTML/JS se usa data-i18n o window.t(clau).
Los informes son autocontenidos
Los informes monográficos llevan los datos inyectados dentro del propio HTML. Se conserva siempre la versión con datos, nunca una plantilla vacía sin rellenar.
Despliegue controlado y trazable
Los cambios se publican siempre por una vía única y versionada, de forma que cada actualización quede registrada y sea reproducible. Nunca se sube un fichero "a mano" saltándose ese flujo.
Colisiones de funciones JS
El JS vive en 9 módulos (01-core.js…09-crm.js) que comparten un único scope global. Una function _foo() redeclarada sobrescribe silenciosamente la anterior (la última que se parsea gana).
_loadSheetJS: dos versiones, la segunda ganaba por hoisting → el bug sobrevivió 5 commits. Regla: antes de declarar function _helper(), haz grep -r en los 9 módulos. Si colisiona, pon un nombre específico del contexto.Consistencia visual vía CSS global
Todos los bloques con el patrón título → descripción → filtros tienen el mismo espaciado vertical, gobernado por shared.css. Anchura uniforme (width:90%; max-width:1900px).
margin-top inline en los banners o filtros. Un bloque nuevo con esta estructura no hay que estilarlo: el CSS global ya lo cuadra.Colores solo vía variables CSS
Hay dark mode (por defecto) y light mode (monocromo estricto: negro/blanco/grises, solo verde y rojo para positivos/negativos). Nunca hardcodear colores: siempre var(--xxx).
var() en el canvas → dentro de las configs de gráficos se usan grises neutros literales que funcionan en ambos temas.Las API keys de solo lectura no se rotan
Para keys de terceros (Klaviyo, Shopify) con scope solo lectura, si se exponen accidentalmente no se rotan: el riesgo es limitado (se pueden leer datos, no modificar nada).
UK es un mundo aparte
UK tiene su propia tienda, almacén, Klaviyo y moneda (GBP→EUR). Se ve en Realtime, Negocio, Producto y "Operaciones UK".
El sistema de un vistazo
El dashboard es un proceso de 4 capas. La clave de todo es la capa de snapshots: ninguna pantalla ni email consulta nunca la base de datos en vivo.
Las 4 capas · flujo de datos
El patrón snapshot · por qué existe
El frontend, el email diario y el chat Manuel no consultan nunca la base de datos en vivo: leen los mismos snapshots publicados que el sistema regenera periódicamente.
- Una sola fuente de verdad. Es imposible que el dashboard, el email y Manuel muestren cifras distintas: todos leen el mismo dato del mismo snapshot.
- Velocidad. Leer un snapshot en caché es prácticamente instantáneo; recalcularlo desde la base de datos sería mucho más lento.
- No sobrecarga la base de datos, que ya recibe escrituras continuas de los procesos de captura.
- Consistencia temporal. Todos ven la misma foto del mismo instante.
Las páginas, en clave de negocio
Cada pestaña responde una pregunta de negocio. "Quién la ve" indica los roles con acceso (el admin lo ve todo).
Los ritmos automáticos
Todo funciona solo gracias a una veintena de procesos programados. Esta es la jornada de un día normal.
El calendario de comunicación
Los emails de insights conocen el calendario comercial (campañas, Early Access y Rebajas por mercado). Sirve para contextualizar las comparativas vs el año anterior: a menudo una caída respecto al año pasado no es una alarma sino un desplazamiento de calendario.
El calendario se mantiene al día a medida que se planifican nuevas campañas. Detalle de marca: Castañer NO hace Black Friday (posicionamiento "NO Black Friday").
Decisiones clave y el porqué
Registro de decisiones de arquitectura. Formato: Decisión → Contexto → Por qué.
Los asistentes de IA
Cuatro asistentes especializados que apoyan el día a día del dashboard.
Glosario y convenciones
Canales
| Término | Definición |
|---|---|
| WEB | Ventas de la tienda online (incluida la app de compra). Todos los mercados, incluido UK. |
| MARKETPLACES | Ventas en marketplaces. Importes pequeños; la señal real es que la mayoría no arrancan (solo El Corte Inglés factura de forma consistente). |
| TIENDAS / POS | Ventas de tienda física, por punto de venta. Fuera de los KPIs online. |
Mercados
Los principales agregados de mercado incluyen UK.
Métricas
| Término | Significado |
|---|---|
| Ventas netas (pre-IVA) | Importe de las líneas tras descuentos, sin IVA ni envío. Métrica de referencia. |
| Bruto vs Neto | El KPI grande "Ventas hoy" y las cards de mercado son BRUTO (no restan devoluciones). Las tablas de detalle y Objetivos/Mensual son NETO (sí restan). El email diario usa BRUTO. |
| LY (Last Year) | Mismo día del año anterior, leído del snapshot publicado (no de la base de datos en vivo). |
| MTD | Month to date — mes en curso acumulado. |
| FY (Fiscal Year) | Año fiscal de Castañer: agosto → julio. |
| Same-store | Crecimiento de tiendas abiertas los 2 años (excluye nuevas como París/Roma y cerradas como La Roca). El % bruto de tiendas lo inflan las nuevas. |
| Visitantes vs Sesiones | Visitantes = visitantes únicos (algo menos que sesiones). Sesiones = con el reparto de mercado correcto. Para UK, los visitantes se derivan de las sesiones. |
| Conversión (realtime) | pedidos ÷ visitantes × 100 (los mismos números que se ven en la card). |
Otros términos
- Funnel: Sesiones → Carrito → Checkout → Compra (fuente Shopify; "ficha de producto" solo de GA4).
- BIS / Back-in-Stock: solicitudes de "avísame cuando vuelva". "Dinero perdido" = (solicitudes − conversiones) × precio medio, sin IVA.
- RMA: proceso de devolución de REVENI (estado, método, transportista, tiempos). Alrededor de la mitad de las devoluciones son por talla.
- PUDO / pickup point: paquete dejado en un punto de recogida; detectado a posteriori por la información del transportista (estado virtual "Pendiente de recogida").
- PUDO ≠ checkout: Castañer no ofrece puntos de recogida de terceros en el checkout.