An online shop for products sold by weight

2026 | Case study / by Carmelo Bisignano, design and development

Project information

Industry
Food retail
Duration
1 year
Team
1 product designer (me), Cursor multi-agent coding and DevOps
My role
Design and development, end to end, Purchase-order UX and email system, n8n automations and AI publishing
Users
Customers ordering online, The shop team, confirming orders by hand
Tools
WordPress, WooCommerce, PHP, n8n, Gemini, Telegram, Polylang, MailPoet

Live store: bottegadeiduemonti.it

Overview

Bottega dei Due Monti sells cheeses, cured meats and preserves from the Nebrodi mountains in Sicily. The family started in Montalbano Elicona in 1970; the shop is now in Capo d’Orlando, and the same products ship online.

I built the whole thing: the homepage, a storefront that deals honestly with products sold by weight, the emails that take every order from request to payment, and the automations that let a very small team run it without drowning in admin.

Marketing site

Before anyone sees a price, they should know what kind of place this is. The homepage does that with dark surfaces, the shop’s green and yellow, and photos that bring the Nebrodi close. It tells the family story since 1970, uses the shop’s own line, «Mangia sano… Mangia Siciliano», and makes clear the difference between the shop in Capo d’Orlando and the online store that ships across Europe.

By the time a visitor reaches the catalogue, they know who they’re buying from.

The problem

No two wheels of provola weigh the same. Portions are cut to order. The price on the product page is per kilo, and the piece the customer will get doesn’t exist yet.

A normal pay-now checkout would charge the wrong amount. The shop has to take a request, cut and weigh, confirm the real price, and only then send a payment link. Or say no, if the piece isn’t available. Shipping may also wait until the customer says when the parcel should leave.

So the job was to make a process run by hand feel obvious to the customer, and to give the shop one clear action at every step.

Storefront

The shop looks like the homepage: same green, yellow accents, near-black surfaces. It runs in Italian, English and German.

The hardest screen is the product page. The customer picks a cut (250 g, 500 g, a whole piece), sees an honest estimate and adds it without committing to pay. The button says “Aggiungi alla lista” (add to list), not “Buy”, because this is a request.

The cart is called a shopping list. A notice that stays on screen explains that weights vary and every price is an estimate: the shop confirms the real amount before any money moves. Checkout has four steps: shopping list, order details, order sent, order ready. Then delivery or pickup.

Bottega dei Due Monti catalogue in a desktop browser
Catalogue on desktop
Provola fresca product page in a desktop browser
Provola fresca: portion, estimate, add to list

Why it works this way

Almost every decision comes back to one fact: the shop doesn’t know the weight until it cuts the piece. That shapes the customer’s path, the order states and the automations. The three diagrams below show how.

Customer workflow: choose cut, shopping list, send request, shop confirms, pay and ship
Customer path: estimate and request first, payment only after the real weight
Swimlane of customer, shop and email across request, confirmation, decision, payment and shipping
Shop operations: one set of order states shared by customer, shop and email
Automation workflows for product publishing, social content and newsletters
Automations: AI drafts and publishes, a person approves first

Purchase orders and email

Nothing is charged at checkout. The payment method is labelled “Pagamento alla conferma” (pay on confirmation), because that is what happens: the order arrives as a request the shop can confirm, refuse or hold.

From the order screen in the admin, the shop can:

  • send the confirmed order to the customer, with accept and reject links;
  • refuse a new request and let the customer know;
  • send a payment reminder once the customer has accepted;
  • resend any of these emails.

Every status change reaches the customer as a branded email, not a default WooCommerce notice. I built the email system from scratch, overriding the YITH quote templates with Bottega’s own: the first estimate, the confirmation with the real price next to the crossed-out estimate, the refusal, a payment reminder with a secure link, payment received, shipped, on hold when stock runs short, holiday closures and cancellation. Italian is written first; English and German follow.

Branded email confirming the request with an estimate
Request received: an estimate, not a charge
Branded email: order ready with accept, change or cancel
Order ready: accept, change or cancel
Branded email with Biagio’s photo: order on hold
On hold: Biagio explains, the order waits

The link in the order-ready email opens a signed page, on desktop or phone, where the customer accepts, refuses or asks for a change. No account needed.

Order page with confirmed weights and prices and three buttons: accept, refuse, change
Order ready on desktop
Order page on mobile with confirmed prices and crossed-out estimates
The same decision on a phone
Shopping list on desktop
Shopping list on desktop
Checkout: ship or pick up
Checkout: ship or pick up

On the phone

Most orders come from a phone. The flow is the same: pick a cut, see the estimate, add to the list, send the request. The small screen forced every element to justify itself.

Shop on mobile: categories first
Shop on mobile: categories first
Portion, 250 g, estimated price, add to list
Portion, 250 g, estimated price, add to list
Shopping list with the estimate notice
Shopping list with the estimate notice
Ship, or pick up at the shop
Ship, or pick up at the shop

Running the shop

Paying doesn’t mean the parcel leaves straight away. The customer gets an email with signed links, ship now or later, and the order waits for the answer. When the shop closes for a holiday, new requests get an automatic notice and checkout keeps working.

Packlink handles the couriers: door-to-door delivery, insurance, and a delivered status that matches how the shop tracks parcels.

Holds, pauses, holidays and late shipments all have a place in the system, so a small team never has to improvise around it.

Automations and AI

A Telegram bot is the control room. Commands go to n8n workflows, and the team never has to open the backend.

Products from a chat

Send a photo on Telegram and a product draft appears. Gemini suggests name, category, price and variants. One approval and it’s live in WooCommerce.

Content and social

A brief or a catalogue item becomes a post for several channels: AI copy, Gemini images, sometimes a Veo video. It’s reviewed on Telegram through the BD2M Automatron bot, staged in Notion, then scheduled to Facebook, Instagram, Pinterest, LinkedIn, Telegram and the blog. A separate poller follows Veo jobs until they become reels and posts.

Product images

Good food photography is expensive for a small producer. Here Gemini generates campaign and product images from catalogue briefs (product, category, mood), and I crop and refine them in Figma before they’re used. Visuals that used to need a shoot now come out of one pipeline, in the same palette and tone, at catalogue scale.

AI-generated campaign image for Bottega dei Due Monti
Campaign image, generated from a catalogue brief and refined in Figma
AI-generated brand story image for Bottega dei Due Monti
Brand story image from the same pipeline as social

Contacts and newsletters

WhatsApp and Messenger contacts go into one shared list for approved broadcasts. The weekly newsletter pulls from the catalogue, Gemini writes it in three languages, someone approves it on Telegram and in Notion, and MailPoet sends it in Italian, English and German.

Leads

Another pipeline finds B2B and restaurant or hotel contacts, scores them and drafts follow-ups. Nothing is sent until a person has checked it.

Outcome

The shop now takes orders online the way it always did at the counter: by hand, at honest prices. Customers know they won’t pay until the piece is cut. The shop has one clear action for each step: confirm, refuse, hold, ship, postpone.

Products, social, newsletters and leads run from Telegram through n8n, checked before anything goes out. One or two people can run online sales, marketing and customer contact without being buried in admin.

  • 5countries reached: IT, DE, SE, DK, FR
  • +80%order growth
  • ~88%fulfilment: 14 of 16 orders delivered (2 refused quotes excluded; 1 postponed, 1 cancelled)