These two businesses look similar and message completely differently. Catering is a long, detailed thread with one client and a date months away. A food truck is a short, frequent broadcast to people who want lunch. Running one like the other fails in both directions.
Catering: the thread is the contract's working memory
Between booking and the event, headcounts change, dietary requirements arrive in ones and twos, and someone's mother decides she cannot eat shellfish. Keeping all of that in one thread — rather than across email, phone calls and a note on a whiteboard — is most of the operational value.
export const catering = { deposit: (c: Ctx) => `${c.company}: ${c.eventDate} is pencilled in. The ${c.depositAmount} ` + `deposit holds it: ${c.link}. Menu tasting whenever suits you.`, // Final numbers are the deadline that actually matters. finalNumbers: (c: Ctx) => `${c.company}: we need final numbers by ${c.deadline} — currently ` + `${c.currentCount}. After that we can go up a little but not down, ` + `because the food's ordered.`, dietary: (c: Ctx) => `${c.company}: got ${c.dietaryList} so far. Anything else, send it ` + `here any time before ${c.deadline} and I'll add it to the sheet.`, dayBefore: (c: Ctx) => `${c.company}: we'll arrive ${c.arrivalTime} to set up. ` + `Need access to ${c.requirements}. Who should we find on the day?`,};'Up a little but not down' has to be said before the deadline
Late headcount reductions are where caterers lose money and where the client feels hard done by. One clause, sent before the deadline rather than invoked after it, prevents nearly every version of that argument.
Food trucks: location is the entire message
A food truck's customers have one question, and it is not about the menu. Tell them where you are, early enough to plan lunch around it.
export const truck = { // Send by mid-morning. At noon it is too late to be useful. today: (c: Ctx) => `${c.truck} is at ${c.location} today, ${c.hours}. ` + `${c.special ? `Today's special: ${c.special}. ` : ""}` + `Map: ${c.mapLink}`, soldOut: (c: Ctx) => `${c.truck}: sold out of ${c.item} — sorry. ` + `Still have ${c.remaining} until ${c.closeTime}.`, cancelled: (c: Ctx) => `${c.truck}: not trading today, the weather's beaten us. ` + `Back at ${c.nextLocation} on ${c.nextDay}.`,};Location sharing beats an address
A native location attachment drops someone straight into their maps app, which matters when you are parked in a corner of an industrial estate with no useful street number. It is one of the few places rich messaging shortens a real task rather than decorating it.
Frequency, for the truck
Daily location messages are the one case where high frequency is welcome, because the information genuinely changes daily and the customer opted in for exactly this. The moment you add a promotion to it, that goodwill goes — keep the daily message purely informational and put offers somewhere else.
Next step
Browse the other industry playbooks, compare the services that can send this on the providers page, or tag your links with the UTM builder.