Recommendations for building great personalized menu experiences with EveryBite.Documentation Index
Fetch the complete documentation index at: https://docs.everybite.com/llms.txt
Use this file to discover all available pages before exploring further.
Performance
Prefetch Filter Options
Load filter options when the menu screen initializes, not when the user opens the filter panel:Use Pagination
Never fetch all dishes at once. Use cursor-based pagination:Chain context comes from your session via the
X-Session-ID header. You don’t need to pass chainId in the query.Optimize Field Selection
Only request fields you need. GraphQL lets you be specific:User Experience
Display Match Status Clearly
Use visual hierarchy to communicate match status:| Status | Display | Color |
|---|---|---|
MATCH | Show prominently | Green accent |
ALMOST_MATCH | Show with warning | Yellow/Orange |
NOT_MATCH | De-emphasize or hide | Gray/Muted |
Show Match Reasons
When a dish is an “Almost Match”, explain why:Persist Preferences
Save user preferences locally for returning users:Security
Protect API Keys
Validate Session IDs
Generate session IDs server-side or use cryptographically secure methods:Passing IDs Securely
All communication with the SmartMenu API happens over HTTPS, which means every request—including thestartSession mutation and X-Session-ID header—is encrypted in transit. No one can intercept or read these values as they travel between your servers and ours.
IDs like guestId and passportId are passed once when you call startSession. After that, only the X-Session-ID header is needed on subsequent calls. Follow these best practices for the IDs you send:
Use opaque identifiers
Use random, meaningless strings rather than sequential numbers that could be guessed:
Common Pitfalls
Not handling empty results
Not handling empty results
Always have UI for when no dishes match the user’s preferences. Suggest loosening filters.
Ignoring Almost Matches
Ignoring Almost Matches
Almost Matches are valuable - they show dishes that are close. Don’t hide them completely.
Caching personalized results
Caching personalized results
Search results are personalized per user. Don’t cache them across users.
Missing error states
Missing error states
Handle network errors, rate limits, and API errors gracefully with retry logic.

