Volver al portfolio
La portada de ePantry: una barra color teja con el correo electrónico e iconos de redes sociales, el logotipo de ePantry, un campo de búsqueda de productos, enlaces a Best Sellers, New Arrivals, Offers y Coupons e iconos de sonido, idioma, favoritos, bolsa y cuenta, y una fila de categorías de Flour a Rice que sigue más allá del borde derecho; debajo, la etiqueta «Kerkini, Serres», el titular «Food with a name and a place» con la segunda mitad en color teja, una breve introducción, un botón relleno «Browse all products» y otro con contorno, «Meet the producers», y cifras de 132 productos en el estante, envío gratuito desde 30,00 € y entrega en 1–3 días, junto a un panel con tres productos: un bote de kétchup, un tarro de salsa tsatsibeli y un bote de mostaza; más abajo empieza el titular «What are you after?».
Abrir epantry.gr en una pestaña nueva

ePantry — Tienda Griega de Alimentación, Reconstruida de WooCommerce a Laravel

Resumen

ePantry vende alimentos con nombre y lugar: legumbres, pasta, harinas, hierbas, salsas y miel de una docena de granjas y talleres del norte de Grecia, enviados desde Kerkini. La antigua tienda funcionaba con WordPress y WooCommerce. Se sustituyó por un escaparate en Laravel 12 diseñado desde cero, en línea desde el 8 de septiembre de 2026, con el catálogo, las categorías, el contenido editorial, el historial de pedidos y los ajustes de la tienda migrados desde la base de datos de WooCommerce, para que no se perdiera nada de lo que necesitaban los clientes y la tienda.

El diseño se inspira en un estante de despensa. Las fotos de producto son bodegones recortados sobre blanco, así que la interfaz se mantiene discreta bajo ellas: fondo blanco, una retícula continua de líneas finas en lugar de tarjetas flotantes, un único color de acento. Cada tarjeta, página de producto y línea del carrito lleva una etiqueta de estante con el peso neto, el precio por kilo o litro, el productor y la región. Los productores tienen sus propias páginas, el antiguo blog sigue como diario de recetas y guías de despensa, y la tienda acepta pago contra reembolso o transferencia a cualquiera de tres bancos, para que los clientes paguen sin comisión por transferencia.

Retos

Una reconstrucción debe conservar todo lo que ya funciona: 238 productos con sus fotos, categorías y ajustes de inventario, el blog, el historial de pedidos y cada ajuste perfeccionado con los años, trasladados desde WooCommerce sin huecos. Algunos datos antiguos habrían roto la nueva tienda si se hubieran copiado al pie de la letra: productos vendidos sin recuento de existencias, borradores y una regla de existencias bajas que habría marcado todo el catálogo. Y una tienda de alimentación tiene sus propias reglas: los alimentos envasados que se venden al peso deben mostrar su precio por kilo, las mayúsculas griegas pierden sus tildes y el terracota de la marca, con un contraste de 3,96:1 sobre blanco, es demasiado claro para llevar texto.

Soluciones

Unos comandos de importación leen directamente la base de datos de WooCommerce y la trasladan al nuevo esquema —productos, categorías, productores, imágenes, entradas, pedidos y ajustes, cada uno con su antiguo identificador para la trazabilidad— y traducen las particularidades de la antigua tienda en lugar de copiarlas: las existencias sin recuento siguen a la venta, los borradores siguen siendo borradores y el umbral de existencias bajas se queda en dos. La etiqueta de estante coloca el precio unitario junto a cada precio de venta, como exige la ley griega. Un tono más oscuro del color de la marca lleva todo el texto, y el griego se escribe en minúsculas y CSS lo pasa a mayúsculas para que las tildes caigan correctamente, algo que comprueba una prueba automática. El movimiento es una secuencia de GSAP y apariciones discretas al desplazarse, y el sonido opcional nunca empieza sin un gesto. Las páginas de productos, productores y recetas llevan datos estructurados, y el llms.txt de la tienda se genera desde la base de datos, de modo que el umbral de envío gratuito que indica ya no puede quedar desfasado.