Build notes · Monday 24 August 2026

Sign-up, rebuilt

A UK catering marketplace. Someone posts one brief about their event; we match the caterers who can actually do it, and open a conversation. Today was about the bit you would hit first — listing your business — a matching fault that turned out to be worse than I thought, a broken Sign Out button that only a real person clicking it would ever have found, and your two notes from this evening.

Sitethe live build
StatusAll of today is live
PaymentsStill simulated
Commission10%

The idea

Two rules that make it different from the sites you already pay for

Talking is free, permanently

On Add to Event a caterer buys credits to unlock a lead before they are allowed to reply. Here, when a brief matches you, a message thread simply opens. Neither side is ever charged to use it — no credits, no subscription, no lead fees. You read the brief, you reply, you quote, all free.

The customer's money is held, not just promised

When a customer accepts your quote they pay FeastMatch, not you. It sits in our account until you and they both confirm the event went ahead — then it is transferred to you, less 10%. If it is cancelled, they are refunded and we take nothing. If either side raises a dispute, nothing moves until a person looks at it.

The bit that separates it from a directory is the matching: cuisine, guest numbers, budget, how far you will travel, dietary work you can handle, service style, and which services you actually offer. You should not be reading briefs for a 300-person wedding in Cornwall if you do 40-cover street food around Bristol.

What changed today

Seven things, and why each one was wrong before

1

The password box was throwing your work away

Fixed

It demanded ten characters but never said so until after you pressed the button — and then it wiped the form and made you start again. Now it tells you the rule before you type, checks it as you go, and nothing you have entered is ever cleared when something is wrong.

The rule itself is easier: six characters with one symbol in it, so bbq2go! is fine. While fixing it I found the brief form did something worse — a bad password there threw away the entire enquiry, three pages of event details, and showed a blank error page. That is gone too.

2

One sign-up form instead of two

Live

There were two ways to list a business: a short one and an eighteen-question one that asked for your travel radius, guest range, minimum spend, maximum budget and a full description before you even had an account. Every button on the site pointed at the long one.

The long form is gone. What is left is six questions and a password. Everything else you fill in afterwards, on your own listing page, when it suits you. The old web address still works — it just takes you to the short form now.

3

Your postcode, not your town

Live

You used to type your town into a box. Now you give a postcode and we work the town out from it.

The reason is not tidiness. The travel radius never actually worked. The old system knew the location of twenty towns by name and nothing else — so a caterer in Bridgwater, Salisbury, Yeovil or Plymouth could not be placed at all, and was sent briefs regardless of distance. Real coordinates now, real distances.

4

Briefs outside your radius no longer reach you

Big one

This is the one I would push back on if I were you, so here it is plainly. Before today, being too far away only lowered your score — it did not rule you out. A caterer in Plymouth with a thirty-mile limit still scored 75 out of 100 for a job in Bristol, because the food, the guest numbers and the budget all matched and the distance was only worth twenty points.

Now, if a job is outside the radius you set, you do not see it at all. It is your own stated limit, so you have already said no. Which makes the number you put in that box matter — set it honestly, and revisit it if you would travel further for the right job.

5

“What you cook” is a proper list now

Your eye needed

It used to be an empty box you typed into. Forty-four listings had written it thirty-five different ways — “BBQ”, “BBQ and hog roast”, “Barbecue, smoked meats, hog roast” — which is impossible to match on reliably.

It is now 36 options in nine groups, tick as many as apply. Building it against the caterers already listed showed four of them had no home in the list at all, so Korean, Vietnamese and Taiwanese & Bao were added, along with Bar & Cocktails, Afternoon Tea and Canapés & Fine Dining. This is the list I most want you to pull apart.

6

What you cook and how you serve it are now two questions

Live

You asked about the service list last time. It stays — but it is doing a different job from the new one. Services are the format (food van, hog roast, mobile bar, waiting staff). Cuisines are the food (Korean, pizza, seafood).

They were tangled together before, which is why the categories read oddly. A food van can be Korean or it can be burgers; those are two facts about you, and a customer might want either or both. Both are matched separately now.

7

Guest numbers and minimum spend moved later

Live

They are no longer asked at sign-up — they are on your listing page instead. They still count for matching, and they still stop you being sent a 300-cover wedding when you do 40-cover street food, so it is worth setting them properly once you are in.

