Logo

Click to Cancel

Self-service membership cancellation with retention offers and digital signatures

Overview

Click to Cancel is a self-service membership cancellation app that streamlines the member cancellation process for fitness clubs. It provides a guided 5-step cancellation wizard with built-in retention offers, eligibility validation, and digital signature capture.

Key Features

5-Step Cancellation Wizard

Step 1: Member Authentication & Details

  • Email-based OTP (6-digit code, 5-minute expiration)
  • Alternative password authentication
  • Auto-creates member record if not exists
  • Displays membership status and type
  • Validates eligibility (active membership, no pending requests)

Step 2: Choose Action & Reason

  • Select "Cancel Membership" or "Freeze Membership"
  • Choose from configured cancellation reasons
  • Dynamic fields per reason (text input, textarea)
  • Required/optional validation
  • Reason details stored as structured JSON

Step 3: Retention Offers

  • Display offers filtered by selected reason
  • Each offer shows label, description, and optional badge
  • Member can accept offer or select "No thanks, continue"
  • Offer selection tracked for retention analytics

Step 4: Digital Signature

  • Canvas-based signature capture
  • Displays terms and conditions
  • "I agree to terms" checkbox (required)
  • Signature stored as base64 data URL

Step 5: Confirmation

  • Review summary of request
  • Submit button changes status to "pending"
  • Success message with next steps
  • Confirmation email (future enhancement)

Configuration Management

Branding Settings:

  • Theme selection (from default themes)
  • Light/Dark mode toggle
  • Logo URL and height customization
  • Background image URL
  • Login page customization (heading, description)

Cancellation Reasons:

  • Add/edit/delete reasons
  • Unique name slug (e.g., "too_expensive")
  • Display label (e.g., "Too expensive")
  • Dynamic fields configuration (text, textarea, required)
  • Sortable order

Retention Offers:

  • Add/edit/delete offers
  • Offer type (discount, freeze, training)
  • Unique name slug
  • Display label and description
  • Optional badge text
  • Reason filters (show for specific reasons or all)
  • Sortable order

Member Management

CRUD Operations (Phase 1 Development Tool):

  • Create member records manually
  • Edit member details
  • Update membership status (active, inactive, none)
  • Update membership type (monthly, yearly)
  • Manage member balance
  • Delete member records

Phase 2 Plan: Replace with automatic sync from ABC Fitness/Club Ready

Cancellation Management

Dashboard Views:

  • Tabbed interface (All, Incomplete, Pending, Processed)
  • Color-coded status badges
  • Action badges (cancel/freeze)
  • Reason display
  • Selected offer tracking
  • Created date sorting
  • Pagination support

Status Management:

  • Edit modal to update status
  • Status progression: incomplete → pending → processed
  • Delete confirmation for removal
  • Processing notes (admin only)

Detail View:

  • Member information
  • Cancellation reason and details
  • Dynamic field responses
  • Selected offer
  • Signature preview
  • Terms agreement status
  • Processing notes and timestamp

Database Models

Core Models

model Ctc_Member {
  id                  String   @id @default(cuid())
  tenantId            String
  appId               String
  locationId          String   // Soft FK to Location
  email               String
  firstName           String
  lastName            String
  membershipStatus    String   // "active" | "inactive" | "none"
  membershipType      String?  // "monthly" | "yearly"
  membershipCreatedAt DateTime?
  balance             Decimal  @default(0.00)
  cancellations       Ctc_Cancellation[]

  @@unique([tenantId, locationId, email])
}

model Ctc_Cancellation {
  id                String    @id @default(cuid())
  tenantId          String
  appId             String
  memberId          String
  locationId        String    // Denormalized for querying
  status            String    // "incomplete" | "pending" | "processed"
  action            String?   // "cancel" | "freeze"
  currentStep       String    @default("1")
  reason            String?
  reasonDetails     String?   // JSON
  dynamicFields     String?   // JSON: Record<string, string>
  selectedOffer     String?
  signature         String?   // base64 data URL
  agreedToTerms     Boolean   @default(false)
  processedAt       DateTime?
  processedByUserId String?
  processingNotes   String?
}

model Ctc_OTP {
  id        String   @id @default(cuid())
  tenantId  String
  email     String
  locationId String
  code      String   // 6-digit code
  expiresAt DateTime // 5 minutes from creation
  verified  Boolean  @default(false)
}

Routes

Admin Routes

  • /app/{tenant}/apps/click-to-cancel - Cancellation dashboard
  • /app/{tenant}/apps/click-to-cancel/settings - Branding and configuration
  • /app/{tenant}/apps/click-to-cancel/settings/members - Member management

API Endpoints

  • GET /api/app/click-to-cancel/info - Get app config
  • POST /api/app/click-to-cancel/auth/request-otp - Generate OTP
  • POST /api/app/click-to-cancel/auth/verify-otp - Verify OTP and authenticate
  • POST /api/app/click-to-cancel/auth/verify-password - Password authentication
  • POST /api/app/click-to-cancel/cancellation/save-step - Save wizard step data
  • GET /api/app/click-to-cancel/user/current - Get current user info

