Use this skill when the user asks to add analytics, event tracking, page views, feature flags, or session replay to a web application.
Steps
-
Detect the framework — check for
next.config.*,vite.config.*,package.jsonscripts, orindex.htmlto determine if this is Next.js, React (Vite/CRA), Vue, Svelte, or plain HTML. -
Install the SDK
- Next.js / React:
npm install posthog-js - Next.js (server-side):
npm install posthog-js posthog-node - Python:
pip install posthog - Node.js backend:
npm install posthog-node
- Next.js / React:
-
Create a provider / init module
- For Next.js App Router, create
app/providers.tsx:
- For Next.js App Router, create
```tsx
"use client";
import posthog from "posthog-js";
import { PostHogProvider as PHProvider } from "posthog-js/react";
import { useEffect } from "react";
export function PostHogProvider({ children }: { children: React.ReactNode }) {
useEffect(() => {
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST ?? "https://us.i.posthog.com",
capture_pageview: false, // we capture manually for SPAs
});
}, []);
return <PHProvider client={posthog}>{children}</PHProvider>;
}
```
-
Wrap
{children}in the root layout with<PostHogProvider>. -
For Pages Router, init in
_app.tsxinside auseEffect.
-
Add page-view tracking — for SPAs, create a component that calls
posthog.capture('$pageview')on route change using the framework's router events. -
Add
.envvariables — prompt the user for their PostHog project API key and host:NEXT_PUBLIC_POSTHOG_KEY=phc_... NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.comAdd these keys to
.env.exampleas well. -
Add custom events — if the user specifies events to track (e.g. sign-up, purchase), add
posthog.capture("event_name", { ...properties })calls in the relevant handlers. -
Feature flags (optional) — if requested, show how to use
posthog.isFeatureEnabled("flag-name")or theuseFeatureFlagEnabledhook. -
Session replay (optional) — enable by adding
session_recording: { maskAllInputs: false }to the init config if requested.
Notes
- Never hardcode API keys — always use environment variables.
- Add
posthog-jsto the Content Security Policy if the project has one. - For monorepos, install in the package that renders the UI, not the root.