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)
| Customer | Kind | Status | Price / validity | Renewal | Punches | |
|---|---|---|---|---|---|---|
| Anna Lind | subscription | Active | 299 kr/month | Renews 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 kr | 2026-05-01 – 2026-09-30 | — | renew · end |
| Leo Ström | subscription | Ended | 299 kr/month | Ended 2026-06-15 | — | renew · end |
| Nora Ek | punch_card | Depleted | 10-punch | — | 0 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)
| Date | Customer | Event | Δ punches | Amount | payment_id |
|---|---|---|---|---|---|
| 2026-07-01 | Anna Lind | renewed | — | 299 kr | pay_9f2… |
| 2026-06-28 | Jonas Berg | punch_used | −1 | — | — |
| 2026-06-20 | Jonas Berg | purchased | +10 | 750 kr | pay_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
| Guest | Identity | Bookings | Last visit | Lifetime value (LTV) | Favourite court | |
|---|---|---|---|---|---|---|
| Anna Lind | account | 34 | yesterday | 4 080 kr | Centre | open guest card |
| Jonas Berg | account | 18 | 2026-06-28 | 1 560 kr | Court 2 | open guest card |
| +46 70 …45 67 | walk-in (guest_key) | 5 | 2026-06-15 | 600 kr | — | open guest card |
| Karin Sjö | account | 27 | 2026-06-30 | 3 200 kr | Court 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.