ePantry — A Greek Grocery Shop, Rebuilt from WooCommerce on Laravel
Overview
ePantry sells food with a name and a place: pulses, pasta, flour, herbs, sauces and honey from a dozen farms and workshops in northern Greece, shipped from Kerkini. The old shop ran on WordPress and WooCommerce. It was replaced by a Laravel 12 storefront designed from scratch, live since 8 September 2026, with the catalogue, categories, editorial content, order history and store settings migrated from the WooCommerce database, so nothing the customers or the shop relied on was lost.
The design takes its cue from a pantry shelf. The product photos are cut-out packshots on white, so the interface stays quiet underneath them: a white ground, a continuous hairline grid instead of floating cards, one accent colour. Every product card, product page and cart row carries a shelf label with the net weight, the price per kilo or litre, the producer and the region. The producers have pages of their own, the old blog lives on as a journal of recipes and pantry guides, and the shop takes cash on delivery or a bank transfer to any of three banks, so customers can pay without a transfer fee.
Challenges
A rebuild has to keep everything that already works: 238 products with their photos, categories and stock settings, the blog, the order history and every setting tuned over the years, carried over from WooCommerce without a gap. Some of the old data would have broken the new shop if copied literally — products sold with no stock count, drafts, a low-stock rule that would have flagged the whole catalogue. And a grocery has rules of its own: pre-packed food sold by weight must show its price per kilo, Greek capitals lose their accents, and the brand's terracotta, at 3.96:1 on white, is too light to carry text.
Solutions
Import commands read the WooCommerce database directly and map it onto the new schema — products, categories, producers, images, posts, orders and settings, each keeping its old ID for traceability — and translate the old shop's quirks rather than copy them: untracked stock stays buyable, drafts stay drafts, the low-stock threshold stays at two. The shelf label puts the unit price beside every selling price, as Greek law requires. A darker shade of the brand colour carries all text, and Greek is written in sentence case and uppercased by CSS so the accents fall correctly, which a test enforces. Motion is one GSAP sequence and quiet scroll reveals, and the optional sound never starts without a gesture. Product, producer and recipe pages carry structured data, and the shop's llms.txt is generated from the database, so the free-delivery threshold it states can no longer drift.


