A Saturday cannot be restocked

A florist can make forty arrangements on a Saturday whatever is in the cold store. A bakery can decorate twenty celebration cakes and two hundred cupcakes in a day, and those are two different numbers that both have to hold. What sells out is the day, not the product, and a day cannot be back-ordered, replenished or discounted the following week. Most shop software has no way to say that.
  • WooCommerce builds from £4,500
  • Capacity per date, not stock per product
  • One florist, one drinks shop, one tour system
  • Sunday is not a courier day

What I have actually done in this sector

Three builds, and only one of them is the interesting one. A seasonal florist shop on WooCommerce, where the product photography does the selling and the range moves with what the grower has. A drinks retailer on WooCommerce with the checkout stripped back to essentials, because someone buying a gift is usually a one-off visitor who is not the recipient, and every field between them and paying costs you an order. And a wine tourism operator selling four incompatible things through one basket, which is where the dated capacity work actually happened.

That third build is the proof for this page. It sold places on dated tours: a fixed number of seats on a specific departure, nothing to post, selling out on its own rather than overbooking a minibus, alongside cases of wine shipping in weight bands and a gift voucher that must never be charged delivery. I was the developer on all three during four years at a web studio in East Sussex, so they predate Kestrel. I have not built a bakery site, and the florist build was a shop rather than a dated-delivery system. I would rather say that than let the two blur together.

What is actually hard about a date

None of it is the date picker. The picker is a form control and takes an afternoon. The work is the arithmetic underneath, and the point of the arithmetic is a shop that refuses an order it cannot fulfil instead of taking the money and apologising in March. I have form on refusing things: the WordPress plugin I built scores a service-area page against thin-content rules and will not publish it below a threshold.

01

Capacity per date, not stock per product

A florist can make forty arrangements on a Saturday whatever is in the cold store, because the constraint is a bench and a pair of hands. Stock levels are the wrong model entirely. The thing that runs out is the day.

02

Capacity in more than one dimension

A day is not one number. It is a limit per product class, per slot inside the day and per site, and those interact. A Saturday can be full for decorated cakes and wide open for cupcakes, and both have to be true in the same calendar at the same moment.

03

Lead time per product, not per order

The examples the plugin vendors use themselves are a day for a hand-tied bouquet and three or four for a large decorated cake. Put both in one basket and the earliest honest date is the later of the two. It is that intersection that naive implementations get wrong.

04

Cut-offs, in local time, all year

A two o’clock cut-off is per delivery method, sometimes per product, and it shifts twice a year when the clocks change. The boundary case is an order placed at 13:59 against one placed at 14:01, and exactly one of those is a promise you keep.

05

Working days, not days

Most carriers do not collect at the weekend and none of them work a bank holiday, so a Friday dispatch for a Monday delivery is seventy-two hours in transit. Transit has to be counted in the courier’s calendar rather than the customer’s.

06

The last place on the busiest day

Two baskets read one place remaining, both pass the check, both write, and you have sold a day you cannot expand. The fix is to put the condition inside the write instead of before it. It cannot be reproduced by clicking around a staging site, which is why it ships broken and only fails on the day with enough traffic to expose it.

What breaks in February and March

How much of a florist’s year sits on those two days is not a figure I can give you. IBISWorld counted 7,895 florist businesses in the UK on roughly £1.1bn of revenue in September 2025, and that is the only market number here I would repeat. The share of a year concentrated into Valentine’s Day and Mothering Sunday is quoted all over retail blogs without a primary source behind it, so it is not on this page. The shape is not in dispute even where the number is.

The site that works all year

Eleven quiet months prove nothing about the two that matter. Peak is not more of the same traffic, it is a different shape: concentrated into a single afternoon, impatient, and buying for someone else. The same code path that is fine at four orders an hour is where the arithmetic gives out at four hundred.

Guaranteed, with an exception further down

One national gifting brand publicly apologised after customers who had ordered flowers guaranteed for Mother’s Day received nothing at all. The pattern that produces those complaints is a headline promise and a clause in the terms excluding major holidays. That is a copy decision rather than a technical one, and it is the one I will argue with you about.

Selling out by going dark

The honest small-shop response to a full order book is to switch the form off and stop answering the phone. It works, and from the outside it is indistinguishable from being closed. A capacity model lets you keep selling the dates you can still serve while the full ones disable themselves.

A tour place and a Mother’s Day bouquet are the same object

