PROTOTYPE Clickable mockup · simulates the finished app ◃ Product overview
Petanque Life Boulodrome · admin
AB

Memberships & customers

The hall's business model: subscriptions · punch cards · season passes (a paid, recurring relationship with balance/validity — not a mere discount tier) plus the guest register (CRM-lite): history, preferences, lifetime value and internal notes for one venue.

31
Active subscriptions
12
Active punch cards
5
Active season passes
9 480 kr
MRR (recurring)
Memberships · GET …/memberships (filters: kind, status, customer)
CustomerKindStatusPrice / validityRenewalPunches
Anna Lind subscription Active 299 kr/monthRenews 2026-08-01 renew · end
Jonas Berg punch_card Active 10-punch (750 kr)6 left renew · end
Karin Sjö season_pass Active 2 400 kr2026-05-01 – 2026-09-30 renew · end
Leo Ström subscription Ended 299 kr/monthEnded 2026-06-15 renew · end
Nora Ek punch_card Depleted 10-punch0 left renew · end
Issue membership — POST …/memberships (kind-driven)
Subscription — off-session charging
Punch card — prepaid balance
Season pass — fixed validity window
subscription → recurring-source setup · punch/season → one-off payment. Idempotency-Key. Paid/renewed → RevenueEvent to the ledger.
Punch/membership ledger (venue_membership_ledger · append-only)
DateCustomerEventΔ punchesAmountpayment_id
2026-07-01Anna Lindrenewed299 krpay_9f2…
2026-06-28Jonas Bergpunch_used−1
2026-06-20Jonas Bergpurchased+10750 krpay_3a1…
Errors: 409 no_punches_remaining (empty card) · 409 membership_inactive (expired/ended) · concurrent deductions collide on the optimistic lock → no overdraw.
Guest register (CRM-lite) · GET …/guests — regulars, LTV and preferences
GuestIdentityBookingsLast visitLifetime value (LTV)Favourite court
Anna Lindaccount34yesterday4 080 krCentre open guest card
Jonas Bergaccount182026-06-281 560 krCourt 2 open guest card
+46 70 …45 67walk-in (guest_key)52026-06-15600 kr open guest card
Karin Sjöaccount272026-06-303 200 krCourt 5 open guest card
Guest card — GET …/guests/{gid} · PATCH (preferences / notes)
Anna Lind
Customer with account · member since 2024
Total bookings34
Last visityesterday
Lifetime value4 080 kr
Active membershipSubscription
LTV / bookings / last visit are bumped automatically on paid booking or membership for a known customer_id. Chain-level CRM across multiple sites lives in the chain domain — this is CRM-lite for one venue.