{"id":"46df40c2-5438-4236-baa5-55b82cef601a","shortId":"QHKm28","kind":"skill","title":"segment-cdp","tagline":"Expert patterns for Segment Customer Data Platform including","description":"# Segment CDP\n\nExpert patterns for Segment Customer Data Platform including Analytics.js,\nserver-side tracking, tracking plans with Protocols, identity resolution,\ndestinations configuration, and data governance best practices.\n\n## Patterns\n\n### Analytics.js Browser Integration\n\nClient-side tracking with Analytics.js. Include track, identify, page,\nand group calls. Anonymous ID persists until identify merges with user.\n\n// Next.js - Analytics provider component\n// lib/segment.ts\nimport { AnalyticsBrowser } from '@segment/analytics-next';\n\nexport const analytics = AnalyticsBrowser.load({\n  writeKey: process.env.NEXT_PUBLIC_SEGMENT_WRITE_KEY!,\n});\n\n// Typed event helpers\nexport interface UserTraits {\n  email?: string;\n  name?: string;\n  plan?: 'free' | 'pro' | 'enterprise';\n  createdAt?: string;\n  company?: {\n    id: string;\n    name: string;\n  };\n}\n\nexport function identify(userId: string, traits?: UserTraits) {\n  analytics.identify(userId, traits);\n}\n\nexport function track<T extends Record<string, any>>(\n  event: string,\n  properties?: T\n) {\n  analytics.track(event, properties);\n}\n\nexport function page(name?: string, properties?: Record<string, any>) {\n  analytics.page(name, properties);\n}\n\nexport function group(groupId: string, traits?: Record<string, any>) {\n  analytics.group(groupId, traits);\n}\n\n// React hook for analytics\n// hooks/useAnalytics.ts\nimport { useEffect } from 'react';\nimport { usePathname, useSearchParams } from 'next/navigation';\nimport { analytics, page } from '@/lib/segment';\n\nexport function usePageTracking() {\n  const pathname = usePathname();\n  const searchParams = useSearchParams();\n\n  useEffect(() => {\n    // Track page view on route change\n    page(pathname, {\n      path: pathname,\n      search: searchParams.toString(),\n      url: window.location.href,\n      title: document.title,\n    });\n  }, [pathname, searchParams]);\n}\n\n// Usage in _app.tsx or layout.tsx\nfunction RootLayout({ children }) {\n  usePageTracking();\n\n  return <html>{children}</html>;\n}\n\n// Event tracking in components\nfunction PricingButton({ plan }: { plan: string }) {\n  const handleClick = () => {\n    track('Plan Selected', {\n      plan_name: plan,\n      page: 'pricing',\n      source: 'pricing_page',\n    });\n  };\n\n  return <button onClick={handleClick}>Select {plan}</button>;\n}\n\n// Identify on auth\nfunction onUserLogin(user: User) {\n  identify(user.id, {\n    email: user.email,\n    name: user.name,\n    plan: user.plan,\n    createdAt: user.createdAt,\n  });\n\n  track('User Signed In', {\n    method: 'email',\n  });\n}\n\n### Context\n\n- browser tracking\n- website analytics\n- client-side events\n\n### Server-Side Tracking with Node.js\n\nHigh-performance server-side tracking using @segment/analytics-node.\nNon-blocking with internal batching. Essential for backend events,\nwebhooks, and sensitive data.\n\n// lib/segment-server.ts\nimport { Analytics } from '@segment/analytics-node';\n\n// Initialize once\nconst analytics = new Analytics({\n  writeKey: process.env.SEGMENT_WRITE_KEY!,\n  flushAt: 20,      // Batch size before flush\n  flushInterval: 10000,  // Flush every 10 seconds\n});\n\n// Typed server-side tracking\nexport interface ServerContext {\n  ip?: string;\n  userAgent?: string;\n  locale?: string;\n}\n\nexport function serverIdentify(\n  userId: string,\n  traits: Record<string, any>,\n  context?: ServerContext\n) {\n  analytics.identify({\n    userId,\n    traits,\n    context: {\n      ip: context?.ip,\n      userAgent: context?.userAgent,\n      locale: context?.locale,\n    },\n  });\n}\n\nexport function serverTrack(\n  userId: string,\n  event: string,\n  properties?: Record<string, any>,\n  context?: ServerContext\n) {\n  analytics.track({\n    userId,\n    event,\n    properties,\n    timestamp: new Date(),\n    context: {\n      ip: context?.ip,\n      userAgent: context?.userAgent,\n    },\n  });\n}\n\n// Flush on shutdown\nexport async function closeAnalytics() {\n  await analytics.closeAndFlush();\n}\n\n// Usage in API routes\n// app/api/webhooks/stripe/route.ts\nexport async function POST(req: Request) {\n  const event = await req.json();\n\n  switch (event.type) {\n    case 'checkout.session.completed':\n      const session = event.data.object;\n\n      serverTrack(\n        session.client_reference_id,\n        'Order Completed',\n        {\n          order_id: session.id,\n          total: session.amount_total / 100,\n          currency: session.currency,\n          payment_method: session.payment_method_types[0],\n        },\n        { ip: req.headers.get('x-forwarded-for') || undefined }\n      );\n\n      // Also update user traits\n      serverIdentify(session.client_reference_id, {\n        total_spent: session.amount_total / 100,\n        last_purchase_date: new Date().toISOString(),\n      });\n      break;\n\n    case 'customer.subscription.created':\n      serverTrack(\n        event.data.object.metadata.user_id,\n        'Subscription Started',\n        {\n          plan: event.data.object.items.data[0].price.nickname,\n          amount: event.data.object.items.data[0].price.unit_amount / 100,\n          interval: event.data.object.items.data[0].price.recurring.interval,\n        }\n      );\n      break;\n  }\n\n  return new Response('ok');\n}\n\n// Graceful shutdown\nprocess.on('SIGTERM', async () => {\n  await closeAnalytics();\n  process.exit(0);\n});\n\n### Context\n\n- server-side tracking\n- backend events\n- webhook processing\n\n### Tracking Plan Design\n\nDesign event schemas using Object + Action naming convention.\nDefine required properties, types, and validation rules.\nConnect to Protocols for enforcement.\n\n// Tracking plan definition (conceptual YAML structure)\n// This maps to Segment Protocols configuration\n/*\ntracking_plan:\n  display_name: \"MyApp Tracking Plan\"\n  rules:\n    events:\n      - name: \"User Signed Up\"\n        description: \"User completed registration\"\n        rules:\n          required:\n            - signup_method\n          properties:\n            signup_method:\n              type: string\n              enum: [email, google, github]\n            referral_code:\n              type: string\n            utm_source:\n              type: string\n\n      - name: \"Product Viewed\"\n        description: \"User viewed a product page\"\n        rules:\n          required:\n            - product_id\n            - product_name\n          properties:\n            product_id:\n              type: string\n            product_name:\n              type: string\n            category:\n              type: string\n            price:\n              type: number\n            currency:\n              type: string\n              default: USD\n\n      - name: \"Order Completed\"\n        description: \"User completed a purchase\"\n        rules:\n          required:\n            - order_id\n            - total\n            - products\n          properties:\n            order_id:\n              type: string\n            total:\n              type: number\n            currency:\n              type: string\n            products:\n              type: array\n              items:\n                type: object\n                properties:\n                  product_id: { type: string }\n                  name: { type: string }\n                  price: { type: number }\n                  quantity: { type: integer }\n\n    identify:\n      traits:\n        - name: email\n          type: string\n          required: true\n        - name: name\n          type: string\n        - name: plan\n          type: string\n          enum: [free, pro, enterprise]\n        - name: company\n          type: object\n          properties:\n            id: { type: string }\n            name: { type: string }\n*/\n\n// TypeScript implementation with type safety\n// types/segment-events.ts\nexport interface TrackingEvents {\n  'User Signed Up': {\n    signup_method: 'email' | 'google' | 'github';\n    referral_code?: string;\n    utm_source?: string;\n  };\n\n  'Product Viewed': {\n    product_id: string;\n    product_name: string;\n    category?: string;\n    price?: number;\n    currency?: string;\n  };\n\n  'Order Completed': {\n    order_id: string;\n    total: number;\n    currency?: string;\n    products: Array<{\n      product_id: string;\n      name: string;\n      price: number;\n      quantity: number;\n    }>;\n  };\n\n  'Feature Used': {\n    feature_name: string;\n    usage_count?: number;\n  };\n}\n\n// Type-safe track function\nexport function trackEvent<T extends keyof TrackingEvents>(\n  event: T,\n  properties: TrackingEvents[T]\n) {\n  analytics.track(event, properties);\n}\n\n// Usage - compile-time type checking\ntrackEvent('Order Completed', {\n  order_id: 'ord_123',\n  total: 99.99,\n  products: [\n    { product_id: 'prod_1', name: 'Widget', price: 49.99, quantity: 2 },\n  ],\n});\n\n// This would be a TypeScript error:\n// trackEvent('Order Completed', { total: 99.99 });  // Missing order_id\n\n### Context\n\n- tracking plan\n- data governance\n- event schema\n\n### Identity Resolution\n\nTrack anonymous users, then merge with identified users via identify().\nUse alias() for identity merging between systems. Group users into\ncompanies/organizations.\n\n// Identity flow implementation\n// lib/identity.ts\n\n// Anonymous user tracking\nexport function trackAnonymousAction(event: string, properties?: object) {\n  // Analytics.js automatically generates anonymousId\n  analytics.track(event, properties);\n}\n\n// When user signs up or logs in\nexport async function identifyUser(user: {\n  id: string;\n  email: string;\n  name?: string;\n  plan?: string;\n}) {\n  // This merges anonymous history with user profile\n  await analytics.identify(user.id, {\n    email: user.email,\n    name: user.name,\n    plan: user.plan,\n    created_at: new Date().toISOString(),\n  });\n\n  // Track the identification event\n  analytics.track('User Identified', {\n    method: 'signup',\n  });\n}\n\n// B2B: Associate user with company\nexport function associateWithCompany(company: {\n  id: string;\n  name: string;\n  plan?: string;\n  employees?: number;\n  industry?: string;\n}) {\n  analytics.group(company.id, {\n    name: company.name,\n    plan: company.plan,\n    employees: company.employees,\n    industry: company.industry,\n  });\n}\n\n// Alias: Link identities (e.g., pre-signup email to user ID)\nexport function linkIdentities(previousId: string, newUserId: string) {\n  // Use when you identified someone with a temporary ID\n  // and now have their permanent user ID\n  analytics.alias(newUserId, previousId);\n}\n\n// Full signup flow\nexport async function handleSignup(\n  email: string,\n  password: string,\n  company?: { name: string; size: string }\n) {\n  // 1. Create user in your system\n  const user = await createUser(email, password);\n\n  // 2. Identify with Segment (merges anonymous history)\n  await identifyUser({\n    id: user.id,\n    email: user.email,\n    name: user.name,\n    plan: 'free',\n  });\n\n  // 3. Track signup event\n  analytics.track('User Signed Up', {\n    signup_method: 'email',\n    plan: 'free',\n  });\n\n  // 4. If B2B, associate with company\n  if (company) {\n    const companyRecord = await createCompany(company, user.id);\n\n    associateWithCompany({\n      id: companyRecord.id,\n      name: company.name,\n      employees: parseInt(company.size),\n    });\n  }\n}\n\n### Context\n\n- user identification\n- anonymous tracking\n- b2b tracking\n\n### Destinations Configuration\n\nRoute data to analytics tools, data warehouses, and marketing platforms.\nUse device-mode for client-side tools, cloud-mode for server processing.\n\n// Segment destinations are configured in the Segment UI\n// but here's how to optimize your implementation\n\n// Conditional tracking based on destination needs\n// lib/segment-destinations.ts\n\ninterface DestinationConfig {\n  mixpanel: boolean;\n  amplitude: boolean;\n  googleAnalytics: boolean;\n  warehouse: boolean;\n  hubspot: boolean;\n}\n\n// Only send events needed by specific destinations\nexport function trackWithDestinations(\n  event: string,\n  properties: Record<string, any>,\n  options?: {\n    integrations?: Partial<DestinationConfig>;\n  }\n) {\n  analytics.track(event, properties, {\n    integrations: {\n      // Override specific destinations\n      All: true,  // Send to all by default\n      ...options?.integrations,\n    },\n  });\n}\n\n// Example: Track revenue event only to revenue-tracking destinations\nexport function trackRevenue(order: {\n  orderId: string;\n  total: number;\n  currency: string;\n}) {\n  analytics.track('Order Completed', {\n    order_id: order.orderId,\n    revenue: order.total,\n    currency: order.currency,\n  }, {\n    integrations: {\n      // Explicitly enable revenue destinations\n      'Google Analytics 4': true,\n      'Mixpanel': true,\n      'Amplitude': true,\n      // Disable non-revenue destinations\n      'Intercom': false,\n      'Zendesk': false,\n    },\n  });\n}\n\n// Send PII only to secure destinations\nexport function identifyWithPII(userId: string, traits: {\n  email: string;\n  phone?: string;\n  address?: string;\n}) {\n  analytics.identify(userId, traits, {\n    integrations: {\n      'All': false,  // Disable all by default\n      // Only send PII to trusted destinations\n      'HubSpot': true,\n      'Salesforce': true,\n      'Warehouse': true,  // Your data warehouse\n      // Don't send PII to analytics tools\n      'Mixpanel': false,\n      'Amplitude': false,\n    },\n  });\n}\n\n// Context enrichment for all events\nexport function enrichedTrack(\n  event: string,\n  properties: Record<string, any>\n) {\n  analytics.track(event, {\n    ...properties,\n    // Add common context\n    app_version: process.env.NEXT_PUBLIC_APP_VERSION,\n    environment: process.env.NODE_ENV,\n    timestamp: new Date().toISOString(),\n  }, {\n    context: {\n      app: {\n        name: 'MyApp',\n        version: process.env.NEXT_PUBLIC_APP_VERSION,\n      },\n    },\n  });\n}\n\n### Context\n\n- data routing\n- destination setup\n- tool integration\n\n### HTTP Tracking API\n\nDirect HTTP API for any environment. Useful for edge functions,\nworkers, and non-Node.js backends. Batch up to 500KB per request.\n\n// Edge/Serverless tracking via HTTP API\n// lib/segment-http.ts\n\nconst SEGMENT_WRITE_KEY = process.env.SEGMENT_WRITE_KEY!;\nconst SEGMENT_API = 'https://api.segment.io/v1';\n\n// Base64 encode write key for auth\nconst authHeader = `Basic ${btoa(SEGMENT_WRITE_KEY + ':')}`;\n\ninterface SegmentEvent {\n  userId?: string;\n  anonymousId?: string;\n  event?: string;\n  name?: string;  // For page calls\n  properties?: Record<string, any>;\n  traits?: Record<string, any>;\n  context?: Record<string, any>;\n  timestamp?: string;\n}\n\nasync function segmentRequest(\n  endpoint: string,\n  payload: SegmentEvent\n): Promise<void> {\n  const response = await fetch(`${SEGMENT_API}${endpoint}`, {\n    method: 'POST',\n    headers: {\n      'Authorization': authHeader,\n      'Content-Type': 'application/json',\n    },\n    body: JSON.stringify({\n      ...payload,\n      timestamp: payload.timestamp || new Date().toISOString(),\n    }),\n  });\n\n  if (!response.ok) {\n    console.error('Segment API error:', await response.text());\n  }\n}\n\n// HTTP API methods\nexport async function httpIdentify(\n  userId: string,\n  traits: Record<string, any>,\n  context?: Record<string, any>\n) {\n  await segmentRequest('/identify', {\n    userId,\n    traits,\n    context,\n  });\n}\n\nexport async function httpTrack(\n  userId: string,\n  event: string,\n  properties?: Record<string, any>,\n  context?: Record<string, any>\n) {\n  await segmentRequest('/track', {\n    userId,\n    event,\n    properties,\n    context,\n  });\n}\n\nexport async function httpPage(\n  userId: string,\n  name: string,\n  properties?: Record<string, any>\n) {\n  await segmentRequest('/page', {\n    userId,\n    name,\n    properties,\n  });\n}\n\n// Batch API for high volume\nexport async function httpBatch(\n  events: Array<{\n    type: 'identify' | 'track' | 'page' | 'group';\n    userId?: string;\n    anonymousId?: string;\n    event?: string;\n    name?: string;\n    properties?: Record<string, any>;\n    traits?: Record<string, any>;\n  }>\n) {\n  // Max 500KB per batch, 32KB per event\n  await segmentRequest('/batch', {\n    batch: events.map(e => ({\n      ...e,\n      timestamp: new Date().toISOString(),\n    })),\n  } as any);\n}\n\n// Cloudflare Worker example\nexport default {\n  async fetch(request: Request): Promise<Response> {\n    const { userId, action, data } = await request.json();\n\n    // Track in edge function\n    await httpTrack(userId, action, data, {\n      ip: request.headers.get('cf-connecting-ip'),\n      userAgent: request.headers.get('user-agent'),\n    });\n\n    return new Response('ok');\n  },\n};\n\n### Context\n\n- edge functions\n- serverless\n- http tracking\n\n## Sharp Edges\n\n### Anonymous ID Persists Until Explicit Reset\n\nSeverity: MEDIUM\n\n### Device Mode Bypasses Protocols Blocking\n\nSeverity: HIGH\n\n### HTTP API Has Strict Size Limits\n\nSeverity: MEDIUM\n\n### Track Calls Without Identify Are Anonymous\n\nSeverity: HIGH\n\n### Write Key in Client is Visible (But Intentional)\n\nSeverity: LOW\n\n### Events May Be Lost on Page Navigation\n\nSeverity: MEDIUM\n\n### Timestamps Without Timezone Cause Analytics Issues\n\nSeverity: MEDIUM\n\n### Tracking Before Consent Violates GDPR\n\nSeverity: HIGH\n\n## Validation Checks\n\n### Dynamic Event Name\n\nSeverity: ERROR\n\nEvent names should be static, not include dynamic values\n\nMessage: Dynamic event name detected. Use static event names with dynamic properties.\n\n### Inconsistent Event Name Casing\n\nSeverity: WARNING\n\nEvent names should follow consistent casing convention\n\nMessage: Mixed casing in event name. Use consistent convention (e.g., Title Case).\n\n### Track Without Prior Identify\n\nSeverity: WARNING\n\nUsers should be identified before tracking critical events\n\nMessage: Revenue/conversion event without identify. Ensure user is identified.\n\n### Missing Analytics Reset on Logout\n\nSeverity: WARNING\n\nAnalytics should be reset when user logs out\n\nMessage: Logout without analytics.reset(). Anonymous ID will persist to next user.\n\n### Hardcoded Segment Write Key\n\nSeverity: ERROR\n\nWrite key should use environment variables\n\nMessage: Hardcoded Segment write key. Use environment variables.\n\n### PII Sent to All Destinations\n\nSeverity: WARNING\n\nPII should have destination controls\n\nMessage: PII in tracking without destination controls. Consider limiting destinations.\n\n### Event Without Proper Timestamp\n\nSeverity: INFO\n\nExplicit timestamps help with historical data\n\nMessage: Server track without explicit timestamp. Consider adding timestamp.\n\n### Potentially Large Property Values\n\nSeverity: WARNING\n\nProperties over 32KB will be rejected\n\nMessage: Potentially large property value. Segment has 32KB per event limit.\n\n### Tracking Before Consent Check\n\nSeverity: ERROR\n\nGDPR requires consent before tracking\n\nMessage: Tracking without consent check. Implement consent management for GDPR.\n\n## Collaboration\n\n### Delegation Triggers\n\n- user needs A/B testing -> analytics-specialist (Segment + LaunchDarkly/Optimizely integration)\n- user needs data warehouse -> data-engineer (Segment to BigQuery/Snowflake/Redshift)\n- user needs customer support integration -> zendesk-integration (Identify calls syncing to support tools)\n- user needs marketing automation -> hubspot-integration (Segment to HubSpot destination)\n- user needs consent management -> privacy-specialist (GDPR/CCPA compliance with Segment)\n\n## When to Use\n- User mentions or implies: segment\n- User mentions or implies: analytics.js\n- User mentions or implies: customer data platform\n- User mentions or implies: cdp\n- User mentions or implies: tracking plan\n- User mentions or implies: event tracking\n- User mentions or implies: identify track page\n- User mentions or implies: data routing\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["segment","cdp","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-segment-cdp","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/segment-cdp","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34583 github stars · SKILL.md body (19,764 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T18:52:13.075Z","embedding":null,"createdAt":"2026-04-18T21:44:10.634Z","updatedAt":"2026-04-22T18:52:13.075Z","lastSeenAt":"2026-04-22T18:52:13.075Z","tsv":"'/batch':1554 '/identify':1468 '/lib/segment':172 '/page':1509 '/track':1490 '/v1'';':1368 '0':444,481,485,491,506 '1':800,1004 '10':326 '100':436,464,488 '10000':323 '123':793 '2':806,1016 '20':317 '3':1033 '32kb':1549,1851,1862 '4':1046,1209 '49.99':804 '500kb':1347,1546 '99.99':795,817 'a/b':1892 'action':524,1577,1588 'ad':1841 'add':1295 'address':1240 'agent':1600 'alia':841,951 'also':452 'amount':483,487 'amplitud':1129,1213,1276 'analyt':66,76,157,169,267,303,309,311,1080,1208,1272,1667,1755,1761,1895 'analytics-specialist':1894 'analytics.alias':985 'analytics.closeandflush':401 'analytics.group':151,941 'analytics.identify':112,353,900,1242 'analytics.js':22,41,49,865,1958 'analytics.page':139 'analytics.reset':1772 'analytics.track':127,379,778,869,917,1037,1156,1192,1292 'analyticsbrows':71 'analyticsbrowser.load':77 'anonym':57,831,855,894,1021,1071,1613,1641,1773 'anonymousid':868,1386,1531 'api':404,1329,1332,1354,1365,1422,1445,1450,1514,1629 'api.segment.io':1367 'api.segment.io/v1'';':1366 'app':1298,1302,1312,1318 'app.tsx':203 'app/api/webhooks/stripe/route.ts':406 'application/json':1432 'array':651,747,1523 'ask':2029 'associ':923,1049 'associatewithcompani':929,1060 'async':397,408,502,880,992,1409,1453,1473,1496,1519,1570 'auth':242,1374 'authhead':1376,1428 'author':1427 'autom':1927 'automat':866 'await':400,415,503,899,1012,1023,1056,1419,1447,1466,1488,1507,1552,1579,1585 'b2b':922,1048,1073 'backend':295,512,1343 'base':1120 'base64':1369 'basic':1377 'batch':292,318,1344,1513,1548,1555 'best':38 'bigquery/snowflake/redshift':1909 'block':289,1625 'bodi':1433 'boolean':1128,1130,1132,1134,1136 'boundari':2037 'break':471,493 'browser':42,264 'btoa':1378 'button':235 'bypass':1623 'call':56,1394,1637,1919 'case':419,472,1709,1717,1721,1730 'categori':613,731 'caus':1666 'cdp':3,13,1970 'cf':1593 'cf-connecting-ip':1592 'chang':188 'check':786,1679,1869,1881 'checkout.session.completed':420 'children':208,211 'clarif':2031 'clear':2004 'client':45,269,1093,1647 'client-sid':44,268,1092 'closeanalyt':399,504 'cloud':1097 'cloud-mod':1096 'cloudflar':1565 'code':582,718 'collabor':1887 'common':1296 'compani':100,690,926,930,999,1051,1053,1058 'companies/organizations':850 'company.employees':948 'company.id':942 'company.industry':950 'company.name':944,1064 'company.plan':946 'company.size':1067 'companyrecord':1055 'companyrecord.id':1062 'compil':783 'compile-tim':782 'complet':429,566,626,629,738,789,815,1194 'complianc':1943 'compon':68,215 'conceptu':542 'condit':1118 'configur':34,550,1076,1105 'connect':534,1594 'consent':1673,1868,1874,1880,1883,1937 'consid':1819,1840 'consist':1716,1726 'console.error':1443 'const':75,176,179,221,308,413,421,1010,1054,1356,1363,1375,1417,1575 'content':1430 'content-typ':1429 'context':263,351,356,358,361,364,377,386,388,391,507,821,1068,1278,1297,1311,1320,1403,1462,1471,1484,1494,1605 'control':1811,1818 'convent':526,1718,1727 'count':763 'creat':908,1005 'createcompani':1057 'createdat':98,255 'createus':1013 'criteria':2040 'critic':1743 'currenc':437,619,646,735,744,1190,1200 'custom':8,18,1912,1963 'customer.subscription.created':473 'data':9,19,36,300,824,1078,1082,1265,1321,1578,1589,1833,1902,1905,1964,1994 'data-engin':1904 'date':385,467,469,911,1309,1439,1561 'default':622,1169,1251,1569 'defin':527 'definit':541 'deleg':1888 'describ':2008 'descript':564,592,627 'design':518,519 'destin':33,1075,1103,1122,1143,1162,1181,1206,1219,1229,1257,1323,1804,1810,1817,1821,1934 'destinationconfig':1126 'detect':1698 'devic':1089,1621 'device-mod':1088 'direct':1330 'disabl':1215,1248 'display':553 'document.title':198 'dynam':1680,1692,1695,1704 'e':1557,1558 'e.g':954,1728 'edg':1338,1583,1606,1612 'edge/serverless':1350 'email':90,249,262,578,672,714,886,902,958,995,1014,1027,1043,1236 'employe':937,947,1065 'enabl':1204 'encod':1370 'endpoint':1412,1423 'enforc':538 'engin':1906 'enrich':1279 'enrichedtrack':1285 'ensur':1750 'enterpris':97,688 'enum':577,685 'env':1306 'environ':1304,1335,1790,1798,2020 'environment-specif':2019 'error':812,1446,1684,1785,1871 'essenti':293 'event':85,123,128,212,271,296,371,381,414,513,520,559,773,779,826,861,870,916,1036,1139,1147,1157,1175,1282,1286,1293,1388,1478,1492,1522,1533,1551,1654,1681,1685,1696,1701,1707,1712,1723,1744,1747,1822,1864,1981 'event.data.object':423 'event.data.object.items.data':480,484,490 'event.data.object.metadata.user':475 'event.type':418 'events.map':1556 'everi':325 'exampl':1172,1567 'expert':4,14,2025 'explicit':1203,1617,1828,1838 'export':74,87,105,115,130,142,173,333,342,366,396,407,706,770,858,879,927,962,991,1144,1182,1230,1283,1452,1472,1495,1518,1568 'extend':119 'fals':1221,1223,1247,1275,1277 'featur':757,759 'fetch':1420,1571 'flow':852,990 'flush':321,324,393 'flushat':316 'flushinterv':322 'follow':1715 'forward':449 'free':95,686,1032,1045 'full':988 'function':106,116,131,143,174,206,216,243,343,367,398,409,769,771,859,881,928,963,993,1145,1183,1231,1284,1339,1410,1454,1474,1497,1520,1584,1607 'gdpr':1675,1872,1886 'gdpr/ccpa':1942 'generat':867 'github':580,716 'googl':579,715,1207 'googleanalyt':1131 'govern':37,825 'grace':498 'group':55,144,847,1528 'groupid':145,152 'handleclick':222,237 'handlesignup':994 'hardcod':1780,1793 'header':1426 'help':1830 'helper':86 'high':279,1516,1627,1643,1677 'high-perform':278 'histor':1832 'histori':895,1022 'hook':155 'hooks/useanalytics.ts':158 'http':1327,1331,1353,1449,1609,1628 'httpbatch':1521 'httpidentifi':1455 'httppage':1498 'httptrack':1475,1586 'hubspot':1135,1258,1929,1933 'hubspot-integr':1928 'id':58,101,427,431,459,476,601,606,635,640,657,694,726,740,749,791,798,820,884,931,961,977,984,1025,1061,1196,1614,1774 'ident':31,828,843,851,953 'identif':915,1070 'identifi':52,61,107,240,247,669,836,839,919,972,1017,1525,1639,1734,1740,1749,1753,1918,1987 'identifyus':882,1024 'identifywithpii':1232 'implement':701,853,1117,1882 'impli':1952,1957,1962,1969,1974,1980,1986,1993 'import':70,159,163,168,302 'includ':11,21,50,1691 'inconsist':1706 'industri':939,949 'info':1827 'initi':306 'input':2034 'integ':668 'integr':43,1154,1159,1171,1202,1245,1326,1899,1914,1917,1930 'intent':1651 'intercom':1220 'interfac':88,334,707,1125,1382 'intern':291 'interv':489 'ip':336,357,359,387,389,445,1590,1595 'issu':1668 'item':652 'json.stringify':1434 'key':83,315,1359,1362,1372,1381,1645,1783,1787,1796 'larg':1844,1857 'last':465 'launchdarkly/optimizely':1898 'layout.tsx':205 'lib/identity.ts':854 'lib/segment-destinations.ts':1124 'lib/segment-http.ts':1355 'lib/segment-server.ts':301 'lib/segment.ts':69 'limit':1633,1820,1865,1996 'link':952 'linkident':964 'local':340,363,365 'log':877,1767 'logout':1758,1770 'lost':1657 'low':1653 'manag':1884,1938 'map':546 'market':1085,1926 'match':2005 'max':1545 'may':1655 'medium':1620,1635,1662,1670 'mention':1950,1955,1960,1967,1972,1978,1984,1991 'merg':62,834,844,893,1020 'messag':1694,1719,1745,1769,1792,1812,1834,1855,1877 'method':261,440,442,571,574,713,920,1042,1424,1451 'miss':818,1754,2042 'mix':1720 'mixpanel':1127,1211,1274 'mode':1090,1098,1622 'myapp':555,1314 'name':92,103,133,140,227,251,525,554,560,589,603,610,624,660,671,677,678,681,689,697,729,751,760,801,888,904,933,943,1000,1029,1063,1313,1390,1501,1511,1535,1682,1686,1697,1702,1708,1713,1724 'navig':1660 'need':1123,1140,1891,1901,1911,1925,1936 'new':310,384,468,495,910,1308,1438,1560,1602 'newuserid':967,986 'next':1778 'next.js':65 'next/navigation':167 'node.js':277 'non':288,1217 'non-block':287 'non-node.js':1342 'non-revenu':1216 'number':618,645,665,734,743,754,756,764,938,1189 'object':523,654,692,864 'ok':497,1604 'onclick':236 'onuserlogin':244 'optim':1115 'option':1153,1170 'ord':792 'order':428,430,625,634,639,737,739,788,790,814,819,1185,1193,1195 'order.currency':1201 'order.orderid':1197 'order.total':1199 'orderid':1186 'output':2014 'overrid':1160 'page':53,132,170,184,189,229,233,597,1393,1527,1659,1989 'parseint':1066 'partial':1155 'password':997,1015 'path':191 'pathnam':177,190,192,199 'pattern':5,15,40 'payload':1414,1435 'payload.timestamp':1437 'payment':439 'per':1348,1547,1550,1863 'perform':280 'perman':982 'permiss':2035 'persist':59,1615,1776 'phone':1238 'pii':1225,1254,1270,1800,1807,1813 'plan':28,94,218,219,224,226,228,239,253,479,517,540,552,557,682,823,890,906,935,945,1031,1044,1976 'platform':10,20,1086,1965 'post':410,1425 'potenti':1843,1856 'practic':39 'pre':956 'pre-signup':955 'previousid':965,987 'price':230,232,616,663,733,753,803 'price.nickname':482 'price.recurring.interval':492 'price.unit':486 'pricingbutton':217 'prior':1733 'privaci':1940 'privacy-specialist':1939 'pro':96,687 'process':515,1101 'process.env.next':79,1300,1316 'process.env.node':1305 'process.env.segment':313,1360 'process.exit':505 'process.on':500 'prod':799 'product':590,596,600,602,605,609,637,649,656,723,725,728,746,748,796,797 'profil':898 'promis':1416,1574 'proper':1824 'properti':125,129,135,141,373,382,529,572,604,638,655,693,775,780,863,871,1149,1158,1288,1294,1395,1480,1493,1503,1512,1537,1705,1845,1849,1858 'protocol':30,536,549,1624 'provid':67 'public':80,1301,1317 'purchas':466,631 'quantiti':666,755,805 'react':154,162 'record':120,136,148,348,374,1150,1289,1396,1400,1404,1459,1463,1481,1485,1504,1538,1542 'refer':426,458 'referr':581,717 'registr':567 'reject':1854 'req':411 'req.headers.get':446 'req.json':416 'request':412,1349,1572,1573 'request.headers.get':1591,1597 'request.json':1580 'requir':528,569,599,633,675,1873,2033 'reset':1618,1756,1764 'resolut':32,829 'respons':496,1418,1603 'response.ok':1442 'response.text':1448 'return':210,234,494,1601 'revenu':1174,1179,1198,1205,1218 'revenue-track':1178 'revenue/conversion':1746 'review':2026 'rootlayout':207 'rout':187,405,1077,1322,1995 'rule':533,558,568,598,632 'safe':767 'safeti':704,2036 'salesforc':1260 'schema':521,827 'scope':2007 'search':193 'searchparam':180,200 'searchparams.tostring':194 'second':327 'secur':1228 'segment':2,7,12,17,81,548,1019,1102,1108,1357,1364,1379,1421,1444,1781,1794,1860,1897,1907,1931,1945,1953 'segment-cdp':1 'segment/analytics-next':73 'segment/analytics-node':286,305 'segmentev':1383,1415 'segmentrequest':1411,1467,1489,1508,1553 'select':225,238 'send':1138,1165,1224,1253,1269 'sensit':299 'sent':1801 'server':24,273,282,330,509,1100,1835 'server-sid':23,272,281,329,508 'servercontext':335,352,378 'serveridentifi':344,456 'serverless':1608 'servertrack':368,424,474 'session':422 'session.amount':434,462 'session.client':425,457 'session.currency':438 'session.id':432 'session.payment':441 'setup':1324 'sever':1619,1626,1634,1642,1652,1661,1669,1676,1683,1710,1735,1759,1784,1805,1826,1847,1870 'sharp':1611 'shutdown':395,499 'side':25,46,270,274,283,331,510,1094 'sign':259,562,710,874,1039 'signup':570,573,712,921,957,989,1035,1041 'sigterm':501 'size':319,1002,1632 'skill':1999 'skill-segment-cdp' 'someon':973 'sourc':231,586,721 'source-sickn33' 'specialist':1896,1941 'specif':1142,1161,2021 'spent':461 'start':478 'static':1689,1700 'stop':2027 'strict':1631 'string':91,93,99,102,104,109,121,124,134,137,146,149,220,337,339,341,346,349,370,372,375,576,584,588,608,612,615,621,642,648,659,662,674,680,684,696,699,719,722,727,730,732,736,741,745,750,752,761,862,885,887,889,891,932,934,936,940,966,968,996,998,1001,1003,1148,1151,1187,1191,1234,1237,1239,1241,1287,1290,1385,1387,1389,1391,1397,1401,1405,1408,1413,1457,1460,1464,1477,1479,1482,1486,1500,1502,1505,1530,1532,1534,1536,1539,1543 'structur':544 'subscript':477 'substitut':2017 'success':2039 'support':1913,1922 'switch':417 'sync':1920 'system':846,1009 'task':2003 'temporari':976 'test':1893,2023 'time':784 'timestamp':383,1307,1407,1436,1559,1663,1825,1829,1839,1842 'timezon':1665 'titl':197,1729 'toisostr':470,912,1310,1440,1562 'tool':1081,1095,1273,1325,1923 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':433,435,460,463,636,643,742,794,816,1188 'track':26,27,47,51,117,183,213,223,257,265,275,284,332,511,516,539,551,556,768,822,830,857,913,1034,1072,1074,1119,1173,1180,1328,1351,1526,1581,1610,1636,1671,1731,1742,1815,1836,1866,1876,1878,1975,1982,1988 'trackanonymousact':860 'trackev':772,787,813 'trackingev':708,776 'trackrevenu':1184 'trackwithdestin':1146 'trait':110,114,147,153,347,355,455,670,1235,1244,1399,1458,1470,1541 'treat':2012 'trigger':1889 'true':676,1164,1210,1212,1214,1259,1261,1263 'trust':1256 'type':84,328,443,530,575,583,587,607,611,614,617,620,641,644,647,650,653,658,661,664,667,673,679,683,691,695,698,703,766,785,1431,1524 'type-saf':765 'types/segment-events.ts':705 'typescript':700,811 'ui':1109 'undefin':451 'updat':453 'url':195 'usag':201,402,762,781 'usd':623 'use':285,522,758,840,969,1087,1336,1699,1725,1789,1797,1948,1997 'useeffect':160,182 'usepagetrack':175,209 'usepathnam':164,178 'user':64,245,246,258,454,561,565,593,628,709,832,837,848,856,873,883,897,918,924,960,983,1006,1011,1038,1069,1599,1737,1751,1766,1779,1890,1900,1910,1924,1935,1949,1954,1959,1966,1971,1977,1983,1990 'user-ag':1598 'user.createdat':256 'user.email':250,903,1028 'user.id':248,901,1026,1059 'user.name':252,905,1030 'user.plan':254,907 'userag':338,360,362,390,392,1596 'userid':108,113,345,354,369,380,1233,1243,1384,1456,1469,1476,1491,1499,1510,1529,1576,1587 'usertrait':89,111 'usesearchparam':165,181 'utm':585,720 'valid':532,1678,2022 'valu':1693,1846,1859 'variabl':1791,1799 'version':1299,1303,1315,1319 'via':838,1352 'view':185,591,594,724 'violat':1674 'visibl':1649 'volum':1517 'warehous':1083,1133,1262,1266,1903 'warn':1711,1736,1760,1806,1848 'webhook':297,514 'websit':266 'widget':802 'window.location.href':196 'without':1638,1664,1732,1748,1771,1816,1823,1837,1879 'worker':1340,1566 'would':808 'write':82,314,1358,1361,1371,1380,1644,1782,1786,1795 'writekey':78,312 'x':448 'x-forwarded-for':447 'yaml':543 'zendesk':1222,1916 'zendesk-integr':1915","prices":[{"id":"a120e054-7c19-4230-8c49-13b4fc455d4c","listingId":"46df40c2-5438-4236-baa5-55b82cef601a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:44:10.634Z"}],"sources":[{"listingId":"46df40c2-5438-4236-baa5-55b82cef601a","source":"github","sourceId":"sickn33/antigravity-awesome-skills/segment-cdp","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/segment-cdp","isPrimary":false,"firstSeenAt":"2026-04-18T21:44:10.634Z","lastSeenAt":"2026-04-22T18:52:13.075Z"}],"details":{"listingId":"46df40c2-5438-4236-baa5-55b82cef601a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"segment-cdp","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34583,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"ad9a26411342461b98111c9f3b7d0f99bed117b1","skill_md_path":"skills/segment-cdp/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/segment-cdp"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"segment-cdp","description":"Expert patterns for Segment Customer Data Platform including"},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/segment-cdp"},"updatedAt":"2026-04-22T18:52:13.075Z"}}