writing-user-facing-copy

작성자: posthog

PostHog에서 사용자가 읽는 모든 텍스트(UI 라벨, 버튼, 툴팁, 빈 상태 및 오류 상태, 알림, 인앱 메시지 등)의 어조와 단어 선택을 설정합니다.

npx skills add https://github.com/posthog/posthog --skill writing-user-facing-copy

Writing user-facing copy

This is the operational gate for anything a person reads in the product or around it. Run it before writing or editing user-facing text, and whenever a code change introduces or changes a visible string.

Applies to: UI labels, buttons, form fields, tooltips, empty states, error and success messages, toasts and notifications, onboarding flows, emails, docs, and support replies. Does not apply to: code comments, commit messages, log lines, variable/function names, or other developer-only text.

Voice

Write the way a person would. Neutral and humane.

  • Sentence case. Capitalize only the first word and proper nouns. "Save as view", not "Save As View". "Product analytics", not "Product Analytics".
  • Be direct and friendly. Say what happened and what to do next.
  • Plain language, no jargon. Use the label the user sees, not the internal name. surveyPopupDelaySeconds becomes "Delay the survey popup".
  • Don't editorialize. State what is, not how exciting it is. Cut "powerful", "seamless", "effortless", "simply", "just", "easily", "supercharge", "unlock".
  • No sales-y or edgy copy. No marketing hooks, no clever one-liners, no hype.
  • American English spelling. "color", "analyze", "canceled".

Specific rules

No em-dashes

Do not use em-dashes (—) anywhere in user-facing copy. Do not substitute an en-dash either.

Prefer rewriting the sentence so the dash isn't needed. If a connector is unavoidable, use a hyphen with spaces, a comma, a colon, or split into two sentences.

  • ❌ "Save this view — you can reuse it later."
  • ✅ "Save this view. You can reuse it later."
  • ✅ "Save this view to reuse it later."

Also avoid the sentence shapes that lean on that dash, because they read as machine-written:

  • ❌ "This isn't just a filter, it's a saved view." (the "not just X, but Y" construction)
  • ❌ "It's fast, it's simple, it's yours." (rule-of-three padding)
  • ❌ Hedging preambles like "It's worth noting that…", "Keep in mind that…".

Write the plain version instead.

No punchy or clever phrasing

This is the failure mode that slips through even when you know the rule, so check for it specifically. It applies to every string, including headings, section titles, and button labels, not just body text.

The tells:

  • Antithesis ("X, not Y" / "X, they don't Y") used for effect. ❌ "Errors guide, they don't dead-end." → ✅ "Errors point to a next step."
  • A heading written to sound weighty. ❌ "The rules that are easy to break" → ✅ "Common mistakes".
  • A clever or dramatic closing line. ❌ "Never leave the user staring at a failure." → ✅ "Say what happened and what to do next."
  • Filler that sounds like a principle but adds nothing. ❌ "This is a tool people use to get work done." → cut it.
  • Emphasis the sentence doesn't need. ❌ "This will completely transform how you work." → ✅ "This changes how X works."

After drafting, re-read and cut anything that's there to sound good rather than to inform. If a line would feel out of place said plainly out loud to a colleague, rewrite it.

Errors and empty states point to a next step

Say what happened and give the next action. Don't stop at reporting that something failed.

  • ❌ "Something went wrong."
  • ✅ "Couldn't load your insights. Refresh the page, and if it keeps happening contact support."

How to talk about features

Use the names users see, and stay consistent across every surface.

Wizard

The setup tool is named Wizard. It confuses users as a description, because "wizard" reads like an old-style step-by-step form, not an AI. Users already have a mental model for AI agents.

  • Use "Wizard" only as the feature's proper name (the thing you're pointing at).
  • To explain what it does, always call it "the setup agent" or "the agent".

Examples:

  • ✅ "Wizard sets up PostHog for you. The setup agent installs the SDK and wires up your first events."
  • ✅ "Ask the agent to add error tracking."
  • ❌ "Use the wizard to walk through setup." (using "wizard" as a description)
  • ❌ "The wizard will guide you through each step." (reinforces the wrong mental model)

For any other feature, use its product-facing name exactly as it appears in the UI, and describe it in the terms users already understand.

When unsure

If you can't tell whether copy reads well, or whether a term is the right user-facing name, ask a human before shipping it.

posthog의 다른 스킬

error-tracking-hono
posthog
PostHog 오류 추적 for Hono
tuning-incremental-sync-config
posthog
동기화의 구성은 ExternalDataSchema에 저장되며, external-data-schemas-partial-update를 통해 언제든지 변경할 수 있습니다. 대부분의 변경은 비파괴적이며(다음 동기화에 적용됨), 일부 변경(sync_type 전환, 기본 키 변경)은 동기화된 데이터 손상을 방지하기 위해 신중한 처리가 필요합니다.
playwright-test
posthog
플레이라이트 테스트를 작성하고, 실행이 잘 되며, 불안정하지 않도록 하세요.
error-tracking-ruby
posthog
PostHog Ruby 오류 추적
authoring-log-alerts
posthog
PostHog 프로젝트의 서비스에 유용하고 노이즈가 적은 로그 알림을 작성합니다. 사용자가 로그에 대한 알림 설정을 요청하거나 추가해야 할 알림을 제안할 때 사용하세요.
making-scenes-tab-aware
posthog
Guides converting PostHog frontend scenes to be tab aware for internal scene tabs. Use when adding or refactoring a `SceneExport` scene, fixing state leaking…
posthog-survey-creator
posthog
PostHog에서 안내 대화를 통해 설문조사를 생성하고 구성합니다. 사용자가 설문조사를 만들거나, 사용자 피드백을 수집하거나, 실행하려 할 때 이 스킬을 사용하세요.
authoring-scouts
posthog
PostHog Signals 스카우트를 작성, 편집 및 조정하는 방법 — 프로젝트를 스캔하고 Signals 인박스에 보고서를 작성하는 예약된 에이전트입니다. 사용자가…