Appearance
Cross-Feature Relations
How features depend on and interact with each other.
Dependency Graph
┌─────────────┐
│ LOCATIONS │
└──────┬──────┘
│
┌──────────────────┼──────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Business Hours│ │ Menus │ │ Payments │
└───────┬───────┘ └───────┬───────┘ └───────────────┘
│ │
│ ┌───────┴───────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│Order Capacity │ │ Categories │ │ Modifiers │
└───────────────┘ └───────┬───────┘ └───────────────┘
│
▼
┌───────────────┐
│ Menu Items │
└───────────────┘Feature Dependencies
Locations (Foundation)
Required By:
- Everything (all features are location-scoped)
Provides:
- Timezone (for scheduling)
- Currency (for pricing)
- Address (for delivery)
- Business hours reference
Business Hours
Depends On:
- Locations (hours are per-location)
Required By:
- Order Capacity (slots only within hours)
- Online Ordering (available times)
- Delivery Zones (delivery hours)
Relation Details:
Location has Business Hours
↓
Order Capacity checks Business Hours
↓
Time slots only generated within Business Hours
↓
Customer sees available timesMenus
Depends On:
- Locations (menus assigned to locations)
Required By:
- Categories (categories belong to menus)
- Menu Items (items in menus via categories)
- Kiosk (displays assigned menu)
- Online Ordering (displays active menu)
Relation Details:
Menu assigned to Location
↓
Menu has Categories
↓
Categories have Items
↓
Items have ModifiersCategories
Depends On:
- Menus (categories belong to menus)
Required By:
- Menu Items (items belong to categories)
- Order Capacity (category-specific limits)
- Reporting (sales by category)
Relation Details:
Category in Menu
↓
Items assigned to Category
↓
Order Capacity can limit items per Category
↓
If category limit reached, items in that category unavailableMenu Items
Depends On:
- Categories (items belong to categories)
- Tax Rates (tax applied to items)
Required By:
- Modifiers (modifiers attached to items)
- Inventory (stock tracked per item)
- Order Capacity (items counted for limits)
- Offers (offers can target items)
Modifiers
Depends On:
- Menu Items (modifiers attached to items)
Required By:
- Order total calculation
- Kitchen display (shows selected options)
Relation Details:
Item has Modifier Groups
↓
Customer selects options
↓
Price adjusted based on selections
↓
Order total = Base price + Modifier pricesOrder Capacity
Depends On:
- Locations (capacity per location)
- Business Hours (slots within hours only)
- Categories (for category limits)
Required By:
- Online Ordering (determines available slots)
- Kiosk (for scheduled orders)
Relation Details:
Order Capacity Settings
├── Time Slot Duration
├── Orders Per Slot Limit
├── Items Per Slot Limit
└── Category Limits
↓
References Categories
↓
Counts items by categoryDelivery Zones
Depends On:
- Locations (zones per location)
Required By:
- Online Ordering (delivery availability)
Relation Details:
Location has Delivery Zones
↓
Each zone has postal codes
↓
Customer enters address
↓
System matches postal code to zone
↓
Zone determines: fee, minimum, delivery timePayments
Depends On:
- Locations (payment config per location)
Required By:
- Online Ordering (checkout)
- Kiosk (payment terminal)
- Transactions (payment records)
Loyalty
Depends On:
- Locations (loyalty per location/merchant)
- Customers (points per customer)
Required By:
- Online Ordering (point redemption)
- Transactions (points earned)
Relation Details:
Loyalty Program Settings
├── Points per Euro spent
├── Point redemption value
└── Minimum redemption threshold
↓
Customer places order
↓
Points calculated: Order Total × Points per Euro
↓
Points added to customer account
↓
Customer can redeem on future ordersOffers & Promotions
Depends On:
- Locations (offers per location)
- Menu Items (offers can target items)
- Categories (offers can target categories)
- Customers (customer-specific offers)
Required By:
- Online Ordering (promo codes)
- Transactions (discount records)
Relation Details:
Offer Configuration
├── Discount type (% or fixed)
├── Minimum order
├── Valid dates
├── Target items/categories
└── Usage limits
↓
Customer applies promo code
↓
System validates:
- Code exists and active
- Within valid dates
- Order meets minimum
- Usage limit not exceeded
↓
Discount applied to orderInventory
Depends On:
- Locations (stock per location)
- Menu Items (stock per item)
Required By:
- Online Ordering (item availability)
- Kiosk (item availability)
- Transactions (stock deduction)
Relation Details:
Item Stock Level
↓
Order placed with item
↓
Stock decremented
↓
If stock = 0 and tracking enabled
↓
Item shows "Sold Out"Team
Depends On:
- Locations (team members per location)
Required By:
- Activity Log (who made changes)
- Permissions (what they can access)
Devices (Kiosk, KDS, Printers)
Depends On:
- Locations (devices assigned to locations)
- Menus (kiosk displays menu)
- Device Profiles (configuration)
Required By:
- Order flow (KDS receives orders)
- Receipts (printer outputs)
Photo Studio
Depends On:
- Menu Items (generates/edits images for items)
Required By:
- Kiosk (product images displayed on kiosk)
- Online Ordering (product images displayed in menu)
Relation Details:
Item selected in Photo Studio
↓
AI background removal / image enhancement applied
↓
Image uploaded to Cloudflare Images
↓
Item image URL updated
↓
Kiosk and Online Ordering display updated imagePasskey Authentication
Depends On:
- Team/Users (passkeys registered per user account)
Required By:
- Login flow (passwordless login option)
Relation Details:
User registers passkey in Profile → Passkeys
↓
Passkey stored via WebAuthn (RP ID = backoffice domain)
↓
On login, user can choose passkey instead of email/password
↓
Browser authenticates with biometrics/security key
↓
User logged in without passwordDisplay Groups
Depends On:
- Menu Items (items assigned to display groups)
- Categories (display groups organize items within menus)
- Menus (display groups belong to menus)
Required By:
- Kiosk (visual grouping of items on kiosk screen)
- Online Ordering (visual grouping of items in web menu)
- QR Ordering (visual grouping of items in QR menu)
Relation Details:
Menu has Display Groups
↓
Display Groups contain Items (independent of categories)
↓
Customer-facing channels show items grouped by Display Group
↓
Display Group controls visual layout, not business logicGuided Setup
Depends On:
- Locations (creates/configures location)
- Menus (creates/configures menu)
- Business Hours (sets business hours)
- Payments (configures payment provider)
- Branding (sets logo and colors)
- All core features (wizard touches each during onboarding)
Required By:
- Onboarding flow (first-time merchant experience)
Relation Details:
New vendor accesses backoffice
↓
Guided Setup dialog appears
↓
Vendor selects service path (Self-Service / Online Ordering / QR Code)
↓
Wizard walks through: Location → Menu → Hours → Payments → Branding
↓
All core features configured in correct dependency orderOnline Settings
Depends On:
- Locations (settings are per location)
- Business Hours (ordering availability within hours)
- Menus (selects which menus are active for online ordering)
Required By:
- Online Ordering (controls capacity, tips, notes, menus)
- QR Ordering (shares some settings like tips and notes)
Relation Details:
Online Settings configured per Location
├── Order Capacity (orders per slot, items per slot)
├── Tips (enable/disable, custom amounts)
├── Order Notes (enable/disable)
├── Active Menus (which menus to show online)
├── Idle Timeout (session expiry)
├── Print Settings (auto-print, send to POS)
└── Customer Info (required fields)
↓
Online Ordering reads these to control customer experienceShopify Integration
Depends On:
- Menu Items (syncs products bidirectionally)
- Categories (maps to Shopify collections)
- Menus (determines which items are synced)
- Display Groups (Shopify collections map to display groups)
Required By:
- Online Ordering (Shopify orders flow into Upvendo)
Relation Details:
Shopify connected via OAuth
↓
Products synced: Shopify ↔ Upvendo items
Collections synced: Shopify ↔ Upvendo display groups
↓
Shopify orders received via webhooks
↓
Orders appear in Upvendo transactionsKassanet Integration
Depends On:
- Locations (connection is per location)
- Table Sections (linked to POS table sections)
Required By:
- In-House ordering (orders pushed to POS)
- KDS (kitchen tickets via POS)
Relation Details:
Kassanet connected per Location (Hendrickx/Vanhoutte protocol)
↓
Menu imported from POS → Items, Categories, Display Groups
↓
Table sections linked to POS floor plan
↓
Orders from Kiosk/QR pushed to POS via Kassanet protocol
↓
KDS receives orders through POSStar Micronics Integration
Depends On:
- Devices (printers managed as devices)
- Printers (printer configuration and assignment)
Required By:
- Receipt Printing (cloud-based receipt output)
Relation Details:
Star Micronics connected via OAuth (PKCE)
↓
Cloud printers discovered and assigned to locations
↓
Orders trigger print jobs via Star Micronics Cloud API
↓
Receipts and kitchen tickets printed remotelyCircular Dependencies
Some features have bidirectional relationships:
Items ↔ Inventory
- Items define what can be tracked
- Inventory affects item availability
Orders ↔ Capacity
- Capacity limits orders
- Orders consume capacity
Customers ↔ Loyalty
- Customers earn points
- Points belong to customers
Configuration Order
When setting up a new location, configure in this order:
- Location (foundation)
- Business Hours (when open)
- Tax Rates (for pricing)
- Categories (menu structure)
- Menu Items (products)
- Modifiers (customizations)
- Menus (group items)
- Payments (how to pay)
- Delivery Zones (where to deliver)
- Order Capacity (limits)
- Devices (kiosk, KDS)
- Loyalty/Offers (optional)
Impact Analysis
When changing a setting, consider impacts:
Changing Business Hours
- ✓ Order Capacity slots recalculated
- ✓ Online Ordering times updated
- ✓ Delivery availability updated
Changing Category
- ✓ Items in category affected
- ✓ Category capacity limits affected
- ✓ Menu display updated
Disabling Item
- ✓ Item hidden from menus
- ✓ Existing cart items may error
- ✓ Offers targeting item affected
Changing Price
- ✓ All channels show new price
- ✓ Existing carts NOT updated (snapshot)
- ✓ Reports show historical prices