Launch offer: 50% off your first 6 months, first 10 plants, closes 31 Dec 2026.

Catering and foodservice

A guest asks if it is safe.
The answer should not depend on who is working.

Tray plans the event, scales the food to the guests who are coming, prints the allergen sheet your kitchen hands over before service, buys the week’s ingredients, gets it out the door with temperature records, and tells you afterwards whether it made money.

All of it is built and running, and it is switched on per account rather than forced on everyone. The quickest way to judge it is the caterer’s tour, which runs on sample data in three languages.

The tour runs in English, French and Greek No login, no form Runs on sample data you can poke at

Shipping today

Six things the kitchen runs on.

The manufacturing spine underneath the catering module. It is the part of catering that goes wrong expensively.

Receiving starts with a scan

Every delivery is scanned in and becomes a lot stamped with its supplier, dates and condition. Not a sticky note on the walk-in door.

The allergen answer comes from the recipe

Declarations roll up through sub-recipes, so Tuesday’s sauce carries its allergens into Saturday’s dish. The answer names the ingredient it came from. Fifteen types, at SKU and lot level.

Sub-recipes carry their own lot

A filling built on Tuesday from several lots becomes a lot in its own right, so there is no gap between raw ingredient and finished tray for a recall to slip through.

True cost per portion

A plate costed from what actually went into it, through every sub-recipe and yield, at the supplier prices you pay today. You know the margin on 60 covers before the quote goes out.

Pieces, trays and fractions of a pack

Buy the case, cook in pieces. A dish needing 2 pieces from a 6-pack draws 0.333 of a pack, costed at that fraction. Unit costs run to four decimals, because a canapé costs a fraction of a cent.

One click, every function affected

A supplier reports a problem. One trace runs forward through every sub-recipe and production run it touched, to every function it was served at.

All six are in the caterer’s tour, running on sample data, in three languages. There is also a public lot trace with no login and no JavaScript, if you would rather read the output than click through a demo.

Plan and cook

The event, scaled to the guests who are actually coming.

Guest count, service date, venue, service window and the final-count deadline sit at the top of the order. Everything downstream reads from them.

Scale to the guest count

Pick the function and the batch scales to the guests using each recipe’s portion size. A panel compares every ingredient against usable stock and flags the shortfalls.

It warns before it duplicates

If a dish already has a production run for that function, Tray says so rather than quietly making a second one.

Event allergen sheet

One printable page per function: every dish, its allergens rolled up through sub-recipes, and a separate “may contain” line for cross-contact. Names print in the reader’s language.

Special meals, per event

Nut allergy × 2, vegan × 6 with a replacement dish, kids × 12. For each group the sheet shows which dishes they must not get, and how many plates are unsafe.

Vegan and vegetarian are checked

Ingredients are tagged once; each dish works out its own diet from its recipe and sub-recipes. Dishes carry VG and V badges.

“What’s going out”

Every function on a day with timing, venue, guests and production status, plus a “short today” box measured against usable stock. Lots on hold do not count.

No guest names are stored. A special meal is a label and a count — “vegan × 6” — never a person. Your guest list stays wherever you keep it.

Win the event

A proposal that cannot be mistaken for an invoice.

A catering order can start life as a client proposal and only becomes a job when the client accepts it.

Price per guest, and the extras

Service staff, rentals and delivery as their own lines, with taxes, a deposit and a validity date.

It prints in the client’s language

The menu without per-dish prices, the special meals, the total, the deposit, the balance and the final-count deadline. It always says it is a proposal, not an invoice.

Nothing moves until they accept

Before acceptance it holds no stock, starts no production, and is not counted as demand.

Deposits are tracked

Due, overdue, received. The deposit follows the total until someone sets it by hand, and dates are checked against the event.

Guest-count changes are recorded

After the deadline a change needs a reason, and the kitchen sees it: production was scaled for 180, the function now has 195.

What it still is not

There is no event calendar and no CRM. You book the function wherever you book it today.

Tray does not issue your catering invoices and does not file with any tax authority. It produces proposals and tracks deposits; your accountant invoices. Accounting stays an export, never a sync.

