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-onsShopItem (with an optional JSON form schema authored through the form builder) and quantity-limited add-ons.

  • Cart & checkoutShopCartShopOrder 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 fulfillmentShopFulfillment 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