Sprint 1 · 4 mejoras front-end prioritarias

Don Colchon
Sprint 1

Las 4 mejoras de mayor impacto en conversion seleccionadas del handoff tecnico completo. Enfoque 100% front-end, listas para implementar en el theme actual.

Julio 2026  ·  doncolchon.com.mx
MSI Display
Cart Drawer
WhatsApp Float
Upsell PDP
01
Contexto

Por que estas 4 mejoras primero

De las 13 mejoras pendientes del handoff tecnico completo, estas 4 tienen el mejor ratio impacto/esfuerzo y son 100% front-end — no dependen de datos del cliente (como los metafields de sensacion o el contenido de FAQs).

4
Mejoras en este sprint
100%
Front-end
0
Dependencias de datos
3
Prioridad alta
● Orden de implementacion recomendado
  • 1. WhatsApp flotante — ~1 hora. Snippet global, cero riesgo, impacto inmediato en conversion de consultas. Genera confianza desde el primer dia.
  • 2. MSI display en cards y PDPs — ~3-4 horas. Snippet reutilizable + JS de recalculo por variante. Reduce la barrera psicologica del precio en todo el catalogo.
  • 3. Upsell de accesorios en PDP — ~4-5 horas. Bloque con metafield product_reference. Sube el ticket promedio (colchon + box + almohada).
  • 4. Cart drawer lateral con cross-sell — ~6-8 horas. El mas complejo del sprint. Requiere interceptar el ATC nativo. Reduce abandono y es el lugar definitivo para cross-sell.
02
Critico

Reglas pixel-safe de este sprint

Las 3 reglas no negociables que aplican a cada mejora de este sprint. Si un cambio rompe alguna, no sale a produccion.

01
Nunca usar fetch('/cart/add.js') independiente
Todas las interacciones con el carrito deben ir a traves del evento nativo del theme. Esto aplica al cart drawer, al upsell en PDP y a cualquier boton de “Agregar”. Un fetch aislado rompe Meta Pixel (AddToCart), Shopify Analytics, y checkout acelerado (Shop Pay, Apple Pay, Google Pay). Si no sabes cual evento nativo usa el theme actual, revisalo antes de escribir una linea de codigo.
02
Usar el snippet nativo de card de producto
El cart drawer muestra productos de cross-sell y el upsell muestra accesorios. En ambos casos, usar el snippet nativo del theme (ej. {%- render 'card-product', card_product: product -%}). Nunca crear HTML custom de tarjeta de producto — rompe tracking de ViewContent, AddToCart, y los Product Impressions. Verificar que el snippet existe en el theme antes de usarlo.
03
Precio: toLocaleString('es-MX'), nunca shop.money_format
El filtro | money de Liquid esta bien en Liquid puro. Pero en JavaScript (recalculo de MSI, precios dinamicos del cart drawer), usar siempre (price / 100).toLocaleString('es-MX', { style: 'currency', currency: 'MXN' }). No usar shop.money_format desde JS — produce output roto. Recordar que precios en Shopify estan en centavos.
03
Implementacion

Las 4 mejoras en detalle

Cada tarjeta incluye el contexto de negocio (por que importa), la implementacion tecnica (como hacerlo), y los criterios de aceptacion (como validar que esta bien). Las tarjetas estan en orden de implementacion recomendado.

1
Boton flotante de WhatsApp global
Prioridad alta ~1 hora Conversion directa

