The Challenge
Etincelle Foods sold organic products through local markets with no online channel. Expanding nationally required a storefront that matched the brand's quality positioning — clean, editorial, and trustworthy — without the overhead of a Shopify subscription. The platform needed to handle product browsing, cart, checkout, and order confirmation end-to-end.
My Role & Scope
Sole developer. Scoped the project with the founder, designed the data model for products and orders, built the full storefront and checkout pipeline, integrated Stripe, and deployed to Vercel with a CI/CD pipeline.
What Was Built
Product Catalogue
Category-filtered product grid with ingredient lists, origin stories, certifications, and high-resolution photography.
Cart & Checkout
Persistent cart with quantity management, discount code support, and a streamlined Stripe Checkout flow.
Order Management
Admin dashboard for viewing orders, updating fulfilment status, and triggering transactional email updates to customers.
Brand Storytelling
Editorial landing page sections communicating sourcing philosophy, farming partnerships, and the brand's organic certifications.
Technical Deep Dive
Challenge
Product pages needed to rank for ingredient and origin keywords without sacrificing dynamic personalisation.
Solution
Used Next.js generateStaticParams to pre-render all product pages at build time, then layered dynamic cart state client-side — best of static SEO and interactive UX.
Challenge
Stripe webhook reliability was critical — a failed fulfilment trigger would mean an unprocessed order with no customer notification.
Solution
Implemented idempotent webhook handling with a processed event log in PostgreSQL, retrying failed notifications safely without double-processing payments.
What I'd Do Differently
E-commerce projects surface edge cases that generic SaaS products smooth over — partial payment failures, inventory race conditions, shipping address validation. Building this from scratch gave me deep respect for what platforms like Shopify handle invisibly. I'd evaluate build-vs-buy more carefully for commerce projects in future unless the client has specific customisation needs that justify the overhead.
Interested in building something similar?