telemetry-standards

作者: supabase

PostHog 事件追蹤標準,適用於 Supabase Studio。在審查時使用。

npx skills add https://github.com/supabase/supabase --skill telemetry-standards

Telemetry Standards for Supabase Studio

Standards for PostHog event tracking in apps/studio/. Apply these when reviewing PRs that touch tracking or when implementing new tracking.

Event Naming

Format: [object]_[verb] in snake_case

Approved verbs only (canonical list — derived from packages/common/telemetry-constants.ts): opened, clicked, submitted, created, removed, updated, intended, evaluated, added, enabled, disabled, copied, exposed, failed, converted, closed, completed, applied, sent, moved

Flag these:

  • Unapproved verbs (saved, viewed, seen, pressed, etc.)
  • Wrong order: click_product_card → should be product_card_clicked
  • Wrong casing: productCardClicked → should be product_card_clicked

Good examples:

  • product_card_clicked
  • backup_button_clicked
  • sql_query_submitted

Common mistakes with corrections:

  • database_savedsave_button_clicked or database_updated (unapproved verb)
  • click_backup_buttonbackup_button_clicked (wrong order)
  • dashboardViewed → don't track passive views on page load
  • component_rendered → don't track — no user interaction

Property Standards

Casing: camelCase preferred for new events. The codebase has existing snake_case properties (e.g., schema_name, table_name) — when adding properties to an existing event, match its established convention.

Names must be self-explanatory:

  • { productType: 'database', planTier: 'pro' }
  • { assistantType: 'sql', suggestionType: 'optimization' }

Flag these:

  • Generic names: label, value, name, data
  • PascalCase properties
  • Inconsistent names across similar events (e.g., assistantType in one event, aiType in a related event)
  • Mixing camelCase and snake_case within the same event

What NOT to Track

  • Passive views/renders on page load (dashboard_viewed, sidebar_appeared, page_loaded)
  • Component appearances without user interaction
  • Generic "viewed" or "seen" events — already captured by pageview events

DO track: user clicks, form submissions, explicit opens/closes, user-initiated actions.

Exception: _exposed events for A/B experiment exposure tracking are valid even though they fire on render.

Never track PII (emails, names, IPs, etc.) in event properties.

Required Pattern

Import useTrack from lib/telemetry/track (within apps/studio/). Never use useSendEventMutation (deprecated).

import { useTrack } from 'lib/telemetry/track'

const MyComponent = () => {
  const track = useTrack()

  const handleClick = () => {
    track('product_card_clicked', {
      productType: 'database',
      planTier: 'pro',
      source: 'dashboard',
    })
  }

  return <button onClick={handleClick}>Click me</button>
}

Event Definitions

All events must be defined as TypeScript interfaces in packages/common/telemetry-constants.ts:

/**
 * [Event description]
 *
 * @group Events
 * @source [what triggers this event]
 */
export interface MyFeatureClickedEvent {
  action: 'my_feature_clicked'
  properties: {
    /** Description of property */
    featureType: string
  }
  groups: TelemetryGroups
}

Add the new interface to the TelemetryEvent union type so useTrack picks it up. @group Events and @source must be accurate.

Review Rules

When reviewing a PR, flag these as required changes:

  1. Naming violations — event not following [object]_[verb] snake_case, or using an unapproved verb
  2. Property violations — not camelCase, generic names, or inconsistent with similar events
  3. Deprecated hook — any usage of useSendEventMutation instead of useTrack
  4. Unnecessary view tracking — events that fire on page load without user interaction
  5. Inaccurate docs@page/@source descriptions that don't match the actual implementation

When a PR adds user-facing interactions (buttons, forms, toggles, modals) without tracking, suggest:

  • "This adds a user interaction that may benefit from tracking."
  • Propose the event name following [object]_[verb] convention
  • Propose the useTrack() call with suggested properties

When checking property consistency, search packages/common/telemetry-constants.ts for similar events and verify property names match.

Well-Formed Event Examples

From the actual codebase:

// User copies a connection string
track('connection_string_copied', {
  connectionType: 'psql',
  connectionMethod: 'transaction_pooler',
  connectionTab: 'Connection String',
})

// User enables a feature preview
track('feature_preview_enabled', {
  feature: 'realtime_inspector',
})

// User clicks a banner CTA
track('index_advisor_banner_dismiss_button_clicked')

// Experiment exposure (fires on render — valid exception)
track('home_new_experiment_exposed', {
  variant: 'treatment',
})

Implementing New Tracking

To add tracking for a user action:

  1. Name the event[object]_[verb] using approved verbs only
  2. Choose properties — camelCase preferred for new events; check packages/common/telemetry-constants.ts for similar events and match their property names and casing
  3. Add interface to telemetry-constants.ts — with @group Events and @source JSDoc, add to the TelemetryEvent union type
  4. Add to componentimport { useTrack } from 'lib/telemetry/track', call track('event_name', { properties })

Verification checklist

  • Event name follows [object]_[verb] with approved verb
  • Event name is snake_case
  • Properties are camelCase and self-explanatory
  • Event defined in telemetry-constants.ts with accurate @page/@source
  • Using useTrack hook (not useSendEventMutation)
  • Not tracking passive views/appearances
  • No PII in event properties (emails, names, IPs, etc.)
  • Property names consistent with similar events

來自 supabase 的更多技能

studio-e2e-tests
supabase
撰寫並執行 Supabase Studio 的 Playwright E2E 測試。在收到要求時使用。
official
vitest
supabase
由 Vite 驅動、相容 Jest API 的 Vitest 快速單元測試框架。適用於撰寫測試、模擬、配置覆蓋率或處理測試相關工作時使用。
official
skill-creator
supabase
建立模組化技能的全面指南,可擴展 Claude 的功能,包含專業知識與工作流程。技能由必要的 SKILL.md 檔案(含 YAML 前置資料與 Markdown 指令)以及可選的捆綁資源(腳本、參考資料、素材)組成,這些資源按用途組織並逐步載入以節省上下文空間。圍繞具體使用範例設計技能;識別用於確定性任務的可重複使用腳本、用於領域知識的參考檔案,以及用於...的素材。
official
supabase
supabase
在執行任何涉及 Supabase 的任務時使用。觸發條件:Supabase 產品(資料庫、驗證、邊緣函數、即時功能、儲存、向量、排程、佇列);客戶端…
official
supabase-server
supabase
在撰寫 Supabase 伺服端程式碼時使用 — 包括 Edge Functions、Hono 應用程式、Webhook 處理器,或任何需要建立 Supabase 驗證與客戶端的後端環境。…
official
clickhouse-logs-queries
supabase
Write, review, and migrate Supabase logs queries against the ClickHouse-backed `logs` table (the `logs.all.otel` analytics endpoint). Use this whenever a task…
official
dev-toolbar-review
supabase
在審查涉及 packages/dev-tools/、packages/common/posthog-client.ts 的 PR 時使用
official
e2e-studio-tests
supabase
在 Studio 應用程式中執行端對端測試。當被要求執行端對端測試、執行 Studio 測試、Playwright 測試或測試功能時使用。
official