No hay boton de WhatsApp visible en ninguna pagina del sitio. Para el mercado mexicano de colchones (ticket promedio $5,000–$15,000+) esto es critico — un porcentaje alto de clientes necesita resolver una duda antes de comprar online. La competencia (Luuna, Emma Mexico, Spring Air) tiene WhatsApp visible en todas las paginas. Sin el boton, Don Colchon pierde conversiones de clientes que tienen dudas pero no van a llamar ni escribir email.

  • Crear snippets/whatsapp-float.liquid e incluirlo desde theme.liquid antes del cierre de </body>
  • Boton circular fijo: position: fixed; bottom: 20px; right: 20px; z-index: 99
  • Icono SVG de WhatsApp (no imagen raster) en verde oficial #25D366 sobre fondo blanco con box-shadow: 0 4px 14px rgba(0,0,0,0.15)
  • Link base: https://wa.me/52XXXXXXXXXX?text=Hola,%20me%20interesa%20un%20colchon
  • El numero de telefono y mensaje prellenado deben ser configurables desde schema settings del snippet
  • En paginas de producto: el mensaje prellenado debe incluir el nombre del producto actual: {{ product.title | url_encode }}. Ejemplo resultante: “Hola, me interesa el Colchon Chelsea”
  • Animacion de entrada sutil: scale(0) a scale(1) al hacer scroll > 300px, para no distraer en el hero
  • Tamano del boton: 56px diametro en desktop, 50px en mobile
  • Boton visible en todas las paginas despues de hacer scroll 300px
  • Click abre WhatsApp (app en mobile, web.whatsapp en desktop) con mensaje prellenado correcto
  • En PDP, el mensaje incluye el nombre del producto actual
  • No tapa el boton de ATC nativo en mobile (verificar en iPhone SE, el viewport mas angosto comun)
  • No tapa el cart drawer si se implementa despues
  • Schema settings permiten cambiar numero, mensaje, y toggle on/off
  • Lighthouse: no introduce CLS > 0.01 (porque es fixed, no debe afectar)
2
Display de MSI en cards y PDPs
Prioridad alta ~3-4 horas Barrera psicologica del precio

Hoy Don Colchon menciona MSI solo en un banner generico en la parte superior del sitio. El cliente que ve un colchon a $10,599 no sabe que puede pagarlo a $883/mes hasta que llega al checkout. Mostrar el monto mensual junto al precio en cada card de producto y cada PDP es el cambio con mejor ratio impacto/esfuerzo de todo el sprint. Reduce la barrera psicologica del precio alto y aumenta la probabilidad de click-through y ATC.

Don Colchon acepta MSI via Mercado Pago y tarjetas de credito. Los tiers son:

  • $1,999 – $4,999: hasta 3 MSI
  • $5,000 – $5,999: hasta 6 MSI
  • $6,000 – $8,999: hasta 9 MSI
  • $9,000+: hasta 12 MSI

Importante: estos tiers son ejemplo basado en la politica general de Mercado Pago. Confirmar con Don Colchon los tiers exactos antes de implementar. Los thresholds se configuran en el snippet y se pueden ajustar sin tocar logica.

  • Crear snippets/msi-display.liquid que reciba el precio como parametro y devuelva el bloque formateado
  • En cards de coleccion: insertar {%- render 'msi-display', price: card_product.price -%} debajo del precio en el snippet de card del theme
  • En PDP: insertar {%- render 'msi-display', price: product.selected_or_first_available_variant.price -%} debajo del precio
  • Recalculo por variante: cuando el usuario cambia tamano (Individual, Matrimonial, Queen, King), el MSI debe recalcularse en JavaScript escuchando el evento de cambio de variante del theme
  • El nombre del evento de variante cambia entre themes — buscar en el JS del theme actual (variant:change, variant:changed, variantChange, etc.)
  • Styling: texto secundario debajo del precio, font-size: 13px, color muted, con icono de tarjeta de credito opcional
  • Si el precio no califica para MSI (debajo del tier minimo), no mostrar nada
  • Todas las cards de coleccion muestran MSI debajo del precio cuando el producto califica
  • El PDP muestra MSI debajo del precio principal
  • Al cambiar variante/tamano en el PDP, el MSI se recalcula instantaneamente (sin reload)
  • Productos debajo del umbral minimo no muestran MSI (sin linea vacia ni placeholder)
  • El calculo es correcto: precio / meses = monto mensual redondeado
  • Formato es-MX: $883/mes a 12 MSI, no $883.33/month at 12 months
  • Precios en Shopify estan en centavos — el snippet divide entre 100 antes de mostrar
3
Upsell de accesorios en PDP
Prioridad alta ~4-5 horas Ingreso incremental

