Moroccan e-commerce runs on cash on delivery and WhatsApp, not card checkout. The interesting problem was not the storefront — it was that a small shop owner has no time to sit in an admin panel typing product records or refreshing an order list.
My role
Designed and built the platform and every automation workflow behind it.
How it's built
Next.js 16 App Router storefront on React 19, with Supabase as the database and API layer.
Cloudinary for product image storage and delivery transforms.
Five n8n workflows running in production against the same Supabase instance.
Photo-to-Product: the owner sends a product photo with a caption to a private chat; the image is uploaded to Cloudinary, an AI step extracts name, price and category, and the product appears in the shop.
A public chat bot and a WhatsApp bot both read the live catalogue and take cash-on-delivery orders, tagging each with its source channel.
A Supabase webhook fires on every new order into a dispatcher workflow that emails the owner immediately via Resend.
A private admin assistant answers questions about deliveries, orders, clients and sales by querying the live database.
What was actually hard
Two order channels — web chat and WhatsApp — had to write into one schema without duplicating logic or losing attribution of where a sale came from.
AI extraction from a photo caption is unreliable by nature, so the workflow validates the extracted fields against the schema before anything is written, rather than trusting the model output.
Order notification had to be effectively instant; a webhook-driven dispatcher beats polling on both latency and cost.
Where it stands
Live, with seven automation workflows active in production across this project and TRY Drive.