Add Analytics (PostHog)
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:"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.