Back to Portfolio
The ePantry home page: a rust-coloured bar with the email address and social icons, the ePantry logo, a product search field, links to Best Sellers, New Arrivals, Offers and Coupons and icons for sound, language, wishlist, bag and account, and a row of categories from Flour to Rice that runs off the right edge; below, the label "Kerkini, Serres", the heading "Food with a name and a place" with its second half in rust, a short introduction, a filled "Browse all products" button and an outlined "Meet the producers" button, and figures for 132 products on the shelf, free delivery from 30,00 € and delivery in 1–3 days, beside a panel of three products: a ketchup bottle, a jar of tsatsibeli sauce and a mustard bottle; the heading "What are you after?" starts below.
Open epantry.gr in a new tab

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.