Claude-code-plugins-plus-skills posthog-hello-world
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/posthog-pack/skills/posthog-hello-world" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-posthog-hello-world && rm -rf "$T"
manifest:
plugins/saas-packs/posthog-pack/skills/posthog-hello-world/SKILL.mdsource content
PostHog Hello World
Overview
Minimal working examples demonstrating the three core PostHog operations: capturing events, identifying users, and evaluating feature flags. Covers both browser (
posthog-js) and server (posthog-node) SDKs.
Prerequisites
- Completed
setupposthog-install-auth - Project API key (
) configuredphc_...
and/orposthog-js
installedposthog-node
Instructions
Step 1: Capture Your First Event (Node.js)
// hello-posthog.ts import { PostHog } from 'posthog-node'; const posthog = new PostHog(process.env.NEXT_PUBLIC_POSTHOG_KEY!, { host: 'https://us.i.posthog.com', }); async function main() { // 1. Capture a custom event posthog.capture({ distinctId: 'user-123', event: 'hello_posthog', properties: { greeting: 'Hello from posthog-node!', source: 'hello-world-skill', timestamp: new Date().toISOString(), }, }); console.log('Event captured: hello_posthog'); // 2. Identify a user with properties posthog.identify({ distinctId: 'user-123', properties: { email: 'dev@example.com', name: 'Dev User', plan: 'free', }, }); console.log('User identified: user-123'); // 3. Check a feature flag const flagValue = await posthog.getFeatureFlag('my-feature-flag', 'user-123'); console.log(`Feature flag "my-feature-flag": ${flagValue}`); // 4. Flush and shutdown (required in scripts/serverless) await posthog.shutdown(); console.log('Done — check app.posthog.com Activity tab'); } main().catch(console.error);
Step 2: Browser Hello World (posthog-js)
// In a React component or vanilla JS import posthog from 'posthog-js'; // Initialize (call once at app startup) posthog.init('phc_your_project_key', { api_host: 'https://us.i.posthog.com', loaded: () => console.log('PostHog loaded'), }); // Capture a custom event posthog.capture('button_clicked', { button_name: 'signup', page: window.location.pathname, }); // Identify the user after login posthog.identify('user-123', { email: 'user@example.com', plan: 'pro', }); // Check a feature flag if (posthog.isFeatureEnabled('new-checkout')) { console.log('New checkout flow is enabled'); } // Associate user with a company (group analytics) posthog.group('company', 'company-456', { name: 'Acme Corp', plan: 'enterprise', });
Step 3: Python Hello World
import posthog posthog.project_api_key = 'phc_your_project_key' posthog.host = 'https://us.i.posthog.com' # Capture event posthog.capture('user-123', 'hello_posthog', { 'greeting': 'Hello from Python!', }) # Identify user posthog.identify('user-123', { 'email': 'dev@example.com', 'plan': 'free', }) # Feature flag is_enabled = posthog.feature_enabled('my-flag', 'user-123') print(f'Flag enabled: {is_enabled}')
Step 4: Raw HTTP API (No SDK)
set -euo pipefail # Capture event via POST to /capture/ curl -X POST 'https://us.i.posthog.com/capture/' \ -H 'Content-Type: application/json' \ -d '{ "api_key": "phc_your_project_key", "event": "hello_posthog", "distinct_id": "user-123", "properties": { "greeting": "Hello from curl!" } }' # Batch capture multiple events curl -X POST 'https://us.i.posthog.com/batch/' \ -H 'Content-Type: application/json' \ -d '{ "api_key": "phc_your_project_key", "batch": [ {"event": "page_viewed", "distinct_id": "user-123", "properties": {"page": "/home"}}, {"event": "button_clicked", "distinct_id": "user-123", "properties": {"button": "cta"}} ] }'
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Events not in dashboard | Not flushed | Call or |
silently fails | Wrong API host | Use (not ) |
Feature flag returns | Flag not created yet | Create flag in PostHog dashboard first |
not linking | Different | Frontend and backend must use the same |
| Python events missing | No flush before exit | or at end |
Output
- Working event capture in PostHog Activity tab
- User identified with properties in Persons view
- Feature flag evaluation result logged
- Console output confirming each operation
Resources
Next Steps
Proceed to
posthog-local-dev-loop for development workflow setup.