Guests · Product

The share button that copied nothing

Tap Share on a menu, on a laptop, with clipboard permission unasked: the link is not copied, and nothing on screen says so. The failure was caught and discarded by one line. Two refusals that look identical in code mean opposite things to the person holding the phone.


Our guest menu has a Share button. Someone at a table taps it, sends the link to whoever is joining them, and that person orders from their own phone instead of queueing. It is a small thing that does real work in a food hall.

It has two ways of working. On a phone, it opens the operating system’s own share sheet. Everywhere else — every laptop, every desktop — it falls back to writing the address to the clipboard and showing a card that says Link copied.

The ordinary case was the broken one

Writing to the clipboard is something a browser can refuse. Not an exotic failure: it is the plain default state until a page has been granted permission, and plenty of browsers simply say no. That refusal arrived at a line that caught it and did nothing with it.

We measured rather than reasoned about it. With the clipboard forced to refuse, tapping Share changed the page by not one byte. No card. No error. No link to copy by hand. Nothing whatsoever to tell the guest that the thing they just asked for had not happened — so they put the phone down believing their friend had the menu.

Two refusals, opposite meanings

The interesting part is that the phone path can refuse too, and it must stay silent when it does. If the guest opens the system share sheet and swipes it away, that refusal is the guest changing their mind. Saying something would be noise; silence is exactly correct.

In code the two look the same — a promise that did not resolve. In the hand they are opposites. One is the person deciding; the other is the browser deciding on their behalf, without telling them. Handling both with the same empty catch treats a guest’s choice and a guest’s bad luck as the same event.

What it does now

Cancelling the share sheet stays silent. A refused clipboard now shows the link itself, already selected, so a long-press or a keyboard copy finishes the job in one move, with a line saying the browser would not copy it for us. The guest is one gesture from what they wanted instead of zero clues from it.

The general version

Go and find the empty catches in anything you rely on. They are usually written for a good reason — a share button should never crash a menu — and the good reason is about not throwing an error, not about not telling anyone. A fallback that hides its own failure is worse than no fallback, because the person walks away believing it worked.


Try it on tonight’s service.

Nothing to install, no card. Not better by the weekend? Close the tab.