Shop

The shop app is the general-purpose e-commerce layer: items, add-ons, a cart, checkout, and QR-code-based fulfillment. It is separate from the register merchandise system (which is tied to registration tiers), though both use Stripe.

What it does

  • Items & add-ons — ShopItem (with an optional JSON form schema authored through the form builder) and quantity-limited add-ons.

  • Cart & checkout — ShopCart → ShopOrder with order snapshots so a historical order reflects what was purchased at the time, not current prices.

  • Stripe payments — checkout via Stripe; confirmation through webhooks.

  • QR-based fulfillment — ShopFulfillment and fulfillment terminals (QR-scan → validate → fulfill). A pending → validated → fulfilled → cancelled status machine.

  • Validation terminals — endpoints for self-service / tether-mode fulfillment.

Status workflow

pending → validated → fulfilled → cancelled

Key models

Event
  └─ ShopItem (form: JSON schema) → ShopCart → ShopOrder (snapshot)
        └─ ShopFulfillment

Where to look

  • Models: shop/models.py

  • Views: shop/views.py

  • URLs (under /app/shop/): shop/urls.py

  • Frontend: ui/src/app/apps/shop/

  • Form registry: ui/src/app/apps/shop/shop-form-components/shop-components.ts