Skip to content
customer-support-builder logo

Customer Support Builder

customer-support-builder

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

Full skill instructions

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

Recommended Stack

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

More skills from majiayu000

xiaohongshu logo
majiayu000/claude-arsenal

xiaohongshu

xiaohongshu

286 148
View
agent-task-conductor logo
majiayu000/claude-skill-registry

agent-task-conductor

Conduct multi-agent task orchestration and workflow coordination.

663 1
View
conductor-setup logo
majiayu000/claude-skill-registry

conductor-setup

Initialize project with Conductor artifacts (product definition,

663 1
View
animation-designer logo
majiayu000/claude-skill-registry

animation-designer

Expert in web animations, transitions, and motion design using Framer Motion and CSS

663 1
View
diagramming logo
majiayu000/claude-skill-registry

diagramming

Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...

663 1
View
h3-pg logo
majiayu000/claude-skill-registry-data

h3-pg

PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.

23 1
View
conductor-development logo
majiayu000/claude-skill-registry

conductor-development

Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...

663 1
View
conductor-status logo
majiayu000/claude-skill-registry

conductor-status

Display project status, active tracks, and next actions

663 1
View
dockerization logo
majiayu000/claude-skill-registry

dockerization

Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.

663 1
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View