Home › Docs › 30 · Membership IDs

30 · Membership IDs

Every ID on this platform looks the same: MCD-2026-4XK9QT — MCD, the year the card was issued, then six characters. The year is there so a number read out over the phone can be checked against the card in front of you without looking anything up, and the six characters skip the shapes that get confused when spoken: no O, no I, no zero, no one. Cards issued before this shape existed were renamed onto it, keeping the six characters their holder already knows.

A membership ID is how a person is known on MyCityDeal. Two rules, and they are the whole feature:

  1. It is permanent. A card has no end date, so a member never renews, and nobody is asked for a card again in a year's time.
  2. It belongs to customers. A restaurant or admin login is never asked for one, and never blocked by one. You manage restaurants; the ID is for people who book tables and order food.

Where it is asked for

  • Sign up — the field is on the customer form only, and it is the one field on that form you can leave blank. If you have a printed card, type its number and the name on the card fills itself in. If you do not, the account is issued its own permanent ID at that moment and shown to you once, on screen.
  • Log in — not asked for. The ID is a permanent part of the account, so the password has already proved who is signing in, and the sign-in hands the ID back to the app. Asking for the number as well bought nothing a customer could use, and it put a field on the restaurant and admin login that has no meaning for them. A customer who somehow has no card is given one on the way in and told once. The ID is on Profile whenever you want to read it.
  • Guest table booking — the number printed on the card. A guest booking has no account behind it, so the card is the only thing that identifies the booking; it must already exist.
  • Online orders — checked again at the time of ordering.

A cancelled card stops bookings and orders at once. That is the only way a membership ends.

Your ID, in one place

Profile shows the ID with a Copy button, so "what is my membership number?" has an answer without calling anyone. Restaurant logins do not see this panel, because they have no card.

For the desk (super admin)

Memberships issues cards, links a card to an account, renews a dated one, and cancels one. Cards issued from the desk are lifetime cards unless a term in months is given. The list shows Lifetime where a card has no end date, rather than a date nobody will reach.

Accounts that existed before this rule were given their own permanent ID automatically, so nobody who already had an account lost the ability to book.

Moving a database onto the current ID shape

node scripts/rename-membership-codes.cjs            # dry run: prints the old -> new table
node scripts/rename-membership-codes.cjs --apply    # writes it

It rewrites one column — memberships.code — and only on rows that are not already MCD-<year>-<six characters>, keeping the six characters a member already has and stamping the year the card was actually issued. Nothing is inserted, deleted, renewed, reassigned or re-statused, no other table is written, and a second run finds nothing to do. Run the dry run first and read the table: it is the list of cards whose printed number is about to change.

Ready to grow your restaurant?

Join 50+ restaurants on MyCityDeal and start receiving bookings today.