Skip to main content

Contacts

Each supplier keeps its own list of people to contact at a customer: one primary contact and up to 5 additional contacts, each with a name, phone and email. The list is private to the supplier. Other suppliers and the restaurant don't see it. The contacts also receive the customer's order, invoice and payment messages. While a customer the supplier created is still waiting to accept its invitation, changing the primary contact's phone or email re-sends the invitation to the new details.

Who uses it​

  • Supplier staff add, edit and remove contacts and choose the primary one.
  • Restaurant contacts receive invitations, order updates, invoices, receipts and reminders at the phone numbers and emails listed.

How it works​

The Contact Information card​

On the customer's page, the Contact Information card lists the primary contact first, then the additional contacts. Three show at a time. The rest are behind "See more ({count})" and "See less".

ButtonShown when
Add Primary ContactThere's no primary contact yet, the customer is connected (or created by you), and no invitation is waiting for an existing restaurant to accept
Add ContactThere's a primary contact, fewer than 5 additional contacts, and no invitation is waiting for an existing restaurant to accept
Edit (on a contact)Always, for each contact
Delete Contact (in the edit dialog)Only for additional contacts. The primary contact can't be deleted

While an invitation is waiting for an existing restaurant to accept, the card shows the invited contact with a Pending Invitation chip, and no contacts can be added.

Adding and editing a contact​

FieldRule
First NameRequired: "First Name is required"
Last NameOptional
Phone NumberAt least one of phone or email: "Phone number or email is required"
Email
Mark as Primary (Business)Tooltip: "This is the business information used for invoices, orders, shipping, and billing. Updates apply to future orders only and do not change historical records." Disabled when adding the very first contact (it becomes primary anyway) and when editing the primary itself
SituationMessage
Same phone as another contact on this customer"This phone number is already used by another contact"
Same email as another contact on this customer"This email is already used by another contact"
Phone or email belongs to a different Clipp customer (new customers only)"This phone number is already in use by another customer. Please use a different phone number or connect the existing customer instead." (or "email")
Already 5 additional contacts"A customer may have at most 5 additional contacts."
Making an additional contact primary when the old primary would be a 6th additional contact"Cannot mark as primary: demoting the current primary would exceed the 5 additional contacts limit."
An invitation is waiting for an existing restaurant"Cannot add additional contacts while an invitation requiring acceptance is pending."

Success messages: "New Contact Added!", "Contact updated successfully", "Contact removed successfully".

Mark as Primary swaps the two: the chosen contact becomes primary and the old primary becomes an additional contact.

What a primary contact change does to an invitation​

It depends on where the customer is in inviting & connecting:

CustomerChange the primary contact's phone or emailChange only the name
New customer you created, not yet acceptedThe restaurant's login, business phone and email change to the new details. The old invitation is revoked and a new one is sent to the new phone or email. The old link stops workingThe name is updated on the invitation. Nothing is re-sent
Existing restaurant you invited, not yet acceptedThe invitation is revoked and a new one is sent to the new details. The restaurant's own login isn't touchedName updated on the invitation
Connected (invitation accepted)Only your contact list changes. The restaurant's login, business phone and email stay as they areOnly your contact list

Example. You created "Harbor Bistro" with primary contact Ana, 555-0100, and the invitation went to 555-0100. Before Ana accepts, you change the phone to 555-0199:

BeforeAfter
Primary contactAna, 555-0100Ana, 555-0199
Restaurant's login phone555-0100555-0199
InvitationPending, sent to 555-0100Old one revoked. New one sent to 555-0199
Ana taps the old text's linkWorksNo longer works

Whose phone and email the header shows​

The customer page header picks, in order:

1st2nd3rd
EmailYour primary contactThe invitation's emailThe restaurant's business email
PhoneYour primary contactThe restaurant's business phoneThe invitation's phone
Contact nameYour primary contactThe restaurant's ownerThe invitation's name

Call Customer dials the restaurant's business phone, not the primary contact.

A business with no contact​

A supplier can add a customer with only a business name, and no phone or email. No invitation is sent and no login is created.

  • Adding a primary contact later only adds it to your list. It doesn't create a login or send an invitation (verify: the spec expects an owner and an invitation).
  • Additional contacts need a primary contact first. Add Contact stays hidden until there is one.

Who gets messages​

Order, invoice, payment and reminder messages go to everyone on the list, without duplicates:

  • the restaurant's own business email and phone,
  • the restaurant's staff whose role lets them see orders (set by the restaurant),
  • your primary contact, and
  • your additional contacts.

There is no per-contact on/off switch. Clipp promotion coupons use the restaurant's own contacts only, not your list.

Where it shows up​