This is the part I can prove. A place on a dated vineyard tour and a bouquet for the fourteenth of February are the same thing in software. Both are a fixed quantity attached to a specific date. Both are consumed by orders rather than depleted from a shelf. Neither can be back-ordered, restocked or sold late, and both expire unsold at midnight. Both have a cut-off, a blackout calendar and a race for the last one. Change the noun and it is the same code.

So the claim is narrow and it is real: I have built the capacity model, the atomic reservation, the cut-off and lead-time arithmetic and the working-day calendar, for tours rather than for cakes. The vineyard and winery page describes that build properly, including the awkward part where a dated tour place, a case shipping by weight, a recurring subscription and a voucher with nothing to post all have to share one checkout. A shop selling next-day hampers, a dated birthday cake and a subscription box has that problem with different nouns.

The courier’s calendar is not your calendar

Mothering Sunday is always a Sunday. It is the fourth Sunday in Lent, so the date moves every year, and in 2027 it falls on 7 March. Valentine’s Day is fixed on the fourteenth, and in 2027 that is a Sunday as well. Most carriers do not collect on a Sunday and most do not deliver on one, so arriving on the day usually means a Saturday delivery with a card that implies otherwise, or a van the shop drives itself inside a radius it can genuinely cover.

That is three dates rather than one: the occasion, the delivery and the dispatch. Orders concentrate on one day, the parcel lands on another, and it leaves the shop on a third. Each has its own capacity and its own cut-off, and they interact. A picker that collects a single date and emails it to you models none of that. The gap between the date printed on the product page and the date the parcel actually moves is where the promise breaks, and it breaks in public on the one day the recipient is counting.

Chilled, which turns out to be a calendar problem

Royal Mail’s own limits

Royal Mail requires food sent through its network to withstand a journey of up to forty-eight hours, and prohibits dry ice and frozen water as coolants. Those are the rules the packaging has to be designed against, whatever the service label on the box says.

Pack for the delay, not the service

The advice I have read from packaging and courier suppliers is to pack for forty-eight hours even on a twenty-four hour service, because delay is normal rather than exceptional. That is supplier advice rather than a published standard, so weigh it accordingly, but it matches what happens to parcels.

Grey out Sunday and Monday

If nothing is collected at the weekend, a Friday dispatch sits in transit until Monday afternoon: seventy-two hours inside packaging engineered for twenty-four. The fix is not better insulation, it is a calendar rule that makes the order impossible to place. A food safety problem solved in the date picker.

On the delivery-date plugins

There are mature plugins for this on both WooCommerce and Shopify, some with four-figure review counts, at tens of pounds a month. Their own documentation covers per-day capacity, per-product-per-day caps, per-slot limits, preparation time and blackout dates, and the marketing examples they use are bakeries and florists. If you sell one class of product, from one site, on one courier, one of them is very likely the right answer and considerably cheaper than hiring me. I will set one up on a care plan and tell you plainly that it was the right call.

The argument changes where the rules start interacting: capacity per product class per site, cut-offs that differ by delivery method, postcode-level transit times, and a basket mixing a locally delivered item with a posted one. Shopify’s own documentation sets out that local delivery is unavailable with several express wallets including Apple Pay and Google Pay, that it is capped by distance, and that a customer cannot combine shipped and locally delivered items in a single order. Platform limits change, so check those rather than taking my word for it. The WordPress and Shopify comparison goes into where each one puts up a fight. Deciding when an app has stopped being enough is a judgement, and I would rather make it honestly in a first conversation than sell you a build you do not need.

Two things I will not do, and one I cannot prove

Each of these is something another developer would probably promise you. Taking them off the table now is cheaper than discovering them in week four, and the last one is the honest weak point in everything above.

I will not replace a relay network

If orders reach you through a national florist relay network, that is a membership and an order-routing system with its own commercial terms, and I am not rebuilding it. Nor would I advise leaving it because a developer finds it awkward. Your own shop sits alongside it and takes the orders you would rather not pay a commission on.

I will not rebuild a courier

I integrate with what a carrier publishes and with the dispatch tooling you already use for labels and manifests. I will not promise live slot availability from a carrier that does not expose any, and I will not write my own version of a delivery network. Where a carrier gives me a service calendar I use it. Where it does not, the calendar is rules you and I agree and then maintain.

I cannot prove this before you buy it

Correctness under load is invisible until the day it is not. You cannot tell a careful build from a thirty-pound plugin until one of them oversells the fourteenth of February, and by then you have survived it once and blamed the courier. I can show you the mechanism and explain how it is tested under concurrent load. I cannot show you the disaster that did not happen.

