Skip to main content
Petanque Life

POS + Upsell + QR-Checkin + Marketing (PL-T200)

F22.18 12 features

At a glance

A growth and operations layer for chain venues. POS integrations with Square, Zettle/iZettle and Stripe Terminal using signed webhooks and a 15-minute device health-check that fires ops-alerts when readers drop offline. Rule-based smart upsell prompts evaluated at multiple touchpoints, signed-JWT QR check-in tokens with offline JWKS-cache support, and four configurable marketing-automation flows: birthday offer, win-back, gift-card promo, and post-detractor NPS recovery.

How it works

POS integrations push transactions into the booking platform from the bar's existing terminal — Square, Zettle/iZettle, and Stripe Terminal each have a dedicated provider with transaction push and signed webhooks (Square HMAC, Zettle JWS, Stripe Stripe-Signature with skew tolerance). A device health-check job pings each registered terminal every 15 minutes and fires an ops-alert if a device drops offline so operators learn about a dead card reader before customers do. Smart upsell uses rule-driven prompts evaluated at multiple touchpoints (wizard checkout, operator confirm, customer portal).

Rules combine color_type, party size, weekday, and season — for example, "on Friday evenings for parties of 4+, suggest the 4-person sharing platter" — and surface as preview prompts the customer can dismiss for the session. The smart upsell preview API returns the eligible prompts plus the rule-id so operators can attribute conversions per-rule in analytics. QR check-in issues signed JWTs (HS256 with per-tenant keys derived via HKDF, kid-rotation supported) embedded in booking confirmations.

The customer shows the QR at the door; the operator scans, the JWT verifies offline against a JWKS-cache (so a momentary network blip doesn't stop check-in), and the booking flips to CHECKED_IN instantly. Marketing automation runs four flows out of the box. Birthday: send an offer days_before_birthday via the configured channel.

Win-back: target customers with inactivity_days exceeded and historical_min visits to filter out one-time visitors. Gift-card-promo: an annual push around a chosen date for gift-card sales. Post-detractor recovery: triggered by NPS scores ≤ 6, opens a recovery message with a make-good offer.

Every flow is configurable per tenant, can be enabled/disabled independently, and respects the customer's per-channel opt-out from F22.14.

Key capabilities

  • POS integrations: Square + Zettle + Stripe Terminal with signed webhooks
  • POS device health-check (15 min ping + ops-alert)
  • Rule-based smart upsell (color_type · party · weekday · season) with preview API
  • Signed-JWT QR check-in with offline JWKS-cache + kid-rotation
  • Birthday-offer + win-back + annual gift-card promo flows
  • Post-detractor recovery flow triggered by NPS ≤ 6
  • Per-tenant enable/disable + per-customer channel opt-out respected

In practice

On a Friday morning the marketing manager configures the win-back flow: target customers with inactivity_days = 90 and historical_min = 3, send via email with a 15% discount code valid for 14 days. The cron runs that night and identifies 87 eligible customers, sending each a personalized offer. Over the next two weeks, 19 of them book through the link — the analytics dashboard shows the campaign's contribution.

Meanwhile, every customer arriving for tonight's bookings shows the QR from their email; the host scans with the operator console, the JWT verifies offline (the venue's wifi is patchy near the door), and check-in is one beep. After dinner, a server's Square terminal goes offline — the device health-check fires an ops-alert within 15 minutes and a manager swaps in a backup before the dinner rush peaks. At checkout, the wizard surfaces "Add a 4-person sharing platter" because the smart upsell rule for Friday-evening parties of 4+ matches; one in three customers accepts.

Features in this subsystem

12
ID Status Features
F22.18.01 Shipped POS integration Square (transaction push + signed webhook)
F22.18.02 Shipped POS integration Zettle/iZettle (transaction push + signed webhook)
F22.18.03 Shipped POS integration Stripe Terminal (PaymentIntent + Stripe-Signature skew)
F22.18.04 Shipped POS device health-check job (15 min ping + ops-alert)
F22.18.05 Shipped Rule-based smart upsell prompts (color_type · party · weekday · season)
F22.18.06 Shipped Smart upsell preview API + sessions-dismiss UI
F22.18.07 Shipped Signed-JWT QR check-in tokens (HS256, per-tenant HKDF, kid-rotation)
F22.18.08 Shipped Instant QR check-in via operator scan (offline-capable via JWKS-cache)
F22.18.09 Shipped Marketing-automation: birthday offer (days_before_birthday)
F22.18.10 Shipped Marketing-automation: win-back (inactivity_days · historical_min)
F22.18.11 Shipped Marketing-automation: gift-card-promo (årlig push)
F22.18.12 Shipped Marketing-automation: post-detractor recovery (NPS-trigger)