Customer detail (header and Contact Information card) · Invoice PDF and order details ("primary contact" in the snapshot) · Statement recipients (primary contact's email, else the business email) · Every order, invoice, payment and reminder message.

Permissions​

ActionWho
Add, edit, delete contacts in the appRoles with full customer access (Admin, Clerk by default)
The same through the serverAny staff of the supplier (and, per the server rules, the restaurant itself; see Known limitations)

Decisions​

  • Contacts live on the supplier's relationship with the customer, not on the restaurant. Each supplier has its own "who to call". (#1948)
  • At most 5 additional contacts.
  • The primary contact can't be deleted. Mark another contact as primary first.
  • Changing a pending invitation's phone or email revokes and re-creates it, all or nothing. 41 invitations had been destroyed by a half-finished swap. (#2324)
  • The restaurant's login can't be changed once it has accepted. Only Clipp support can.

Known limitations​

  • The restaurant can read and change a supplier's private contacts through the server, because the server lets either side of the relationship in (security review needed).
  • Clearing a pending invitation's email or phone keeps the old value on the invitation (#2324).
  • A multi-word first name is split wrongly on a pending invitation's contact ("Mary Jane Watson" shows as first name "Mary").
  • The app's specific "already in use by another customer" wording never shows. The app expects a slightly different message from the server, so it falls back to a general error.
  • The header picks email and phone in different orders, so it can show the invitation's email next to the business phone.

FAQ​

Why can't I delete this contact? It's the primary contact. Mark another contact as primary, then delete it.

Why can't I add a contact? Either the customer already has 5 additional contacts, or you invited a restaurant that already had a Clipp account and it hasn't accepted yet.

I changed the phone number and the restaurant got a new invitation. The customer hadn't accepted yet, so the invitation follows the primary contact. The old link no longer works.

Will the restaurant see the contacts I add? Not in the restaurant app. But those contacts receive the order and invoice messages for this customer.

Can I stop one contact getting invoices? Not per contact. Remove the contact, or leave out their phone or email.

Specs​

Where these specs don't match the app
  • DDEC-001: "the first user invited to a new restaurant becomes the owner". True only when you create a new restaurant with a contact.
  • DDEC-004: there's no error to show. The app simply doesn't offer deleting the primary contact.
  • DDBC-001: adding a contact to a business with none doesn't create an owner or send an invitation.
  • DDBC-002, DDBC-003: the messages in the spec don't exist. The app hides Add Contact instead.
edit-restaurant-contacts.feature
# prefix: DDEC
Feature: Editing restaurant contact information
A supplier can edit a restaurant's contact details through the Clipp app.
Before onboarding, contact edits update both supplier and restaurant records.
After onboarding, only supplier records are updated.

Background:
Given supplier "Miguel Supplier Test" has a restaurant "John Pizza III" with the following contact:
| First Name | Johnny |
| Last Name | Smith |
| Primary Phone | +19179171917 |
| Primary Email | eder.chamale+john.pizza.iii@gmail.com |

Rule: The first user invited to a new restaurant becomes the owner of the restaurant

Scenario: DDEC-001 First invited contact becomes the restaurant owner
Given the restaurant "John Pizza III" has no owner
When the supplier adds a contact person and submits the invitation
Then the contact user becomes the owner of "John Pizza III"
And the owner role cannot be changed by the supplier

Rule: Additional contact changes keep the invitation pending

Scenario Outline: DDEC-002 Add an additional <field> to the restaurant
Given the restaurant has a pending invitation to the contact
And the restaurant does not match any existing restaurant
And a user with the email "eder.chamale+john.pizza.iii@gmail.com" does not exist
And the invitation is not accepted
And a user with the <field> "<new_value>" does not exist
When the supplier adds "<new_value>" to the restaurant's additional <field> list
Then the previous invitation remains pending
And the restaurant's <field> list is updated to include "<new_value>"
And the supplier's customer records reflect the updated <field> list

Examples:
| field | new_value |
| Primary Email | eder.chamale+john.pizza.iii.extra@gmail.com |
| Primary Phone | +19179171919 |

Scenario Outline: DDEC-003 Delete an additional <field>
Given the restaurant has a pending invitation to the contact
And the restaurant does not match any existing restaurant
And a user with the email "eder.chamale+john.pizza.iii@gmail.com" does not exist
And the invitation is not accepted
And the restaurant has an additional <field> "<value>"
When the supplier deletes the additional <field> "<value>"
Then the previous invitation remains pending
And the restaurant's <field> list no longer includes "<value>"
And the supplier's customer records reflect the updated <field> list

Examples:
| field | value |
| Primary Email | eder.chamale+john.pizza.iii.extra@gmail.com |
| Primary Phone | +19179171919 |

Rule: The primary contact cannot be deleted

Scenario Outline: DDEC-004 Attempt to delete the primary <field>
When the supplier attempts to delete the primary <field>
Then the supplier receives an error

Examples:
| field |
| Primary Email |
| Primary Phone |

Rule: Setting an additional contact as primary revokes and recreates the invitation

Scenario Outline: DDEC-005 Set an additional <field> as primary
Given the restaurant has a pending invitation to the contact
And the restaurant does not match any existing restaurant
And a user with the email "eder.chamale+john.pizza.iii@gmail.com" does not exist
And the invitation is not accepted
And the restaurant has an additional <field> "<new_primary>"
When the supplier sets "<new_primary>" as the primary <field>
Then the previous invitation is revoked
And a new invitation is sent to "<new_primary>"
And the restaurant's primary <field> is updated to "<new_primary>"
And the previous primary <field> is moved to the additional <field> list
And the supplier's customer records reflect the updated <field>

Examples:
| field | new_primary |
| Primary Email | eder.chamale+john.pizza.iii.extra@gmail.com |
| Primary Phone | +19179171919 |

Rule: After onboarding, supplier contact edits update only supplier records

Scenario Outline: DDEC-006 Add an additional <field> after onboarding
Given the restaurant has completed onboarding
When the supplier adds "<new_value>" to the supplier's additional <field> list
Then the supplier's additional <field> list includes "<new_value>"
And the restaurant's <field> list remains unchanged

Examples:
| field | new_value |
| Primary Email | eder.chamale+john.pizza.iii.extra@gmail.com |
| Primary Phone | +19179171919 |

Scenario Outline: DDEC-007 Delete an additional <field>
Given the restaurant has completed onboarding
And the restaurant has an additional <field> "<value>"
When the supplier deletes the additional <field> "<value>"
Then the supplier's additional <field> list no longer includes "<value>"
And the restaurant's <field> list remains unchanged

Examples:
| field | value |
| Primary Email | eder.chamale+john.pizza.iii.extra@gmail.com |
| Primary Phone | +19179171919 |

Scenario Outline: DDEC-008 Set an additional <field> as primary
Given the restaurant has completed onboarding
And the restaurant has an additional <field> "<new_primary>"
When the supplier sets "<new_primary>" as the primary <field>
Then the supplier's primary <field> is updated to "<new_primary>"
And the supplier's previous primary <field> is moved to their additional <field> list
And the restaurant's primary <field> remains unchanged
And the restaurant's user information remains unchanged

Examples:
| field | new_primary |
| Primary Email | eder.chamale+john.pizza.iii.extra@gmail.com |
| Primary Phone | +19179171919 |

Rule: The supplier is informed about how contact changes affect records

Scenario: DDEC-009 Supplier sees guidance when managing phone numbers or emails
Given the supplier opens the phone number or email management dialog for "John Pizza III"
Then the supplier sees a message explaining that the displayed information is used for invoices, orders, shipping, and billing
And the message clarifies that updates apply to future orders only and do not change historical records

Scenario Outline: DDEC-010 Supplier sees guidance on readonly <field> field in customer details
Given the supplier is viewing the edit customer detail page for "John Pizza III"
Then the readonly <field> field displays a message explaining that the primary <field> can be updated through the <field> management dialog
And the message clarifies that the selected primary <field> will be displayed across invoices, new orders, and customer details
And the message clarifies that changes apply to future records only

Examples:
| field |
| phone number |
| email |
business-without-contact.feature
# prefix: DDBC
Feature: Business without a contact person
A supplier can create and manage a restaurant without providing
contact person information. The business exists without an invitation
or owner until a contact is added later.

Background:
Given supplier "Miguel Supplier Test" has a restaurant "John Pizza III" without contact information:
| Business Name | John Pizza III |
| Business Tax Id | 45456644 |
| Business Shipping Full Address | 123 Wall st |
| Business Shipping City | Brooklyn |
| Business Shipping State | NY |
| Business Shipping Zip | 11222 |
| Business Billing Full Address | 123 Wall st |
| Business Billing City | Brooklyn |
| Business Billing State | NY |
| Business Billing Zip | 11222 |
And no invitation exists for the restaurant
And no owner is assigned to the restaurant

Rule: Only new contact persons can be added to a business without a contact

Scenario: DDBC-001 Add a new contact person — no existing user matches
Given no user with the provided email or phone exists
When the supplier adds a primary contact person and submits the invitation
Then the contact user becomes the owner of the restaurant
And an invitation is sent to the provided email

Scenario: DDBC-002 Contact person already exists in another business
Given a user with the provided email or phone exists in another business hierarchy
When the supplier adds a primary contact person and submits the invitation
Then the supplier receives an error
And the supplier is informed that the contact person is already a member of another business

Rule: An additional contact cannot be added without a primary contact

Scenario: DDBC-003 Attempt to add an additional contact before a primary contact exists
Given no primary contact has been added to the restaurant
When the supplier attempts to add an additional contact
Then the supplier receives an error
And the supplier is informed that a primary contact must be added first

Rule: Onboarding requires a contact person

Scenario: DDBC-004 Business cannot onboard without a contact person
Given no contact person has been added to the restaurant
Then the restaurant cannot proceed with onboarding