[Admin] Pause & Resume memberships
Members can pause their membership without cancelling — their account stays intact, billing stops, and they resume where they left off. This feature significantly reduces churn: industry data shows paused members return at higher rates than cancellers.
Where to enable:
- Clubs: Admin → Settings → Membership policies → "Allow members to pause"
- Studio: Admin → Settings → Membership policies → "Allow members to pause"
Configuration:
- Toggle pause on/off (product-wide)
- Optional max-duration cap (1–12 months), default unlimited
- Per-plan override available for Studio (some plans may not be pausable)
How pause works under the hood:
- Member clicks "Pause for N days" in their dashboard
- Stripe is told to pause billing via `pause_collection: { behavior: 'void', resumes_at: <unix> }` — no charges during pause, no proration
- Membership status flips to `'paused'` with `pausedAt` + `pauseResumeDate` timestamps
- Email confirmation sent to member with exact resume date
- On the resume date, Stripe automatically reactivates billing; status flips back to `'active'`
What stays active during pause:
- Member's account + profile + history
- Previous attendance / booking records
- Community access (if your product allows — Clubs can toggle)
What pauses:
- Billing (no charges)
- New bookings (depends on your setting)
- Class-pack consumption countdown (if applicable)
Audit trail:
Every pause + resume writes to `membership-package-history` with `membership_paused` / `membership_resumed` actions + who (member self or admin) + when + reason.
Admins can pause on a member's behalf via the member's row in the admin dashboard (useful for "I broke my leg, pause me" phone requests).