La PDP del Chelsea dice “*Para este Colchon se recomienda el Box One de nuestra linea de Bases y Boxes” como texto plano con asterisco al final de la descripcion. No enlaza al producto, no muestra imagen, no muestra precio. El cliente tiene que ir a buscar el box por su cuenta. Esto es la venta cruzada mas natural de la industria de colchones (colchon + base + almohada + protector) y hoy se esta perdiendo por completo.

  • Crear seccion sections/pdp-upsell.liquid que se inserta debajo de la informacion principal del producto en el template de producto
  • Vinculacion via metafields: crear metafields de tipo product_reference (lista) en el namespace custom:
    custom.accesorios_recomendados (tipo: lista de referencias de producto)
    Esto permite al equipo de Don Colchon asignar box, almohada y protector desde el admin sin tocar codigo
  • Titulo de seccion: “Completa tu descanso” (configurable desde schema)
  • Para renderizar cada accesorio: usar el snippet nativo del theme de card de producto. Verificar si el theme tiene card-product, product-card u otro nombre — buscar en /snippets/
  • Si el theme NO tiene card de producto reutilizable: crear un mini-card con imagen, titulo, precio, y boton “Agregar” que dispare el click() sobre el boton ATC nativo de un form oculto. Nunca hacer fetch a /cart/add.js directamente
  • Layout: fila horizontal en desktop (3-4 items max), scroll horizontal o stack en mobile
  • Si el metafield esta vacio, la seccion no se renderiza (sin espacio vacio)
  • Incluir MSI display en cada accesorio si califica

Esto lo puede hacer el equipo de Don Colchon desde Settings → Custom data → Products → Add definition:

  • Name: Accesorios recomendados
  • Namespace and key: custom.accesorios_recomendados
  • Type: Product reference (list)
  • Despues, en cada PDP de colchon, agregar los productos complementarios (Box One, Almohada Classic, Protector, etc.)
  • El bloque aparece solo en PDPs que tengan metafield de accesorios asignado
  • No aparece (sin espacio vacio) si el metafield esta vacio
  • Click en “Agregar” de un accesorio anade el producto al carrito via evento nativo del theme
  • Meta Pixel registra AddToCart para cada accesorio agregado
  • Imagen, titulo y precio del accesorio se actualizan automaticamente si el producto cambia en el admin
  • En mobile: los accesorios son navegables sin overflow roto
  • MSI se muestra en cada accesorio que califique
4
Cart drawer lateral con cross-sell
Prioridad alta ~6-8 horas Reduccion de abandono + AOV

Hoy, hacer click en “Agregar al carrito” lleva a /cart (pagina completa). Esto rompe el flujo de compra: el cliente que queria seguir viendo productos ahora tiene que navegar de regreso. Un drawer lateral (panel que se desliza desde la derecha) mantiene al cliente en la pagina, reduce friccion, y es el lugar perfecto para sugerir accesorios complementarios. Ademas, el drawer es donde viven los CTAs de checkout acelerado (Shop Pay, Apple Pay) que convierten hasta 2x mas rapido.

  • Crear snippets/cart-drawer.liquid e incluirlo en theme.liquid antes del cierre de </body>
  • Interceptar el ATC del theme: buscar donde el theme maneja el submit del formulario de producto. Modificar para que abra el drawer en lugar de redirigir a /cart. Metodo preferido: cambiar la accion del form a AJAX y abrir el drawer con el resultado. No crear un segundo listener — modificar el existente
  • Estructura del drawer:
    • Header: “Tu carrito (N)” + boton de cerrar (X)
    • Lista de items: imagen, titulo, variante (tamano), cantidad editable (+/−), precio, boton eliminar
    • Bloque de cross-sell: 2-3 productos complementarios via cart.items.first.product.metafields.custom.accesorios_recomendados (reutiliza los mismos metafields del upsell)
    • Subtotal + MSI display del total del carrito
    • Boton “Ir al checkout” prominente
    • Botones de checkout acelerado (Shop Pay, Apple Pay, Google Pay) — estos los renderiza Shopify automaticamente si estan activos; asegurar que el contenedor dynamic-checkout-buttons esta presente
  • Overlay: fondo oscuro semitransparente que cierra el drawer al hacer click fuera
  • Animacion: transform: translateX(100%) a translateX(0) con transition: 0.3s ease
  • Ancho: 420px en desktop, 100vw en mobile (< 480px)
  • Scroll: la lista de items tiene overflow-y scroll; el subtotal y botones estan fijos abajo
  • Actualizar el icono del carrito en el header con el count correcto despues de cada operacion (agregar, editar cantidad, eliminar)
  • Accesibilidad: focus trap dentro del drawer cuando esta abierto; cerrar con Escape; aria-modal="true"

