Skip to content

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 times

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 Modifiers

Categories

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 unavailable

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 prices

Order 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 category

Delivery 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 time

Payments

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 orders

Offers & 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 order

Inventory

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 image

Passkey 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 password

Display 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 logic

Guided 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 order

Online 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 experience

Shopify 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 transactions

Kassanet 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 POS

Star 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 remotely

Circular 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:

  1. Location (foundation)
  2. Business Hours (when open)
  3. Tax Rates (for pricing)
  4. Categories (menu structure)
  5. Menu Items (products)
  6. Modifiers (customizations)
  7. Menus (group items)
  8. Payments (how to pay)
  9. Delivery Zones (where to deliver)
  10. Order Capacity (limits)
  11. Devices (kiosk, KDS)
  12. 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