Until you do, a new listing is set deliberately wide (10 to 500 guests, no minimum) so you are matched to too much rather than to nothing.

9

The cuisine list is a drop-down now

Your request

Thirty-six tick boxes down the page was a lot to scroll past, particularly on a phone. It is now a single box that says Select what you cook, opens when you tap it, and has a filter you can type into — type “kor” and you get Korean. Pick as many as you like; it closes when you tap away, not after every choice.

Two things kept deliberately: your picks are still stored as proper categories against your listing, so the matching reads them directly rather than guessing from a sentence — and if your phone blocks scripts, the box simply stays open as the plain list it was. Nothing about your listing depends on the fancy version working.

The same control is on your listing page for what you cook and how you serve it.

10

It no longer calls itself a South West service

Your request

Ten places said “Bristol, Bath and the South West” — the front page, the footer, the about page, the page titles Google reads, and the structured data that tells search engines where we operate. All of it now says the UK.

Worth saying plainly: the copy was the easy half. The postcode work means it genuinely handles anywhere — a Leeds postcode was tested and placed correctly. But the caterers currently listed are still invented ones in South West towns, so the browse page still looks regional until real businesses from elsewhere sign up. Brand West's own address stays Bristol, because that is where it actually is.

8

Sign Out was broken on the front page

Fixed

Reported after the rest of today's work went live, and worth writing down because of how it hid. Pressing Sign Out on the front page gave an error — “this form expired” — and left you logged in. On every other page it worked perfectly. It had been like that since the site was rebuilt; it was not something that broke today.

Sign Out is a button that has to prove the click came from our own page, and the front page was the one page not handing it the proof. Fixed, and while checking it I found signing out did not tell you it had worked either — the header just quietly changed. It now says “Signed out.”

The uncomfortable part: 113 automated checks were passing. They signed out by talking to the server directly instead of pressing the button, so they tested the wrong thing. The checks now press the button, and separately confirm that all 84 pages you can be signed in on carry a working one.

Your listing

What happens to a photo you upload

Phone photographs carry hidden data, including the GPS coordinates of where they were taken. If you photograph a hog roast in your own garden and upload it, the file quietly contains your home address. That data is stripped off on our server before anything is stored — not in the browser, where it would depend on JavaScript being switched on.

The rest of it: the file type is worked out by reading the actual bytes rather than trusting the file name; illustrations in SVG format are refused outright because they can carry hidden code; images are served from our own address rather than a public storage bucket, so they are locked to the site; and a picture with absurd dimensions is rejected before it can be opened. Nobody can delete or promote another caterer's photo, and the admin screen has a takedown button that removes both the listing entry and the file itself.

Fixed alongside it: link previews were broken everywhere. When you pasted a page into WhatsApp, the site was answering the preview request with “not found”. Nobody would have spotted why.

The money

Where a payment sits at every stage

Booking states, in order
WhenThe booking saysWhere the money is
Customer accepts your quoteawaiting paymentNowhere yet. Nothing has been charged.
Customer paysfunds heldIn the FeastMatch account, tagged to your booking.
You confirm it went aheadfunds heldStill held. One confirmation is not enough.
They confirm toocompletedCleared to send.
ReleasedreleasedTransferred to your bank, less 10%.
Cancelled after paymentrefundedBack to the customer. We take nothing.
Either side disputesdisputedFrozen. Nothing moves automatically at all.

Two easier approaches were rejected because neither is really holding the money. Paying you straight through at the moment the card is charged is not escrow — the customer has no protection. Authorising the card and capturing it later is not escrow either, because a card authorisation expires in about a week, and catering is booked months ahead.

To stop one side simply declaring the job done, the release requires both confirmations to be recorded, or an administrator to force it deliberately. That rule is specifically covered by an automated test that tries to release funds on one confirmation and expects to fail.

Evidence

What was tested before it went live

118/118
passed

The full walkthrough

A script visits every page as a logged-out visitor, as a customer and as a caterer, then runs a whole booking end to end: brief, message, quote, accept, pay, both confirm, release. Eighteen of those checks are new today: most exist to prove the forms never throw your entries away again, and three came out of the Sign Out fault below.

Passed
15/15
passed

The matching engine, on its own

