Memberships sell PERKS — not visits. Common shape: a contractor advertises a 'Care Club' or 'Maintenance Plan' that customers pay monthly or annually for ongoing benefits like discounts on repairs, included tune-ups, priority booking, or waived after-hours fees. Different from recurring contracts (which schedule actual visits) — memberships are about loyalty + recurring revenue layered on top of one-off jobs.
How it differs from recurring contracts
| Recurring contracts | Schedule visits on a cadence. Cron auto-creates the appointments. The customer pays per-visit or via subscription — but the visits themselves drive the value. |
| Memberships | Sell perks. The customer pays a monthly/annual fee for benefits applied at quote/invoice time. No visits scheduled by the membership itself. |
Setting up a plan
- 1Go to /portal/memberships and click 'New plan'
You can have multiple plans — a tiered structure (Bronze/Silver/Gold) is common.
- 2Name + price + billing cycle
Pick monthly or annual. Most shops do both — a small monthly plan ($19/mo) AND an annual prepay tier ($199/yr) that costs less per month for the customer's commitment.
- 3Pick perks
Any combination: % off repairs, % off services, included visits per period, no after-hours fees, priority booking, free estimates, extra warranty days.
- 4Optional: seat cap
Some shops cap membership size to avoid being overrun on free included visits. Leave blank for unlimited.
- 5Save
The plan is now available to enroll customers in. Existing customer detail pages get a 'Memberships' section with an Enroll button.
Enrolling a customer
Open any customer's detail page (/portal/customers/[id]). The Memberships section shows their current enrollments and an Enroll button when there are active plans they're not yet in. Pick the plan, pick a start date (default today). Period runs 1 month or 1 year from start, depending on plan billing cycle.
What gets applied automatically
- Quote pages render an extra discount line: 'Care Club member discount (10% off)'. Customers see the post-discount total when they review the estimate.
- Tax recomputes on the post-discount subtotal — sales tax is on what the customer actually pays, not the sticker price.
- Customer's /me/[token] portal page shows an 'Active membership' card with their perks + period dates.
- Public quote page shows the perk summary so customers see the full value beyond just the dollar discount.
v1 limitation: manual collection
v1 ships with manual collection only — you bill the membership fee yourself, separate from quotes/invoices, or include it as a line item on the customer's recurring contract invoice. Stripe-billed autopay subscriptions for memberships are coming in a follow-up release.
Cancelling, pausing, archiving
- Cancel an enrollment → customer's perks stop applying immediately. The membership row stays for history.
- Archive a plan (Memberships row → ⋯ → Archive plan) → no new enrollments allowed but existing members keep their perks until their period ends.
- Pause vs Cancel: pause is for short holds (snowbird leaving for the winter); cancel is permanent. The status difference affects whether the row holds the unique-index slot.
Most contractors price the membership at break-even on a single included tune-up — the loyalty + discount stickiness is the real win, not the membership fee revenue itself. A $19/mo Care Club that includes a $99 tune-up twice a year is a wash on direct economics, but it pulls customers back to you for everything else they need.