prompts.chatprompts.chatprompts.chat
BotPromptKỹ năngQuy trìnhDanh mụcThẻCao thủ PromptPhong cách
SáchCho trẻ emNhà phát triển
Đăng nhập
CC0 2026 prompts.chat
DeepWikiHướng dẫn...Tài liệuAPIQuyền riêng tưĐiều khoảnHỗ trợGiới thiệuGitHub

Tích hợp PostHog Cấp độ Production cho Next.js 15 (App Router)

T
@ted2xmen
about 4 hours agolúc 15:32 30 tháng 10, 2026
Web Development•Web DevelopmentCoding

Nội dung

Tích hợp PostHog Cấp độ Production cho Next.js 15 (App Router)
Vai trò
Bạn là một Kiến trúc sư Next.js Cấp cao & Kỹ sư Phân tích Dữ liệu (Analytics Engineer) với chuyên môn sâu về Next.js 15, React 19, Supabase Auth, thanh toán Polar.sh và PostHog.
Bạn thiết kế các hệ thống đạt chuẩn vận hành thực tế (production-grade), tôn trọng quyền riêng tư và xử lý chính xác ranh giới nghiêm ngặt giữa Server và Client của Next.js 15.
Kết quả đầu ra của bạn phải lấy mã nguồn làm trọng tâm (code-first), mang tính tất định (deterministic) và phù hợp cho một sản phẩm SaaS thực tế vào năm 2026.

Mục tiêu
Tích hợp PostHog Analytics, Ghi lại Phiên người dùng (Session Replay), Cờ Tính năng (Feature Flags) và Theo dõi Lỗi (Error Tracking) vào một ứng dụng SaaS dùng Next.js 15 App Router với:
- Sự phân tách chuẩn xác giữa Server / Client (theo mẫu thiết kế Providers Pattern)
- Lớp phân tích dữ liệu tập trung, an toàn kiểu dữ liệu (type-safe)
- Vòng đời định danh người dùng được đồng bộ hóa với Supabase
- Theo dõi thanh toán và doanh thu chính xác (Polar)
- Theo dõi điều hướng trang SPA an toàn với cơ chế `<Suspense>`

Bối cảnh Kỹ thuật
- Framework: Next.js 15 (App Router) & React 19
- Cơ chế kết xuất (Rendering): Server Components (mặc định), Client Components (cho tương tác)
- Xác thực (Auth): Supabase Auth
- Thanh toán (Billing): Polar.sh
- Trạng thái hiện tại: Chưa có công cụ phân tích nào
- Môi trường: Web SaaS (môi trường production)

Các Quy tắc Kiến trúc Cốt lõi (BẤT DI BẤT DỊCH)
1. PostHog CHỈ ĐƯỢC PHÉP chạy trong các Client Components.
2. Tuyệt đối không gọi PostHog trong Server Components, Route Handlers hoặc các API routes.
3. Định danh người dùng chỉ được kiểm soát duy nhất bởi trạng thái xác thực (auth state).
4. Toàn bộ các lệnh gọi phân tích dữ liệu bắt buộc phải đi qua một lớp trừu tượng duy nhất (`lib/analytics.ts`).

1. Kiến trúc & Thiết lập (Mẫu thiết kế Providers Pattern)
- Tạo tệp `app/providers.tsx`.
- Đánh dấu tệp này bằng chỉ thị `'use client'`.
- Khởi tạo PostHog bên trong component này.
- Bọc toàn bộ ứng dụng bằng `PostHogProvider`.
- Cấu hình:
  - Sử dụng biến môi trường `NEXT_PUBLIC_POSTHOG_KEY` và `NEXT_PUBLIC_POSTHOG_HOST`.
  - `capture_pageview`: `false` (Được xử lý thủ công để tránh việc ghi nhận trùng lặp trong App Router).
  - `capture_pageleave`: `true`.
  - Bật tính năng Session Replay (`mask_all_text_inputs: true`).

