E-commerce development for restaurants and takeaway
Online food ordering behaves like nothing else in e-commerce: a dish sells by service, drops off the menu when an ingredient runs out, returns the next day, and has to end up printed in the kitchen. This is the kind of work I take on in this sector.
A menu is not a catalogue
In a standard shop a product either exists or it doesn’t, and its stock counts down to zero. On a menu, availability is a function of the service slot: the dish of the day only exists at lunch, the evening set menu opens at a fixed hour, and a missing ingredient pulls a dish mid-service before it reappears tomorrow. Modelling that as a stock quantity produces wrong states and orders the kitchen cannot fulfil.
Options make the confusion worse. Cooking level, side, sauce, extras: these are constrained choice groups — one compulsory choice here, three at most there — and each can change the displayed price. Treated as CMS variants, they cause a combinatorial explosion of references by the second menu category. What you need is an option model attached to the dish, with its own minimum and maximum rules, not a separate product per combination.
What breaks with a generic ordering module
- Availability is stored as a quantity, when it actually depends on the service and the day of the week.
- The checkout accepts a slot that is already full and only rejects it after payment, once the kitchen sees the order.
- Preparation time is fixed, when it varies with the contents of the basket.
- The delivery area is entered as a list of towns, when it is really a shape drawn around the outlet.
- Delivery charges are assigned to a single VAT rate, which skews the bill as soon as a bottle joins the basket.
- Allergen information sits in a footnote instead of being data attached to each dish.
- Orders arrive by email: nobody sees them during a busy service.
Three rates on one bill, and allergen data per dish
A single bill routinely mixes food for immediate consumption, items meant to be eaten later, and alcoholic drinks, which do not share the same rate. None of the three CMS platforms I work with splits delivery charges across those rates on its own: by default the shipping line carries one rate and the document handed to the customer becomes inaccurate. So you need a split in proportion to what is actually in the basket, applied when the total is computed, and a document template that shows the breakdown rate by rate.
Allergens follow a similar logic. The information is mandatory, it belongs to each dish, and it changes whenever a recipe or a supplier changes. Written into the description, it cannot be found and cannot be corrected in bulk. Structured as a dish attribute with a closed list of values, it can be filtered, shown at the point of choice, and updated in one place.
How I work on an online ordering project
-
Start from the real menu
I work from what already exists, printed menu or till software: dishes, option groups, availability rules per service. That document drives the data model, not the other way round.
-
Build the slot engine
Maximum capacity per time band, closing days, preparation time computed from the basket, delivery area drawn on a map rather than listed. The slot is held before payment and released if payment fails.
-
Make the kitchen hand-off reliable
Automatic printing or a production screen, an acknowledgement of receipt, and a queue that replays tickets after a printer outage. A paid order that never reaches the kitchen is lost twice.
-
Name the master record for the menu
The same dish lives on the site, on the till and on the delivery platforms, each with its own item reference and identifiers. I pick one master source and build the syncs around it, rather than letting three manual entries drift apart.
Related work
-
QR code table ordering
The in-room journey, where a table number replaces the address and the order goes straight to production.
-
Delivery menu synchronisation
Keeping one menu when each platform imposes its own format and item identifiers.
-
Bridge to a hosted till system
Pushing web orders down into the point-of-sale system without double entry.
-
Payment and till integration
Reconciling the online payment flow with the counter terminal.
Frequently asked questions
Can dish options be handled with CMS variants?
How do you stop a full slot being sold?
Does the site need syncing with the delivery platforms?
How are allergens handled on a dish page?
What if the kitchen printer fails during service?
Describe your need in one minute
A few targeted questions so I can reply with an estimate rather than another questionnaire.