Agent Skillsnolly-studio/eve-directory › integration-nextjs-app-router

integration-nextjs-app-router

GitHub

帮助在Next.js App Router应用中集成PostHog分析。提供分步工作流、参考示例及最佳实践,强调使用环境变量、最小化代码变更及遵循框架规范进行事件追踪和特性标志配置。

.claude/skills/integration-nextjs-app-router/SKILL.md nolly-studio/eve-directory

触发场景

需要在Next.js App Router项目中添加PostHog分析功能 需要集成PostHog事件追踪或特性标志

安装

npx skills add nolly-studio/eve-directory --skill integration-nextjs-app-router -g -y
更多选项

非标准路径

npx skills add https://github.com/nolly-studio/eve-directory/tree/main/.claude/skills/integration-nextjs-app-router -g -y

不安装直接使用

npx skills use nolly-studio/eve-directory@integration-nextjs-app-router

指定 Agent (Claude Code)

npx skills add nolly-studio/eve-directory --skill integration-nextjs-app-router -a claude-code -g -y

安装 repo 全部 skill

npx skills add nolly-studio/eve-directory --all -g -y

预览 repo 内 skill

npx skills add nolly-studio/eve-directory --list

SKILL.md

Frontmatter
{
    "name": "integration-nextjs-app-router",
    "metadata": {
        "author": "PostHog",
        "version": "1.33.0"
    },
    "description": "PostHog integration for Next.js App Router applications"
}

PostHog integration for Next.js App Router

This skill helps you add PostHog analytics to Next.js App Router applications.

Workflow

Follow these steps in order to complete the integration:

  1. references/1-begin.md - PostHog Setup - Begin ← Start here
  2. references/2-edit.md - PostHog Setup - Edit
  3. references/3-revise.md - PostHog Setup - Revise
  4. references/4-conclude.md - PostHog Setup - Conclusion

Reference files

  • references/EXAMPLE.md - Next.js App Router example project code
  • references/1-begin.md - Start the event tracking setup process by analyzing the project and creating an event tracking plan
  • references/2-edit.md - Implement PostHog event tracking in the identified files, following best practices and the example project
  • references/3-revise.md - Review and fix any errors in the PostHog integration implementation
  • references/4-conclude.md - Review and fix any errors in the PostHog integration implementation
  • references/next-js.md - Next.js - docs
  • references/identify-users.md - Identify users - docs
  • references/COMMANDMENTS.md - Framework-specific rules the integration must follow

The example project shows the target implementation pattern. Consult the documentation for API details.

Key principles

  • Environment variables: Always use environment variables for PostHog keys. Never hardcode them.
  • Minimal changes: Add PostHog code alongside existing integrations. Don't replace or restructure existing code.
  • Match the example: Your implementation should follow the example project's patterns as closely as possible.

Framework guidelines

  • For Next.js 15.3+, initialize PostHog in instrumentation-client.ts for the simplest setup
  • For feature flags, use useFeatureFlagEnabled() or useFeatureFlagPayload() hooks - they handle loading states and external sync automatically
  • Add analytics capture in event handlers where user actions occur, NOT in useEffect reacting to state changes
  • Do NOT use useEffect for data transformation - calculate derived values during render instead
  • Do NOT use useEffect to respond to user events - put that logic in the event handler itself
  • Do NOT use useEffect to chain state updates - calculate all related updates together in the event handler
  • Do NOT use useEffect to notify parent components - call the parent callback alongside setState in the event handler
  • To reset component state when a prop changes, pass the prop as the component's key instead of using useEffect
  • useEffect is ONLY for synchronizing with external systems (non-React widgets, browser APIs, network subscriptions)
  • Remember that source code is available in the node_modules directory
  • Check package.json for type checking or build scripts to validate changes
  • When a reverse proxy is configured, both /static/* AND /array/* must route to the assets origin (us-assets.i.posthog.com or eu-assets.i.posthog.com).
  • posthog-js is the JavaScript SDK package name
  • posthog.init() MUST be called before any other PostHog methods (capture, identify, etc.)
  • posthog-js is browser-only — do NOT import it in Node.js or server-side contexts (use posthog-node instead)
  • Autocapture is ON by default with posthog-js (tracks clicks, form submissions, pageviews). Keep autocapture enabled unless the user explicitly asks to turn it off.
  • NEVER send PII in posthog.capture() event properties — no emails, full names, phone numbers, physical addresses, IP addresses, or user-generated content
  • PII belongs in posthog.identify() person properties (email, name, role), NOT in capture() event properties
  • Call posthog.identify(userId, { email, name, role }) on login AND on page refresh if the user is already logged in
  • Call posthog.reset() on logout to unlink future events from the current user
  • For SPAs without a framework router, capture pageviews with posthog.capture($pageview) or use the capture_pageview history_change option in init for History API routing
  • posthog-node is the Node.js server-side SDK package name; posthog-js is browser-only, so use posthog-node on the server instead
  • Include enableExceptionAutocapture: true in the PostHog constructor options
  • Add posthog.capture() calls in route handlers for meaningful user actions – every route that creates, updates, or deletes data should track an event with contextual properties
  • Add posthog.captureException(err, distinctId) in the application's error handler (e.g., Express error middleware, Fastify setErrorHandler, Koa app.on('error'))
  • The SDK batches events and flushes asynchronously. await flush() or await shutdown() before letting that process exit. If unsure, set flushAt 1 and flushInterval 0.
  • posthog.capture() enqueues synchronously and returns; the batched HTTP send happens afterwards. Treat every per-request handler as short-lived even when the framework feels like a server: Next.js / Nuxt / SvelteKit / Remix route handlers, serverless and edge functions, and Lambda are torn down per invocation before the send runs. Create the client with flushAt 1 and flushInterval 0, then await the send before returning. Always use await posthog.flush() for a shared/singleton client, await posthog.shutdown() for a per-request client. Never skip the awaited flush or risk the enqueued event being silently dropped.
  • Reverse proxy is NOT needed for server-side Node.js – only client-side JavaScript needs a proxy to avoid ad blockers

Identifying users

Identify users during login and signup events. Refer to the example code and documentation for the correct identify pattern for this framework. If both frontend and backend code exist, pass the client-side session and distinct ID using X-POSTHOG-DISTINCT-ID and X-POSTHOG-SESSION-ID headers to maintain correlation.

Error tracking

Add PostHog error tracking to relevant files, particularly around critical user flows and API boundaries.

版本历史

  • 80d83bc 当前 2026-07-31 13:42

同 Skill 集合

.agents/skills/bootstrap-agents-md/SKILL.md
.agents/skills/code-review/SKILL.md
.agents/skills/frontend-design/SKILL.md
.agents/skills/plan-mode/SKILL.md
.agents/skills/setup/SKILL.md
.agents/skills/design-md/SKILL.md
.agents/skills/frontier-interview/SKILL.md

元信息

文件数
0
版本
80d83bc
Hash
f37df59b
收录时间
2026-07-31 13:42

首页 - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-01 00:35
浙ICP备14020137号-1 $访客地图$