Review passes

Review passes — Intrinsic Value

Four passes on every user-facing surface before ship. Not just high-traffic — all of them.

PassLensQuestion
1 — SegallFocusOne job? One primary action? What can we remove entirely?
2 — ZinsserVoiceHuman? Clear? No clutter or pitch-deck?
3 — StrunkMechanicsCan I cut words? Active voice? One idea per sentence?
4 — BuffettTrustCandor on money, delete, sync, permissions?

Read WRITING_PHILOSOPHY.md first.

Order for new work: Segall → Zinsser → Strunk. Buffett when trust is on the line.


Surface taxonomy (all products)

CategoryExamples
NavigationTab labels, section headers, back titles
Primary actionsButtons, toolbar items, menus
Empty statesList zero, search miss, cold start
ExplainersSheets, "Why this?", settings footers
DestructiveDelete, sign out, discard
Errors & syncAlerts, banners, offline
AuthSign in, sign up, passkey, validation
CommerceTrial, subscribe, pricing, FAQ
MarketingHero, principles, comparison, waitlist
EmailTransactional subject + body
Voice / SiriSpoken confirmations (VOICE_INTENTS.md)
MetaApp Store, page <title>, OG description

Per-product inventory

Maintain a checklist in products/<app>-surfaces.md.

Columns:

Surface IDCategoryLocationSegallZinsserStrunkBuffettNotes

Tasteful: products/tasteful-surfaces.md (canonical inventory; add Segall column on next audit refresh)


Pass 1 — Segall (focus)

Every surface: screen, sheet, email, landing section, onboarding step.

RuleCheck
One jobThis surface answers one user question
One primary CTAAt most one loud action (.glassProminent / hero button)
Say noFeatures explained only when the user opened that path
Start with the questionUser intent before product vocabulary
Subtract firstRemove whole blocks before editing sentences

Segall questions:


Pass 2 — Zinsser (voice)

Every string in: empty states, body copy, marketing paragraphs, settings footers.

RuleCheck
Read aloudKitchen-table test
No jargon stackOne technical term max
Positive form"Add meals first" not "Nothing to suggest"
Product sheetMatches products/<app>.md
No engagement baitNo guilt, false urgency

Pass 3 — Strunk (mechanics)

Every string that survived Segall: buttons, nav, alert titles, email subjects.

RuleCheck
Omit needless words≥20% shorter?
Active voice"Meal saved." not "has been saved"
No banned wordsCOPY_STANDARDS.md
Button budget≤ 4 words when possible
Alert title budget≤ 6 words
Title Case buttonsiOS primary actions (patterns/PRIMARY_ACTION.md)

Pass 4 — Buffett (trust)

Every string in: delete, sync, sign out, pricing, trial, permissions, email, legal adjacency.

RuleCheck
What happenedPlain language
What's safeLocal data, cancel path
PermanenceNo false undo
CandorPrice, Apple refunds, who decides
TRUST_COPY.md shapesDelete, sync, email

Workflow

  1. Inventory — Add row for every surface (or batch by feature).
  2. Draft — Write or fix copy in product repo.
  3. Four passes — Mark columns ✅ in inventory.
  4. Parity — iOS ↔ web-app ↔ marketing for same concept.
  5. Ship gate — PR checklist: new strings passed all four.

PR checklist (paste in description)

## Copy
- [ ] Segall pass (one job, one primary CTA, subtract whole blocks)
- [ ] Zinsser pass (empty states, body)
- [ ] Strunk pass (buttons, nav, alert titles)
- [ ] Buffett pass (delete/sync/money if touched)
- [ ] Entity names (`ENTITY_NAMES.md` + product sheet)
- [ ] Inventory updated (`products/<app>-surfaces.md`) if new surface

Cursor / agent

  1. Read voice/WRITING_PHILOSOPHY.md
  2. Read voice/products/<app>.md
  3. For trust moments, read voice/TRUST_COPY.md
  4. Update inventory when adding surfaces