E-commerce · Plataforma a la medida

Mueblería Paty: de Shopify a una plataforma propia

Reemplazamos Shopify y sus apps por un sistema hecho a la medida: la tienda en línea, el panel de administración, los pagos, las entregas y las apps móviles, todo en una sola plataforma que el negocio controla.

Tienda en línea de Mueblería Paty en mueblespaty.com
1sola app para tienda, panel y API
4pasarelas de pago integradas, más pago contra entrega
3apps: tienda Android, admin Android y agente de escritorio
320+pruebas automatizadas

El reto

Mueblería Paty es una mueblería con entregas en la Ciudad de México y el Estado de México. Su tienda vivía en Shopify: una mensualidad, una app de pago por cada función extra y un techo para lo que el negocio necesitaba de verdad, como vender a meses con financieras mexicanas, organizar los camiones de reparto o saber quién del equipo está en la tienda.

El objetivo era salir de Shopify sin perder nada de lo que ya funcionaba: el posicionamiento en Google, los catálogos de anuncios en Google, Meta, TikTok y Pinterest, el historial de clientes y pedidos, y la app que ya estaba publicada en Google Play.

Arquitectura

Una sola aplicación Elixir / Phoenix sirve dos sitios: la tienda pública y el panel de administración. Cada uno tiene su propio endpoint, router, cookie de sesión y assets, y un despachador por dominio (HostDispatch) manda cada petición al sitio que le toca. Ambos comparten la lógica de negocio y la base de datos.

Backend y webElixir, Phoenix 1.8, Phoenix LiveView, Ecto, Bandit, Tailwind y daisyUI
DatosSQLite con réplica continua a almacenamiento S3 (Litestream); imágenes en un bucket compatible con S3
ContenidoBlog en Markdown renderizado al compilar (MDEx); imágenes para compartir generadas con libvips
Apps móvilesKotlin: app de clientes (Views) y app de administración (Jetpack Compose) con notificaciones de Firebase Cloud Messaging
Agente de tiendaRust y Tauri: app de bandeja para macOS y Windows
InfraestructuraDocker (Alpine), Cloudflare, Sentry, health checks con monitoreo externo, Tailscale para el acceso interno

Una migración sin perder SEO

Lo más delicado de dejar Shopify es lo que ya está indexado. La nueva tienda conserva exactamente las mismas rutas que Shopify, así que Google, los anuncios y los enlaces compartidos siguen llegando al mismo lugar:

Pagos: cuatro pasarelas, un solo flujo

Además del pago contra entrega, el checkout ofrece Mercado Pago (tarjetas a meses, OXXO, SPEI), Atrato Pago (crédito a meses), Aplazo y Kueski Pay (pago en quincenas). Cada pasarela es una implementación del mismo behaviour de Elixir, sobre un flujo compartido:

  1. El pedido se crea como esperando pago y el cliente paga en el sitio del proveedor; su carrito se conserva hasta que el pago se aprueba.
  2. Al volver o al llegar el webhook, el pedido se vuelve a leer desde la API del proveedor, así que una notificación falsificada no puede aprobarlo. Donde el proveedor no tiene esa API (Kueski), la notificación sólo cuenta si viene firmada con un JWT válido.
  3. Cada 10 minutos se revisan los pedidos pendientes por si se perdió una notificación, y se cancelan solos cuando expiran (más tiempo con Mercado Pago, cuyas fichas de OXXO duran tres días).
  4. Las entregas y cancelaciones se reportan al proveedor, y desde el panel se hacen reembolsos totales o parciales. Cada llamada y notificación queda registrada.

Marketing y medición

Feeds de catálogo

Feeds diarios para Google Merchant Center, Meta, TikTok y Pinterest, una entrada por variante con precio, oferta, existencias y fotos. Se conservaron los IDs de Shopify para que los catálogos y campañas existentes siguieran funcionando.

Eventos de e-commerce

GA4, Google Ads, Meta, TikTok y Pinterest a partir de un solo registro de eventos. Las compras también van a Meta desde el servidor (Conversions API), deduplicadas con el pixel, para no perderlas con bloqueadores de anuncios.

Vistas previas para WhatsApp

Cada foto genera una versión ligera (menos de 280 KB) para og:image, porque WhatsApp descarta la imagen de la vista previa cuando pesa mucho más de 300 KB.

Reseñas de todas partes

Actores de Crawlee leen a diario las reseñas de Google Maps, Trustpilot y Facebook, y las guardan en la plataforma con un registro de cada sincronización.

Lista para el comercio con IA

La tienda publica un servidor MCP (Model Context Protocol) para que asistentes como ChatGPT o Claude puedan buscar en el catálogo, consultar zonas y condiciones de entrega, y armar un enlace de checkout para el comprador. Es de sólo lectura: el asistente nunca paga ni crea pedidos; el cliente termina la compra en la página de checkout.

También publica un /agents.md para agentes, y el panel tiene una sección de Asistentes IA que muestra qué preguntan, qué buscan sin encontrar y cuántos pedidos llegan por esos enlaces.

La operación, en el mismo sistema

El panel de administración está hecho con Phoenix LiveView: todo se actualiza en tiempo real vía PubSub, sin recargar la página.

Pedidos y entregas

Zonas de entrega, estatus de cada pedido y checkouts abandonados.

Camiones y viajes

Cada entrega es una parada de un viaje (camión, día y equipo); el avance del viaje mueve el estatus de sus entregas.

Analítica de ventas

Ventas de mostrador, en línea y pedidos manuales, uniendo el historial de Shopify con la tienda nueva.

Quién está en la tienda

Paty Agente, escrito en Rust, escanea la red local (ping, tabla ARP, mDNS y NetBIOS) y reporta por WebSocket qué teléfonos del equipo están conectados.

Catálogo y contenido

Productos, variantes, colecciones, páginas, blog en Markdown y redirecciones, editables desde el panel.

Admin en el teléfono

App Android que avisa de cada pedido y de cada pago aprobado, y permite editar productos y subir fotos desde la cámara.

La app de la tienda, sin Shopify

La app de clientes que ya estaba en Google Play se conectó a la nueva API (/api/tienda). El carrito vive en el teléfono y se vuelve a cotizar con los precios del día; para pagar, la app obtiene un enlace firmado que abre el checkout de la tienda en un WebView, así que zonas, pago contra entrega y todas las pasarelas funcionan igual que en la web.

Los clientes inician sesión sin contraseña, con un código de 6 dígitos enviado por correo (Resend), con límites por intento y por IP. Con sesión iniciada, el checkout se llena solo y Mis pedidos muestra también las compras hechas en la época de Shopify.

Operación confiable

Elixir Phoenix LiveView SQLite Litestream Rust Tauri Kotlin Jetpack Compose Docker Cloudflare MCP Crawlee

¿Tu tienda ya le quedó chica a Shopify?

Te ayudamos a migrar a una plataforma propia sin perder tu posicionamiento, tus anuncios ni tus clientes.

Platiquemos por WhatsApp