New today. It checks the distance maths against real coordinates — Bristol to Bath, Bristol to Plymouth — and the rules around it: a caterer outside their radius is excluded, one inside is not, guest numbers and budget still count, and a caterer who has not filled in their capacity yet is never crashed or dropped.

It earned its keep immediately: it was this that caught the Plymouth caterer scoring 75 for a Bristol job. I had assumed that was working.

Passed
44/44
listings moved

Every existing listing converted

Each one had its free-text food description mapped onto the new list and its location turned into real coordinates. None fell through to “Other”, and none were left unplaceable. Nobody has to re-enter anything.

Done
1
near miss

A mistake caught before it reached the live site

The conversion was originally written to find each listing by its internal row number. Those numbers are not the same on my machine as on the live site — so it would have written one caterer's location onto a different caterer's listing. Caught by rehearsing it against a restored copy of the real database first. Rewritten to find each business by its own reference instead.

Avoided
2
bad town names

“Swindon (Swindon)”

The postcode service returns the county in brackets where a town name is ambiguous, so two listings came out as “Swindon (Swindon)” and “Chippenham (Wiltshire)” — which was going into the page heading on their public profile. Stripped, and there is now a test so it cannot come back.

Fixed
58
page loads

The phone test

Every page loaded in a real browser at 375px and again at 320px — a modern iPhone and the smallest phone still in use. No sideways scroll, nothing off the edge, no tap target under a fingertip, no text under 12px. The fixes from last week are on the live site now too.

Passed

A backup of the live database was taken first, and proven to actually restore — then the whole update was rehearsed against that restored copy before anything touched the real thing. That rehearsal is what caught the row-number mistake above.

Honest list

Drafts, placeholders and things that are not real yet

Over to you

What I would like your opinion on

Is 10% on a completed booking the right number?

It comes off your side, not added to the customer's. Nothing is charged on a cancellation, and nothing at all is charged for listing, reading briefs, messaging or quoting. Compare it to what you currently pay in lead fees and credits for jobs you never win.

Would you actually confirm a job in an app?

The money will not move until you and the customer both press confirm. If people forget, caterers do not get paid on time and the whole model falls over. Would you do it from your phone on the way home? Should it chase you?

Are the 36 cuisines right?

This is the big one. Which are missing, which are the same thing under two names, and which would you never tick? I added Korean, Vietnamese and Taiwanese & Bao because caterers already listed needed them — what else is like that?

Does splitting “what you cook” from “how you serve it” match how you think?

Two questions now: the food, and the format. Is that how you would describe your own business to a customer, or is it one thing in your head?

Should being outside your radius rule you out completely?

It does now — a job beyond your travel limit never reaches you. The alternative is showing it anyway, lower down, in case you would stretch for the right booking. Which would annoy you less?

What does a brief need to include before you would reply?

It currently asks for date, postcode, guest numbers, budget, venue, the food, service style and dietary needs. What is missing that makes you ignore an enquiry?

Six questions to list — too few, or still too many?

Business name, your name, email, password, postcode, what you cook. Everything else waits until you are in. Would you have finished that on a phone, standing at a trade show?

One main photo and eight gallery shots — enough?

6MB each, which is a normal phone photo. And would you rather upload from a phone or a laptop?

Have a look at the site

Why this page is plain

Built to cost almost nothing to read

No photographs, no tracking, no fonts to download and not one line of JavaScript — the whole page is a single file of about 30KB, served from whichever Cloudflare machine is nearest you. It is dark by default because on a phone with an OLED screen a black pixel is a pixel that is switched off; if your phone or laptop is set to light mode, it will honour that instead.

The practical upshot: it opens instantly on a bad signal in a field, costs almost nothing in mobile data, and sets no cookies, so there is nothing to consent to.

The small print

Privacy, and the terms of sharing this

Privacy. This page collects nothing about you. No analytics, no tracking pixels, no cookies, no fonts or scripts fetched from anyone else's server — so there is nothing to consent to and no consent banner. Cloudflare, which serves the page, keeps its own standard request logs; I do not see who opened it or when. Emailing me is the only way anything about you reaches me, and then only what you write.

Terms. This is a private working document shared for review, not a published announcement, and it describes software that is not finished. Nothing in it is an offer, a contract, or advice — the 10% commission, the escrow arrangement and the timings are all proposals to be argued with. Please do not forward the link without asking first. Everything on the live FeastMatch site is test data.