Todas las operaciones del drawer usan los endpoints nativos de Shopify. Esto NO viola la regla pixel-safe siempre y cuando el evento AddToCart del theme (y por extension el pixel) se dispare antes de la llamada:

  • Agregar: POST /cart/add.js — pero llamado despues de que el form nativo del theme haga su dispatch de evento
  • Actualizar cantidad: POST /cart/change.js con { id: variant_id, quantity: n }
  • Obtener estado: GET /cart.js para re-renderizar el drawer despues de cambios
  • Despues de cada operacion, refrescar el HTML del drawer con los datos actualizados de /cart.js
  • Click en ATC (en PDP o cards) abre el drawer lateral en lugar de redirigir a /cart
  • El drawer muestra items correctos con imagen, variante, precio y cantidad
  • Editar cantidad (+/−) actualiza subtotal en tiempo real sin reload
  • Eliminar un item lo quita del drawer y actualiza el count del header
  • Bloque de cross-sell muestra 2-3 accesorios relevantes
  • Agregar un accesorio de cross-sell lo anade al carrito y actualiza el drawer
  • Subtotal incluye MSI display del total
  • Boton “Ir al checkout” lleva a /checkout
  • Checkout acelerado (Shop Pay, Apple Pay, Google Pay) aparece y funciona
  • Meta Pixel dispara AddToCart para cada producto agregado (verificar con Meta Pixel Helper)
  • Drawer se cierra con X, click fuera, o tecla Escape
  • Mobile: drawer ocupa 100% del ancho sin overflow horizontal
  • La pagina /cart sigue funcionando como fallback (acceso directo via URL)
04
Codigo de referencia

Snippets de referencia

Esqueletos de codigo para los componentes clave. Son punto de partida — el desarrollador adapta al theme actual. No copiar-pegar sin verificar nombres de snippets, eventos y convenciones del theme.

✓ Snippet
snippets/whatsapp-float.liquid

Boton flotante global con mensaje contextual por producto.

Liquid
{%- comment -%} Incluir en theme.liquid antes de </body>: {%- render 'whatsapp-float' -%} {%- endcomment -%} {%- liquid assign wa_phone = section.settings.phone | default: '5218001234567' assign wa_msg_base = section.settings.message | default: 'Hola, me interesa un colchon' if template.name == 'product' and product.title assign wa_msg = wa_msg_base | append: ' - ' | append: product.title else assign wa_msg = wa_msg_base endif assign wa_msg_encoded = wa_msg | url_encode -%} <a href="https://wa.me/{{ wa_phone }}?text={{ wa_msg_encoded }}" target="_blank" rel="noopener noreferrer" class="wa-float" aria-label="Enviar WhatsApp" id="wa-float-btn" > <svg viewBox="0 0 24 24" width="28" height="28" fill="#fff"> <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347z"/> <path d="M12 0C5.373 0 0 5.373 0 12c0 2.625.846 5.059 2.284 7.034L.789 23.492a.5.5 0 00.611.611l4.458-1.495A11.96 11.96 0 0012 24c6.627 0 12-5.373 12-12S18.627 0 12 0zm0 22c-2.201 0-4.266-.7-5.947-1.888l-.35-.245-2.83.949.949-2.83-.245-.35A9.96 9.96 0 012 12C2 6.486 6.486 2 12 2s10 4.486 10 10-4.486 10-10 10z"/> </svg> </a> <style> .wa-float { position: fixed; bottom: 20px; right: 20px; z-index: 99; width: 56px; height: 56px; border-radius: 50%; background: #25D366; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 14px rgba(0,0,0,.15); transform: scale(0); transition: transform .3s ease; text-decoration: none; } .wa-float.is-visible { transform: scale(1); } .wa-float:hover { box-shadow: 0 6px 20px rgba(0,0,0,.25); } @media (max-width: 480px) { .wa-float { width: 50px; height: 50px; } } </style> <script> (() => { const btn = document.getElementById('wa-float-btn'); if (!btn) return; let shown = false; window.addEventListener('scroll', () => { if (!shown && window.scrollY > 300) { btn.classList.add('is-visible'); shown = true; } }, { passive: true }); })(); </script> {%- schema -%} { "name": "WhatsApp Float", "settings": [ { "type": "text", "id": "phone", "label": "Numero con lada", "default": "5218001234567" }, { "type": "text", "id": "message", "label": "Mensaje prellenado", "default": "Hola, me interesa un colchon" } ] } {%- endschema -%}

Nota: Si este snippet se usa como snippet (no seccion), quitar el bloque {%- schema -%} y pasar phone/message como variables desde theme settings o hardcoded.

✓ Snippet
snippets/msi-display.liquid