2. Vòng đời Định danh Người dùng (Đồng bộ với Supabase)
- Tạo tệp `hooks/useAnalyticsAuth.ts`.
- Lắng nghe sự kiện `onAuthStateChange` của Supabase.
- Logic xử lý:
  - `SIGNED_IN`: Gọi hàm `posthog.identify`.
  - `SIGNED_OUT`: Gọi hàm `posthog.reset()`.
  - Sử dụng các hook phù hợp của React 19 nếu cần cho việc quản lý trạng thái, nhưng dùng `useEffect` tiêu chuẩn vẫn hoàn toàn ổn đối với các bộ lắng nghe sự kiện (listeners).

3. Thanh toán & Doanh thu (Polar)
- Thuộc tính `distinct_id` của PostHog bắt buộc phải khớp với Supabase User ID.
- Thiết lập `polar_customer_id` làm một thuộc tính người dùng (user property).
- Theo dõi các sự kiện: `CHECKOUT_STARTED`, `SUBSCRIPTION_CREATED`.
- Đảm bảo sự kiện `SUBSCRIPTION_CREATED` bao gồm `{ revenue: number, currency: string }` để phục vụ cho bảng điều khiển Doanh thu (Revenue dashboards) của PostHog.

4. Lớp Phân tích Dữ liệu An toàn Kiểu (Type-Safe Analytics Layer)
- Tạo tệp `lib/analytics.ts`.
- Định nghĩa kiểu liệt kê nghiêm ngặt `AnalyticsEvents` (Enum).
- Xuất (export) hàm bọc `trackEvent` có kiểm tra kiểu chặt chẽ.
- Kiểm tra điều kiện `if (typeof window === 'undefined')` để ngăn chặn lỗi khi kết xuất phía máy chủ (SSR).

5. Theo dõi Điều hướng SPA (An toàn cho Next.js 15 & Suspense)
- Tạo tệp `components/PostHogPageView.tsx`.
- Sử dụng `usePathname` và `useSearchParams`.
- QUAN TRỌNG: Vì hook `useSearchParams` sẽ khiến toàn bộ trang bị lùi về kết xuất phía client (client-side rendering de-opt) trong Next.js 15 nếu không được bọc kỹ, bạn BẮT BUỘC phải bọc component này bên trong một ranh giới `<Suspense>` khi gắn (mount) nó vào trong `app/providers.tsx`.
- Kích hoạt ghi nhận lượt xem trang (pageviews) mỗi khi đường dẫn (route) thay đổi.

6. Theo dõi Lỗi (Error Tracking)
- Bắt và ghi nhận lỗi một cách tường minh: `posthog.capture('$exception', { message, stack })`.

Sản phẩm Bàn giao (BẮT BUỘC)
CHỈ trả về đúng các tệp sau đây:
1. `package.json` (Thư viện phụ thuộc: `posthog-js`).
2. `app/providers.tsx` (Có kèm khung bọc Suspense).
3. `lib/analytics.ts` (Lớp trừu tượng an toàn kiểu dữ liệu).
4. `hooks/useAnalyticsAuth.ts` (Đồng bộ xác thực).
5. `components/PostHogPageView.tsx` (Theo dõi điều hướng trang).
6. `app/layout.tsx` (Ví dụ tích hợp vào bố cục gốc Root layout).

🚫 Không thêm bất kỳ tệp dư thừa nào khác.
🚫 Không viết văn xuôi giải thích bên ngoài các dòng chú thích mã nguồn (code comments).

Bình luận (0)

Kỹ năng liên quan

Phát triển Ứng dụng Web Toàn diện Kết hợp Tối ưu hóa Bảo mật và Hiệu năng

Kỹ năng

Hướng dẫn xây dựng một ứng dụng web full-stack với hệ thống xác thực người dùng an toàn, hiệu năng cao và các tính năng tương tác người dùng mạnh mẽ.

M@damimehdi20
0