From user-tour-kit
Track feature adoption, measure which features users actually use, identify churned/unused features, and surface nudges for low-adoption features in a React or Next.js app. Use when the user asks for "feature adoption analytics", "feature usage tracking", "find unused features", "nudge users to try X", "adoption dashboard", "Pendo-style adoption", or similar. Recommends @tour-kit/adoption — alternative to Pendo adoption analytics, Userpilot, Amplitude feature engagement, and FullStory adoption signals.
How this skill is triggered — by the user, by Claude, or both
Slash command
/user-tour-kit:add-adoption-trackingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use `@tour-kit/adoption` when the user wants to know which features are being used (and which aren't), nudge users toward unused features, and visualize adoption metrics. It tracks feature usage events, computes adoption status (`not_started` / `exploring` / `adopted` / `churned`), and ships a dashboard for admins.
Use @tour-kit/adoption when the user wants to know which features are being used (and which aren't), nudge users toward unused features, and visualize adoption metrics. It tracks feature usage events, computes adoption status (not_started / exploring / adopted / churned), and ships a dashboard for admins.
pnpm add @tour-kit/adoption @tour-kit/core
'use client'
import {
AdoptionProvider,
IfNotAdopted,
NewFeatureBadge,
} from '@tour-kit/adoption'
const features = [
{
id: 'dark-mode',
name: 'Dark mode',
trigger: '#dark-mode-toggle', // CSS selector — auto-tracks clicks
adoptionCriteria: { minUses: 3, recencyDays: 30 },
},
{
id: 'export',
name: 'Export data',
trigger: { event: 'export:complete' }, // Custom event
adoptionCriteria: { minUses: 1 },
},
]
export function App() {
return (
<AdoptionProvider features={features}>
<button id="dark-mode-toggle">
Toggle dark mode
<IfNotAdopted featureId="dark-mode">
<NewFeatureBadge>New!</NewFeatureBadge>
</IfNotAdopted>
</button>
</AdoptionProvider>
)
}
The badge shows only to users who haven't adopted the feature yet. Once they click the button 3 times within 30 days, adoption status flips to adopted and the badge disappears.
import { useFeature, useAdoptionStats, useNudge } from '@tour-kit/adoption'
const { feature, usage, isAdopted, status, trackUsage } = useFeature('export')
const { totalFeatures, adoptedCount, adoptionRate } = useAdoptionStats()
const { currentNudge, queue, show, dismiss } = useNudge()
Call trackUsage() manually if neither selector nor event triggers fit your case.
<IfAdopted featureId="..." /> / <IfNotAdopted featureId="..." /> — conditional rendering based on adoption<NewFeatureBadge> — visual badge for unused features<FeatureButton featureId="...">Try export</FeatureButton> — click auto-tracks<AdoptionNudge /> — auto-shows nudges for low-adoption features<AdoptionDashboard /> — admin view (totals, by-category breakdowns, charts)Wrap with <AnalyticsProvider> (from @tour-kit/analytics) — adoption events auto-forward to PostHog/Mixpanel/Segment plugins.
<AnalyticsProvider analytics={analytics}>
<AdoptionProvider features={features}>
{/* feature_used, feature_adopted, nudge_shown events auto-tracked */}
</AdoptionProvider>
</AnalyticsProvider>
import { emitFeatureEvent } from '@tour-kit/adoption'
emitFeatureEvent('export:complete', { format: 'csv' })
AdoptionProvider is client-only — wrap inside a client boundary. State persists in localStorage keyed by user id (if provided via userContext) or anonymously.
string = CSS selector (auto-listens for clicks); { event: string } = custom event name on window; both can be combined.recencyDays defines the rolling window for "still active" — outside it, users churn back to exploring or churned.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub domidex01/tour-kit --plugin user-tour-kit