User Personas

1. Member (External User)

Access: Public-facing cancellation portal

Workflow:

  1. Visit cancellation portal URL
  2. Select location
  3. Authenticate via OTP or password
  4. System validates eligibility
  5. Choose cancel or freeze
  6. Select reason and provide details
  7. Review retention offers
  8. Accept offer or decline
  9. Review terms and sign digitally
  10. Submit request
  11. Receive confirmation

2. Front Desk Staff

Access: Click to Cancel dashboard in Blend app

Workflow:

  1. Log into Blend app
  2. Navigate to Click to Cancel
  3. View list of pending cancellations
  4. Filter by status
  5. Review cancellation details
  6. Process in ABC Fitness/Club Ready
  7. Mark request as "processed"

3. Administrator

Access: Full admin access

Workflow:

  1. Configure branding (logo, theme, background)
  2. Set up cancellation reasons with custom fields
  3. Create retention offers with reason filters
  4. Manage member database (Phase 1 manual)
  5. Monitor cancellation trends
  6. Export reports

Configuration

Installation

  1. Navigate to Apps section
  2. Select "Click to Cancel"
  3. Configure branding and settings
  4. Set up cancellation reasons
  5. Create retention offers
  6. Deploy external portal

External Portal Integration

Technology Stack:

  • Nuxt 3 (Vue.js framework)
  • Tailwind CSS for styling
  • Canvas API for signature capture
  • Fetch API for REST calls

Environment Variables:

API_URL=https://blendx.ai
API_KEY=your-tenant-api-key
SESSION_SECRET=your-session-secret
USE_MOCK_API=false

Key Business Rules

  1. Location Isolation: Members belong to specific locations
  2. Eligibility Validation: Only active members without pending requests can submit
  3. One Active Cancellation: Members can only have one pending/incomplete at a time
  4. OTP Expiration: OTP codes expire after 5 minutes
  5. One-Time Use: OTP codes can only be verified once
  6. Auto-Member Creation: Members auto-created during OTP verification if not exists
  7. Signature Required: Step 4 requires both signature and terms agreement
  8. Reason Filtering: Offers shown for all reasons or filtered to specific reasons
  9. Status Progression: incomplete → pending → processed

Security Considerations

Authentication

  • 6-digit random OTP codes with 5-minute expiration
  • One-time use codes (marked verified after use)
  • Email validation before OTP generation
  • Password hashing with bcrypt

Authorization

  • API Key required for all endpoints
  • Tenant isolation for all queries
  • Location context for member operations
  • Admin-only actions for status updates

Data Privacy

  • Personal data encrypted
  • Signature storage as base64 data URLs
  • GDPR compliance support
  • Audit trail with timestamps

Implementation Phases

Phase 1: Core Cancellation Flow ✅ COMPLETED

  • Database schema
  • Configuration UI (branding, reasons, offers)
  • Member management CRUD
  • Cancellation dashboard
  • API endpoints for external portal
  • OTP and password authentication
  • Wizard state persistence
  • Eligibility validation
  • Digital signature capture

Phase 2: MMS Integration ⏳ PLANNED

  • ABC Fitness API integration
  • Club Ready API integration
  • Member sync service (periodic/webhook)
  • Membership status sync
  • Balance sync
  • Auto-create members on first cancellation
  • Read-only member data in admin UI

Phase 3: Enhanced Features ⏳ PLANNED

  • Email notifications (OTP, confirmation, status updates)
  • SMS OTP as alternative to email
  • Cancellation analytics dashboard
  • Retention offer analytics
  • Reason trending reports
  • Export to CSV/Excel
  • Bulk processing actions
  • Staff notes and comments

Troubleshooting

OTP Not Received

  • Check spam/junk folder
  • Verify email address is correct
  • Configure SMTP settings
  • Use password authentication as alternative

Eligibility Block

  • Verify membership is active in MMS
  • Check for existing pending cancellation
  • Resolve balance issues first
  • Wait until minimum term period expires

Signature Not Saving

  • Refresh page and try again
  • Re-authenticate with OTP
  • Check network connection
  • Try different browser

Success Metrics

Adoption

  • Members using self-service: Target 60%
  • Average completion time: Target < 5 minutes
  • Incomplete rate: Target < 20%
  • Staff processing time saved: Target 50% reduction

Retention

  • Offer acceptance rate: Target 25%
  • Freeze instead of cancel: Target 15%
  • Successful win-backs: Target 10% return within 6 months

Operational

  • Average time to process: Target < 24 hours
  • Cancellation processing accuracy: > 98%
  • Member satisfaction score: Target 4.5/5
  • Staff satisfaction score: Target 4.5/5

We respect your privacy.

TLDR: We use cookies for language selection, theme, and analytics. Learn more.