daffy0208

customer-support-builder

7
6
# Install this skill:
npx skills add daffy0208/ai-dev-standards --skill "customer-support-builder"

Install specific skill from multi-skill repository

# Description

Build scalable customer support systems including help centers, chatbots, ticketing systems, and self-service knowledge bases. Use when designing support infrastructure, reducing support load, improving customer satisfaction, or scaling support without linear hiring.

# SKILL.md


name: customer-support-builder
description: Build scalable customer support systems including help centers, chatbots, ticketing systems, and self-service knowledge bases. Use when designing support infrastructure, reducing support load, improving customer satisfaction, or scaling support without linear hiring.
license: Complete terms in LICENSE.txt


Customer Support Builder

Build scalable customer support systems that grow with your product without requiring linear hiring increases.

Core Principle

Support should scale sub-linearly with users. As you grow from 100 to 10,000 users, support volume shouldn't increase 100x. Good self-service systems can keep support needs growing at only 10-20x while user base grows 100x.

Support Maturity Model

Stage 1: Founder-Led (0-100 users)

  • Founders answer every question personally
  • Learn what users actually struggle with
  • Document FAQs manually
  • Key Metric: Response time < 2 hours

Stage 2: Documented (100-1,000 users)

  • Comprehensive knowledge base
  • Email support with templates
  • Basic FAQ section
  • Key Metric: 30% self-service rate

Stage 3: Self-Service (1,000-10,000 users)

  • Searchable help center
  • Contextual in-app help
  • Automated responses for common issues
  • Key Metric: 60% self-service rate

Stage 4: Scaled (10,000+ users)

  • AI-powered chatbots
  • Community forums
  • Video tutorials
  • Proactive support (detect issues before tickets)
  • Key Metric: 80% self-service rate

Knowledge Base Architecture

Content Structure

Help Center
├── Getting Started
│   ├── Quick Start Guide (< 5 min)
│   ├── Account Setup
│   └── First Steps Tutorial
├── Core Features
│   ├── Feature A Guide
│   ├── Feature B Guide
│   └── Feature C Guide
├── Troubleshooting
│   ├── Common Errors
│   ├── Performance Issues
│   └── Integration Problems
├── Account & Billing
│   ├── Pricing Plans
│   ├── Billing Issues
│   └── Account Management
└── API & Integrations
    ├── API Documentation
    ├── Webhooks
    └── Integration Guides

Article Template

# [Clear, Searchable Title]

**Time to complete**: 3 minutes
**Difficulty**: Beginner/Intermediate/Advanced

## Problem

One-sentence description of what this solves.

## Solution

Step-by-step instructions with screenshots.

1. **Step 1**: Clear action
   - Screenshot/GIF
   - Expected result

2. **Step 2**: Next action
   - Screenshot/GIF
   - Expected result

## Troubleshooting

- Problem: X → Solution: Y
- Problem: A → Solution: B

## Related Articles

