Pinwheel.
All Articles
WhatsApp AutomationFlorist E-CommerceMedusa.jsCase StudyOrder Automation

How We Automated a London Florist's Order Process with WhatsApp

Manual order communication was consuming hours of the Blooms team's day. Here's the architecture we built to eliminate it — and what that looked like operationally for a high-volume florist.

PinwheelEngineering Team, Pinwheel Media Ltd
·1 June 2026·5 min read

When we started working with the Blooms group, their order processing looked like this:

  1. Customer places an order on the website
  2. Staff member checks the admin panel (usually on a shared laptop in the back of the shop)
  3. Staff member reads the order, writes down the key details
  4. Staff member sends a WhatsApp message to the fulfilment coordinator: "Order in — Epsom, tomorrow 2pm, double pink roses, ribbon message says Happy Birthday Sarah"
  5. Fulfilment coordinator acknowledges
  6. At end of day, staff member manually emails or calls the customer with a rough update

Multiply this by 40–60 orders a day across three storefronts during peak periods. That's a lot of human time spent on communication that doesn't need to be human at all.

The Problem in Detail

The Blooms group operates three storefronts: Blooms at London, Epsom Flowers, and On The Hill Flowers. Each storefront had its own admin panel on their previous WordPress + WooCommerce setup. The fulfilment team had to check three separate backends. Orders could sit unnoticed for 20–30 minutes before anyone picked them up.

The manual WhatsApp relay existed because it was faster than waiting for someone to check the admin panel. But it introduced its own problems:

  • Transcription errors. A gift message copied wrong, a delivery address abbreviated, a product name guessed rather than checked.
  • No audit trail. If there was a dispute about what was in an order message, there was no system of record beyond the WhatsApp thread.
  • Phone number dependency. The automation was a person. If that person was sick, on break, or serving a walk-in customer, the relay broke.
  • Customer communication lag. Order confirmations were generic WooCommerce emails. Customers had no visibility between order placed and delivery.

The Architecture We Built

When we rebuilt the Blooms operation on Medusa.js, we treated the WhatsApp relay as an engineering problem, not a staffing problem.

Medusa.js Subscriber Hooks

Medusa.js v2 has a clean event system. When specific things happen in the order lifecycle — order placed, payment confirmed, fulfilment assigned, order dispatched — you can register subscriber functions that fire automatically.

We registered subscribers for:

  • order.placed — fires when a customer completes checkout
  • order.fulfillment_created — fires when a staff member assigns the order to a fulfilment run
  • order.shipment_created — fires when the order is marked dispatched

Each subscriber receives the full order object: customer details, delivery address, product line items (including gift messages and recipient information), delivery slot, and any special instructions.

WhatsApp Business API Integration

We integrated the WhatsApp Business API (via an approved BSP) to send structured messages directly to the florist's business WhatsApp number — the same number the team was already using.

When an order is placed, the subscriber formats the order data into a clean WhatsApp message template and sends it automatically:

NEW ORDER — Epsom Flowers
Order #4821 | Today 3:15pm

→ Delivery: 14 March, Afternoon slot (1–5pm)
→ Zone: Local (KT19)

Products:
• Double Pink Roses, Large — x1
• Lilac ribbon wrap — x1

Gift message: "Happy Birthday Sarah, love always Mum"

Recipient: Sarah Johnson
Address: 42 Chestnut Avenue, Epsom, KT19 8EH
Tel: 07700 000000

Customer: Margaret Johnson (returning)
Order value: £68.00 | Paid via Stripe

The message is structured, complete, and requires zero manual input from any staff member. It arrives on the team's WhatsApp within seconds of the customer completing checkout.

Transactional Email Automation

Simultaneously, we replaced the generic WooCommerce confirmation emails with a branded transactional email sequence via Resend:

  • Order confirmed — fires immediately on payment. Includes order summary, recipient details, and estimated delivery slot.
  • Order being prepared — fires when fulfilment is assigned. "Your flowers are being arranged by our team."
  • Order dispatched — fires when the order is marked shipped. Includes any tracking information.

These fire automatically from Medusa.js subscriber hooks. The customer stays informed at every stage without any staff member triggering an email manually.

What Changed Operationally

The numbers aren't scientific — this is a real business, not a controlled experiment — but the operational change was significant enough that the Blooms team reported it immediately after go-live.

Before:

  • Staff checking three separate admin panels
  • Manual WhatsApp relay for every order
  • Occasional transcription errors and missed messages
  • End-of-day customer communication only
  • About 45–60 minutes of daily manual order communication overhead for the team

After:

  • One unified admin portal showing all orders across all three storefronts
  • Automatic WhatsApp notification to the fulfilment coordinator within seconds of checkout
  • Full order details in the message — no transcription, no abbreviation
  • Customers receive structured transactional emails at each order stage
  • Zero manual order communication needed for standard orders

The manual relay still exists as a backup for edge cases — an order with an unusual delivery requirement that needs a conversation, a customer who calls in to modify an order. But it's the exception, not the default.

What the Build Took

For context, the WhatsApp automation was one component of a larger rebuild. The full scope included:

  • Three Next.js storefronts (one per brand)
  • A single Medusa.js v2 backend with shared inventory
  • Custom multi-postcode delivery routing
  • Multi-recipient checkout (one order → multiple delivery addresses)
  • Unified staff portal for all three storefronts
  • Stripe integration with Apple Pay / Google Pay
  • Resend transactional email flows
  • WhatsApp Business API integration via subscriber hooks
  • Full data migration from three WordPress + WooCommerce installs

The WhatsApp integration itself took roughly a day of engineering work once the subscriber architecture was in place. The harder part was getting the message format right for the team — the first version had too much information, the second had too little, the third landed well.

Why This Matters Beyond Florists

The pattern here — Medusa.js event hooks triggering third-party communications — applies to any business with operational communication overhead tied to order events. We've applied similar architecture to:

  • Booking confirmation flows for service businesses
  • Internal Slack notifications for B2B order management
  • Automated SMS reminders for appointment-based businesses

The underlying principle is the same: manual communication that follows a predictable trigger (a customer did something) should be automated. Human attention is expensive. Use it on the things that can't be automated.


If your current florist platform doesn't let you automate operational communication — or if you're still running a manual relay of some kind — see how a Medusa.js build could change that.

About the author

Pinwheel

Engineering Team, Pinwheel Media Ltd

Pinwheel is a UK web design and engineering agency specialising in headless e-commerce, bespoke website builds, and business automation systems. Based in Surrey, we've delivered 100+ projects for UK businesses since 2015 — from local service websites to complex multi-tenant commerce platforms.

● Ready to Build?

Let's Build SomethingRemarkable.

Whether it's a headless commerce platform, a bespoke automation system, or a high-performance web presence — we'd love to hear about it.