Recurring maintenance plans, tiered pricing, service packages, and subscriber management.
Dashboard with plan cards, stats grid, tier info, and active/inactive toggles.
useQuery(api.memberships.getDashboard)
Empty state with clear CTA to create first membership plan.
Step 1: Plan name, description, category. Template presets auto-fill fields.
Step 2: Tiered pricing with monthly/quarterly/annual. Max 3 tiers. Recommended flag.
Step 3: Per-tier services with frequency, benefits list, and emergency response time.
Step 4: Final review with plan summary, tier pricing, and publish settings.
useMutation(api.memberships.createTemplate)
Edit existing plan: read-only tiers, toggle settings, view stats, delete.
useMutation(api.memberships.updateTemplate)
Destructive delete confirmation dialog. Plans with active subscribers cannot be deleted.
useMutation(api.memberships.deleteTemplate)
Service tracking with date grouping, status filters, and complete/reschedule actions.
useQuery(api.memberships.getServices)
Reschedule bottom sheet with date picker constrained to current billing period.
useMutation(api.memberships.rescheduleService)
Empty state when no membership services are scheduled.
EmptyState component
Per-plan subscriber list with search, status filters, and renewal tracking.
useQuery(api.memberships.getSubscribers)
Empty state for new plans with zero subscribers.
EmptyState component
Schema tables, queries, mutations, and flows that power Membership Management.