Muestra el MSI maximo aplicable. Reutilizable desde card de producto, PDP y cart drawer.

Liquid
{%- comment -%} Uso en card: {% render 'msi-display', price: card_product.price %} Uso en PDP: {% render 'msi-display', price: product.selected_or_first_available_variant.price %} Uso en cart: {% render 'msi-display', price: cart.total_price %} {%- endcomment -%} {%- liquid assign p = price | default: 0 assign max_msi = 0 if p >= 900000 assign max_msi = 12 elsif p >= 600000 assign max_msi = 9 elsif p >= 500000 assign max_msi = 6 elsif p >= 199900 assign max_msi = 3 endif -%} {%- if max_msi > 0 -%} {%- assign monthly = p | divided_by: max_msi -%} <p class="msi-display" data-msi-price="{{ p }}" data-msi-months="{{ max_msi }}"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> <rect x="1" y="4" width="22" height="16" rx="2"/><line x1="1" y1="10" x2="23" y2="10"/> </svg> Desde <strong data-monthly>{{ monthly | money_without_trailing_zeros }}</strong>/mes a <strong data-msi>{{ max_msi }}</strong> MSI </p> {%- endif -%}
CSS
.msi-display { font-size: 13px; color: #2E7CE6; margin-top: 4px; display: flex; align-items: center; gap: 6px; } .msi-display strong { font-weight: 600; }
✓ JavaScript
Recalculo de MSI al cambiar variante en PDP

Escucha el cambio de variante y actualiza el monto mensual. El nombre del evento varia entre themes — buscar en el JS del theme actual.

JavaScript
// Ajustar 'variant:change' al evento real del theme // Buscar en assets/*.js del theme: 'variant', 'change', 'select' document.addEventListener('variant:change', (e) => { const variant = e.detail?.variant; const el = document.querySelector('.msi-display'); if (!el || !variant) return; const price = variant.price; // en centavos let maxMsi = 0; if (price >= 900000) maxMsi = 12; else if (price >= 600000) maxMsi = 9; else if (price >= 500000) maxMsi = 6; else if (price >= 199900) maxMsi = 3; if (maxMsi === 0) { el.style.display = 'none'; return; } const monthly = (price / maxMsi / 100).toLocaleString('es-MX', { style: 'currency', currency: 'MXN', minimumFractionDigits: 0, maximumFractionDigits: 0 }); el.querySelector('[data-monthly]').textContent = monthly + '/mes'; el.querySelector('[data-msi]').textContent = maxMsi; el.style.display = ''; });

Importante: los thresholds en este JS deben coincidir exactamente con los del snippet Liquid. Si cambian los tiers, actualizar en ambos lugares.

✓ Snippet
sections/pdp-upsell.liquid (esqueleto)

Estructura base del bloque de upsell. Adaptar el nombre del snippet de card al del theme.

Liquid
{%- assign accesorios = product.metafields.custom.accesorios_recomendados.value -%} {%- if accesorios != blank -%} <section class="pdp-upsell"> <h2 class="pdp-upsell__title"> {{ section.settings.title | default: 'Completa tu descanso' }} </h2> <div class="pdp-upsell__grid"> {%- for item in accesorios -%} {%- comment -%} CAMBIAR 'card-product' al snippet real del theme. Buscar en /snippets/ el archivo de card. Si no existe, crear mini-card (ver nota abajo). {%- endcomment -%} {%- render 'card-product', card_product: item -%} {%- endfor -%} </div> </section> {%- endif -%} {%- schema -%} { "name": "Upsell PDP", "settings": [ { "type": "text", "id": "title", "label": "Titulo de seccion", "default": "Completa tu descanso" } ] } {%- endschema -%}

Clave: el {%- render 'card-product' -%} es el punto critico. Si el theme usa otro nombre (product-card, card, product-card-grid), cambiar aqui. Si no existe un snippet reutilizable, crear uno minimo que use el ATC nativo.

05
QA

Criterios de aceptacion globales

Independiente de los criterios de cada mejora, todo el sprint debe pasar estas validaciones antes de publicar.

✓ Pixel y analitica
  • Meta Pixel Helper reporta los 3 eventos clave: ViewContent en PDP, AddToCart al agregar, InitiateCheckout al iniciar checkout
  • AddToCart debe dispararse al agregar desde: PDP, upsell PDP, y cross-sell del cart drawer — verificar los 3 flujos
  • Shopify Analytics registra sesiones, productos vistos y ventas correctamente
  • No hay errores en la consola del navegador en los flujos: home → PDP → ATC → drawer → checkout
✓ Performance
  • Lighthouse mobile: Performance ≥ 70, Accessibility ≥ 90, Best Practices ≥ 90
  • LCP < 2.5s en home y PDPs principales (el drawer y el WhatsApp son lazy, no deben afectar)
  • CLS < 0.1 — el MSI display debajo del precio puede causar CLS si carga despues del precio; asegurar que el espacio esta reservado o que se renderiza en el mismo batch
✓ Checkout acelerado intacto
  • Shop Pay aparece en el drawer y funciona
  • Apple Pay aparece en Safari iOS y funciona
  • Google Pay aparece en Chrome y funciona
  • PayPal aparece como metodo en checkout
  • Si despues de implementar el cart drawer alguno de estos botones desaparece, hay una regla pixel-safe rota — no publicar hasta arreglarlo
✓ Cross-device
  • Chrome, Safari, Firefox — ultimas 2 versiones (desktop y mobile)
  • iOS Safari — el browser mas problematico; verificar drawer, WhatsApp link, y MSI
  • Mobile real (no solo DevTools) — el drawer en 320px (iPhone SE) no debe tener overflow ni tapar el ATC
  • Tablet (768-1024px) — drawer a 420px, no a 100vw
✓ Formato es-MX
  • Todos los textos nuevos en espanol
  • Precios con formato es-MX: $13,739 (coma de miles, sin decimales)
  • MSI: Desde $883/mes a 12 MSI, no From $883/month at 12 months
  • WhatsApp: mensaje prellenado en espanol sin caracteres rotos
06
Comunicacion

Proceso de trabajo

Como avanzar, validar y publicar este sprint.

● Flujo recomendado
  • 1. Theme duplicado: Trabajar siempre sobre una copia del theme publicado, nunca sobre el live
  • 2. Una mejora a la vez: WhatsApp → MSI → Upsell → Cart drawer. Implementar, probar, validar pixel events, y luego siguiente
  • 3. Demo despues de mejora 2 (MSI): Compartir preview URL del theme duplicado para que el cliente valide MSI + WhatsApp antes de continuar
  • 4. Demo despues de mejora 4 (drawer): Segunda validacion con las 4 mejoras completas
  • 5. QA completo: Pasar todos los criterios de la seccion anterior antes de publicar
  • 6. Publicar en horario de bajo trafico: Martes o miercoles temprano, con monitoreo activo el resto del dia
  • 7. Rollback: El theme anterior queda intacto como backup — reactivable con 1 clic
⚠ Escalar a DAR Media si...
  • El theme no tiene un snippet de card de producto reutilizable — necesitamos definir la estrategia alternativa juntos
  • El evento de cambio de variante del theme no se identifica (para el recalculo de MSI)
  • El ATC del theme no es interceptable para el cart drawer (algunos themes lo manejan server-side)
  • Un pixel event deja de disparar despues de un cambio — parar todo y escalar de inmediato
  • Los tiers de MSI del snippet no coinciden con la politica real de Mercado Pago/tarjetas de Don Colchon
  • Cualquier ambiguedad sobre como implementar algo — mejor preguntar antes que asumir
● Setup requerido del cliente
  • WhatsApp: proporcionar el numero de telefono oficial de atencion online con lada internacional (+52...)
  • MSI: confirmar los tiers reales (montos minimos por plazo) de su cuenta de Mercado Pago y/o procesador de tarjetas
  • Upsell: despues de que el desarrollador cree el metafield, el equipo de Don Colchon debe asignar los accesorios recomendados a cada colchon desde el admin de Shopify (Products → [producto] → Metafields)

4 mejoras, maximo impacto

WhatsApp captura al cliente que duda. MSI reduce la barrera psicologica del precio alto. Upsell sube el ticket promedio. Cart drawer reduce abandono y cierra el ciclo de cross-sell.

Las 4 trabajan en conjunto: el cliente ve el colchon con su precio mensualizado (MSI), agrega al carrito y ve los accesorios (upsell), el drawer le sugiere completar el combo, y si tiene dudas, WhatsApp esta siempre visible. Es un sprint compacto con impacto directo en revenue.

Cualquier duda durante la implementacion: hola@darmedia.mx