What to read next

The shop itself is a WooCommerce build, and the mechanism this page rests on is described in more detail on the vineyard and winery page. If the platform decision comes first, read WordPress against Shopify. Every figure is on pricing, the plugin that refuses to publish is on the work page, and the other sectors I have built for are listed together.

Questions people actually ask

Can a website refuse an order it cannot deliver?

That is the whole job, and it is the opposite of what most date pickers do. Capacity is held against the date rather than against the product, the date disables itself when it fills, and the remaining places are checked at the point of payment rather than when something drops into the basket. A shop that takes money for a Saturday it cannot serve has not saved you a sale. It has bought you a refund and a complaint.

Why not just buy a delivery date plugin?

Often you should, and I would rather say so than pretend this is unsolved. The mature ones on WooCommerce and Shopify cost tens of pounds a month, some have four-figure review counts, and their own documentation already covers per-day capacity, per-product preparation time, blackout dates and cut-offs. If you sell one class of product from one site on one courier, buy one, and I will set it up on a care plan. The argument only changes where the rules interact: capacity per product class per site, cut-offs that differ by delivery method, postcode-level transit times, and a basket mixing a posted item with a locally delivered one.

What breaks on Mother's Day, and can flowers even arrive on the day?

Mothering Sunday is always a Sunday, because it is the fourth Sunday in Lent. In 2027 it falls on 7 March. Most carriers neither collect nor deliver on a Sunday, so arriving on the day usually means a Saturday delivery, or a van you drive yourself inside a radius you can genuinely cover. That leaves three dates to model rather than one: the occasion, the delivery and the dispatch. What breaks is the gap between them, and the copy that promises guaranteed delivery in the headline while the terms exclude major holidays.

How does capacity work if I have two shops and three product types?

As a limit per product class, per slot inside the day, per site, all of which have to be true at the same moment. A Saturday can be full for decorated cakes and wide open for cupcakes. The other half of it is lead time per product rather than per order: put a same-day bouquet and a four-day cake in one basket and the earliest honest date is the later of the two. That intersection is the part naive implementations get wrong.

Can you handle chilled and perishable shipping?

I build the calendar rules that keep the parcel out of a three-day weekend. Royal Mail requires food sent through its network to withstand a journey of up to forty-eight hours and prohibits dry ice and frozen water as coolants, and if nothing is collected at the weekend then a Friday dispatch is in transit until Monday afternoon. The fix is greying out Sunday and Monday so the order cannot be placed at all. Packaging, gel packs and the choice of carrier are yours or a specialist's, not mine.

Will you integrate with a florist relay network or a courier's API?

Not by rebuilding either. A national relay network is a membership and an order-routing system with its own commercial terms, and your own shop sits alongside it rather than replacing it. On couriers I integrate with what a carrier publishes and with the dispatch tools you already use for labels and manifests. Where a carrier exposes a service calendar I will use it. Where it does not, the calendar is rules you and I agree and then maintain, and I will not promise live slot availability that does not exist.

How many of these have you built?

Three builds, and only one of them is the dated part. A seasonal florist shop on WooCommerce where the product photography does the selling, a drinks retailer on WooCommerce with the checkout stripped back to essentials, and a wine tourism operator selling dated tour places, cases shipping by weight, a subscription and a gift voucher through one basket. That third one is where the capacity model, the atomic reservation and the working-day arithmetic came from. I have not built a bakery site and I am not going to imply otherwise.

What does it cost?

A WooCommerce shop starts at £4,500. Dated capacity with per-product lead times, per-site limits and a working-day calendar is custom development rather than configuration, so it moves toward the web app range, £7,500 and up, starting with paid discovery at £950 so the figure is real before you commit. If an off-the-shelf plugin will genuinely do the job, the honest answer is a care plan at £65 a month and a morning of my time.

Tell me what has to arrive, and on which day.

Get a quote in four questions
hello@madebykestrel.co.uk · replies inside one working day

This page, measured in your browser

Your device
LCPMeasuring…
How long until the main content appears. Google wants under 2.5 seconds.
INPMeasuring…
How quickly the page answers when you tap. Under 200ms is the target.
CLSMeasuring…
How much the layout moves while loading. Under 0.1, ideally zero.

Real numbers from your device and connection, not a screenshot of a score I chose. Nothing is sent anywhere. The measurement happens in your browser and stays there. If one of these ever reads amber on my own site, you will see it, which is rather the point. I audit these for £650.