- [Article 1](#)
- [Article 2](#)

Support Channels

Email Support

Setup:

Primary: [email protected]
Routing:
  - [email protected] → Billing team
  - [email protected] → Engineering
  - [email protected] → General inquiries
SLA:
  - Critical: 2 hours
  - High: 8 hours
  - Normal: 24 hours
  - Low: 48 hours

Email Templates:

# Welcome Email

Subject: Welcome to [Product]! Here's how to get started

Hi [Name],

Welcome! Here's what to do first:

1. Complete setup: [Link]
2. Try this tutorial: [Link]
3. Join our community: [Link]

Need help? Reply to this email or check our help center: [Link]

[Your Name]
# Issue Resolved

Subject: [Ticket #123] Resolved - [Issue Title]

Hi [Name],

Good news! Your issue is resolved.

**What we did**:
[Clear explanation]

**What you should see**:
[Expected result]

**If the problem returns**:
[Troubleshooting steps]

Was this helpful? [Yes] [No]

[Your Name]

Chat Support

In-App Chat Widget:

// Intercom, Drift, Crisp example
<script>
window.intercomSettings = {
  app_id: "YOUR_APP_ID",
  // Custom attributes
  email: user.email,
  user_id: user.id,
  created_at: user.createdAt,
  plan: user.plan,
  // Show relevant help articles
  help_center: {
    search_enabled: true
  }
};
</script>

Chat SLA:

  • Business hours: 5-minute response
  • After hours: Email auto-response
  • Expected resolution: 1-3 messages

Chatbot (AI-Powered)

Decision Tree:

User message →
  ├── Can answer with KB article? → Send article
  ├── Simple factual question? → AI answers
  ├── Complex issue? → Route to human
  └── Angry/escalated? → Priority human routing

Implementation:

def handle_support_message(message, user_context):
    # 1. Search knowledge base
    kb_results = search_kb(message, top_k=3)

    if kb_results[0].score > 0.85:
        return {
            'type': 'article',
            'article': kb_results[0],
            'confidence': 'high'
        }

    # 2. Try AI response with context
    ai_response = generate_response(
        message=message,
        kb_context=kb_results,
        user_history=user_context
    )

    if ai_response.confidence > 0.8:
        return {
            'type': 'ai_response',
            'response': ai_response.text,
            'sources': kb_results
        }

    # 3. Route to human
    return {
        'type': 'human_handoff',
        'priority': calculate_priority(message, user_context),
        'suggested_agent': route_to_specialist(message)
    }

Ticket Management

Ticketing System Schema

interface Ticket {
  id: string
  status: 'new' | 'open' | 'pending' | 'resolved' | 'closed'
  priority: 'low' | 'normal' | 'high' | 'critical'
  category: string // 'billing', 'technical', 'feature', etc.
  subject: string
  description: string
  requester: User
  assignee?: Agent
  tags: string[]
  created_at: Date
  updated_at: Date
  resolved_at?: Date
  first_response_at?: Date
  satisfaction_rating?: 1 | 2 | 3 | 4 | 5
}

Auto-Routing Rules

Routing Rules:
  - Condition: subject contains "billing" OR "payment"
    Action: Assign to billing-team
    Priority: high

  - Condition: user.plan == "enterprise"
    Action: Assign to enterprise-team
    Priority: high
    SLA: 2 hours

  - Condition: subject contains "API" OR "webhook"
    Action: Assign to engineering
    Tag: 'api-issue'

  - Condition: sentiment == "angry"
    Action: Priority routing
    Priority: critical
    Notify: support-manager

Ticket Lifecycle

New → Open → Pending → Resolved → Closed
       ↓              ↑
       ← Reopen ←

Status Definitions:

  • New: Just created, not yet viewed
  • Open: Agent working on it
  • Pending: Waiting for customer response
  • Resolved: Solution provided, awaiting confirmation
  • Closed: Issue confirmed resolved or auto-closed after 7 days

Self-Service Tools

Interactive Troubleshooters

// Example: Connection troubleshooter
const troubleshooter = {
  start: {
    question: 'What problem are you experiencing?',
    options: [
      { text: "Can't connect", next: 'check_connection' },
      { text: 'Slow performance', next: 'check_performance' },
      { text: 'Error message', next: 'check_error' }
    ]
  },
  check_connection: {
    question: 'Can you access our website?',
    options: [
      { text: 'Yes', next: 'browser_check' },
      { text: 'No', action: 'show_status_page' }
    ]
  },
  browser_check: {
    question: 'Clear your browser cache and try again.',
    options: [
      { text: 'It worked!', action: 'problem_solved' },
      { text: 'Still not working', action: 'contact_support' }
    ]
  }
}

In-App Guidance

// Contextual help tooltips
const helpTooltips = {
  '/dashboard': {
    first_visit: {
      title: 'Welcome to your dashboard!',
      steps: [
        '1. View your key metrics here',
        "2. Click 'Add Widget' to customize",
        '3. Need help? Click the ? icon'
      ]
    }
  },
  '/settings/billing': {
    always_show: {
      payment_methods: 'We accept Visa, Mastercard, and AmEx',
      billing_cycle: 'Changes take effect next billing cycle'
    }
  }
}

Support Metrics

Key Metrics to Track

interface SupportMetrics {
  // Response metrics
  first_response_time: {
    p50: number // median
    p90: number // 90th percentile
    p99: number
  }

  // Resolution metrics
  avg_resolution_time: number
  tickets_resolved_first_contact: number

  // Volume metrics
  tickets_created_today: number
  tickets_open: number
  tickets_overdue: number

  // Quality metrics
  customer_satisfaction_score: number // 1-5
  net_promoter_score: number // -100 to 100

  // Efficiency metrics
  self_service_rate: number // % resolved without ticket
  deflection_rate: number // % answered by KB/bot
  cost_per_ticket: number
}

Target Benchmarks

Excellent Support:
  first_response_time_p90: '< 2 hours'
  resolution_time_avg: '< 24 hours'
  self_service_rate: '> 70%'
  csat: '> 4.5/5'
  nps: '> 50'

Good Support:
  first_response_time_p90: '< 4 hours'
  resolution_time_avg: '< 48 hours'
  self_service_rate: '> 50%'
  csat: '> 4.0/5'
  nps: '> 30'

Scaling Strategy

Support Team Structure

Support Organization (at scale):

Support Manager (1)
├── Knowledge Base Lead (1)
│   └── Technical Writers (2-3)
├── Chat Support (Tier 1) (5-10)
│   ├── Handle 80% of issues
│   └── Escalate complex cases
├── Email Support (Tier 2) (3-5)
│   ├── Handle escalations
│   └── Complex troubleshooting
└── Specialist Support (Tier 3) (2-3)
    ├── API/Technical issues
    └── Enterprise customers

When to Hire Support Staff

Rule of Thumb:

  • 0-500 users: Founders handle it
  • 500-2,000 users: 1 support person
  • 2,000-5,000 users: 2-3 support people
  • 5,000-20,000 users: 5-8 support people
  • 20,000+ users: Build a team

Better metric: Support load

  • Hire when: > 50 tickets/day or > 10 concurrent chats
  • Each agent can handle: ~30-40 tickets/day or 8-10 chats/day

Tools & Software

Ticketing: Zendesk, Intercom, Help Scout, Freshdesk
Knowledge Base: GitBook, Notion, Confluence, Document360
Chat: Intercom, Drift, Crisp
Chatbot AI: OpenAI, Anthropic Claude, Dialogflow
Community: Discourse, Circle, Slack/Discord
Analytics: Mixpanel, Amplitude (for in-app behavior)

Integration Example

// Unified support API
class SupportSystem {
  async createTicket(data) {
    const ticket = await zendesk.createTicket(data)
    await analytics.track('support_ticket_created', {
      ticket_id: ticket.id,
      category: data.category,
      user_id: data.user_id
    })
    return ticket
  }

  async trackKBArticleView(article_id, user_id) {
    await analytics.track('kb_article_viewed', {
      article_id,
      user_id
    })

    // If user doesn't create ticket after viewing,
    // article was helpful (deflection)
  }
}

Proactive Support

Detect Issues Before Tickets

// Monitor for patterns
async function detectPotentialIssues() {
  // Error spike detection
  const errorRate = await getErrorRate('last_hour')
  if (errorRate > 2 * avgErrorRate) {
    await notifySupport('Error spike detected')
    await displayStatusMessage("We're investigating an issue...")
  }

  // User struggle detection
  const strugglingUsers = await detectStrugglingUsers({
    criteria: ['repeated_failed_actions', 'long_time_on_page', 'back_and_forth_clicks']
  })

  if (strugglingUsers.length > 0) {
    await offerProactiveHelp(strugglingUsers)
  }
}

Health Score Monitoring

interface CustomerHealth {
  user_id: string
  health_score: number // 0-100
  signals: {
    usage_frequency: 'increasing' | 'stable' | 'declining'
    feature_adoption: number
    support_tickets_recent: number
    last_login: Date
    payment_status: 'current' | 'overdue'
  }
}

// Reach out proactively when health score drops
if (customer.health_score < 40) {
  await sendProactiveOutreach({
    type: 'check_in',
    message: "Haven't seen you in a while. Need help with anything?"
  })
}

Quick Start Checklist

Week 1: Foundation

  • [ ] Set up support email (support@)
  • [ ] Create basic FAQ (top 10 questions)
  • [ ] Install chat widget
  • [ ] Document known issues

Week 2-3: Knowledge Base

  • [ ] Choose KB platform
  • [ ] Create getting started guide
  • [ ] Document all features
  • [ ] Add screenshots/GIFs
  • [ ] Create troubleshooting section

Week 4: Automation

  • [ ] Set up auto-responders
  • [ ] Create email templates
  • [ ] Configure routing rules
  • [ ] Add chatbot (basic)

Ongoing

  • [ ] Review ticket themes weekly
  • [ ] Update KB based on common questions
  • [ ] Track self-service rate
  • [ ] Survey customer satisfaction
  • [ ] Optimize response times

Common Pitfalls

Building KB before having users: Write docs based on actual questions, not assumptions
Over-automating too early: Humans learn patterns; automate after seeing 50+ tickets on same topic
Poor search: If users can't find answers, they'll submit tickets
No feedback loop: Track which articles users view before submitting tickets
Ignoring mobile: 40% of users will access support on mobile

Success Criteria

You have great support when:

  • ✅ 70%+ of users find answers without contacting support
  • ✅ First response time < 2 hours during business hours
  • ✅ Customer satisfaction > 4.5/5
  • ✅ Support costs grow slower than user base
  • ✅ Support team can focus on complex issues, not repetitive questions

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.