Buy for the week

One week, every event, one order per supplier.

Pick a week and Tray adds up every ingredient the confirmed events need, through recipes and sub-recipes, including the replacement dishes for special meals.

It subtracts what you already have

Usable stock, orders already placed and production already started come off before anything is ordered.

Rounded to the supplier’s case

Each line rounds up to the case size of the supplier you chose, not to a number that cannot be bought.

Every number traces back

Each quantity points at the event and the dish that asked for it.

A person reviews before anything is sent

One click drafts one purchase order per supplier. Nothing leaves until someone confirms it.

Blocked, never left out

Anything Tray cannot compute appears blocked with the reason attached, rather than silently dropping off the list.

Dispatch

Vehicle, driver, departure time, and an equipment list with quantities out and back. Kit that has not come back is flagged after the event.

Deliver and prove it

Food-safety evidence from the kitchen to the guest.

Temperature records at loading, arrival and service, against limits set per account.

Limits you set

Defaults are 63 °C hot and 4 °C cold, changed per account.

A failure needs a corrective action

A reading outside the limit cannot simply be left there.

Records cannot be edited or deleted

Enforced in the database, not just the screen. An order that carries temperature readings cannot be deleted either.

Who took it, and when

Every reading carries its reader and its timestamp.

A failure can become an NCR

One step, and a person confirms it.

Run sheet

One page per event in departure order: what to load, the special meals with their diet, the kit, where to go, and the temperature table.

Tray produces the records a HACCP plan asks for. It is not itself certified, and using it does not make your operation certified.

Know whether it made money

Revenue, planned cost, actual cost, waste, margin.

Per event and over any date range, exportable to CSV, visible only to people allowed to see costs.

Revenue, including per guest

What the event brought in, and what that is per head.

Planned against actual

Planned cost from recipe costs including service lines, against the actual cost of what production really used, lot by lot.

Waste

What was made and not sold, counted rather than estimated.

It says when it cannot tell you

If a cost is unknown or the event is not fully produced, Tray says so instead of showing a margin that reads as fact.

Planned labour, not tracked labour

Labour comes from the recipes. Tray does not track the hours your staff actually worked, and we are not going to imply that it does.

CSV out

Any date range, exported for whoever does your books.

The habit underneath all of it

When Tray does not know, it says so.

This is the rule the whole system is built on, and it is the one that matters most in a kitchen feeding people with allergies.

  • One untagged ingredient makes a dish “unknown — check”, naming the ingredient. It never becomes “vegan” by default.
  • A blank allergen cell is treated as worse than an ugly one. Every dish row shows its allergens or an explicit “no declared allergens”.
  • A recipe with one unpriceable line reports no cost at all, not a partial total that looks complete.
  • A unit it cannot convert is refused with the reason, never estimated into place.

Tray suggests scaled batches, purchase orders and nonconformance reports. A person confirms each one. Nothing is sent, ordered or opened automatically.

Where Tray stops

What it does not do, before you spend an hour finding out.

Not built yet

What is still missing.

The three screens this page used to list as unbuilt now exist. Keeping the list honest means replacing them rather than deleting the section.

A prep timeline, and who is on it

Which dish starts when, and which member of staff is on it. Tray plans the food. It does not plan the shift.

Sending the proposal from Tray

Tray prints the proposal. Emailing it to the client is still your mail program’s job.

Plate labels for special meals

The sheet tells the kitchen who must not get what. It does not yet print the label that travels with the plate.

No delivery dates, because we do not have any. There is also still no event calendar and no CRM, and we are not trying to build one.

Run it against your own functions

These screens are built, so there is nothing left to imagine. What is worth doing now is putting your own functions through them — your menus, your guest counts, your special meals — and finding out where they hold and where they do not.

What we ask

  • Real functions, run through it properly
  • Someone who runs service, close at hand
  • To hear it when something is wrong

What you get

  • The module live on your own data, not a mock-up
  • Fixes aimed at your service first
  • Terms agreed in writing before anything starts
Start that conversation