Guests & CRM
Guest profiles
A unified profile per guest across reservations, vouchers, and online orders.
The guest CRM stores one profile per guest, deduplicated by email and phone. Every time a reservation, voucher, or order references that guest, the profile's history grows automatically. Hosts see this history inline when assigning tables, so a regular VIP is never treated as a stranger.
Profile schema
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| name | string | Required | — | Display name. First plus last is recommended for matching. |
| string | — | — | Used for confirmations and as a deduplication key. | |
| phone | E.164 string | — | — | Used for SMS notifications and as a secondary deduplication key. |
| language | 'de' | 'en' | — | de | Language for confirmations, reminders and the booking page. |
| allergens | string[] | — | — | Standardized list (gluten, lactose, nuts, shellfish, etc.) plus free-form entries. |
| dietary | string[] | — | — | Vegan, vegetarian, halal, kosher, pescatarian, or custom. |
| notes | string | — | — | Free-form notes visible to staff. Not surfaced to the guest. |
| tags | string[] | — | — | VIP, regular, blocked, press, birthday-month, etc. |
| visits | Visit[] | — | — | Auto-populated history of past reservations with date, party, table and server. |
| marketingConsent | boolean | — | false | Whether the guest has opted in to marketing communications. |
| customFields | Record<string, string> | — | — | Workspace-defined fields, e.g. wine club membership tier. |
Visit history
Each profile shows a chronological list of past reservations: date, party size, table, server, total spend if linked from POS, and any incident notes. The list is capped at 100 visible entries in the UI; older history is reachable via search and is always included in GDPR exports.
Privacy by default
Guest contact details are not exposed to the Server role unless a manager explicitly grants the permission. The Kitchen role never sees contact details.