Mỗi chữ là một quyết định

Side-by-side anti-pattern vs đúng VN voice cho 8 surface phổ biến. Brand rotates KHI / An Nhien / A-Kryphan để show tone shift. Doc đầy đủ ở MICROCOPY.md.

Archetype C — Landing Warm aesthetic v0.5.11 · Iter 44C

7 Nguyên tắc VN Voice

  1. Ngắn gọn — câu <12 từ, message <2 câu. Cắt "rất", "thì", "là", "mà".
  2. Anh/em personal — không xưng B2B — tone match user, không cứng.
  3. Câu chủ động — tránh "được", "bị". Tiếng Việt mạnh ở chủ động.
  4. Số liệu cụ thể — "Còn 2 slot 19h" beats "Còn ít chỗ".
  5. Verb + Object — "Đặt lịch tư vấn" beats "Gửi" / "Submit".
  6. Vấn đề + Fix — error luôn chỉ rõ cách sửa, không "Required".
  7. Tone match emotion — onboarding warm, error calm, destructive explicit.
SURFACE 01

Button label — Form CTA

KHI Wellness
✕ Anti-pattern
Email
✓ Đúng VN voice
Email
Em gửi xác nhận buổi tập qua email này.
RULE
Verb-only / generic ("Submit", "OK", "Gửi") làm user phải suy luận button làm gì. Verb + Object ("Đặt buổi trải nghiệm") cho user thấy chính xác sẽ happen. Placeholder = ví dụ thật, không phải instruction.
Microsoft Writing Style Guide — button text; NN/G — placeholder antipattern
SURFACE 02

Form error — Phone validation

KHI Wellness
✕ Anti-pattern
Số điện thoại *
Bắt buộc
✓ Đúng VN voice
Số điện thoại
Cần 10 chữ số bắt đầu 0 (vd 0901 234 567). Hiện mới 4 số.
RULE
"Bắt buộc" nói cái user đã biết (có dấu *). Error đúng = vấn đề là gì + cách fix: rule cụ thể (10 chữ số bắt đầu 0), ví dụ format, và state hiện tại (4 số) để user biết còn thiếu gì.
Nielsen Norman Group — Error-Message Guidelines (heuristic #9)
SURFACE 03

Empty state — Booking list

KHI Wellness
✕ Anti-pattern

No data

There are no items to display.

✓ Đúng VN voice
🗓

Chưa đặt lịch nào

Tuần này còn slot 7h, 18h, 19h30. Đặt thử buổi đầu — miễn phí cho member mới.

RULE
"No data" không informative. Empty đúng = Chưa có X + value/lý do + CTA verb cụ thể. Số liệu cụ thể ("7h, 18h, 19h30") + value prop ("miễn phí cho member mới") giúp user vượt rào tâm lý.
NN/G — Empty State Interface Design; Shopify Polaris — context-aware tone
SURFACE 04

Destructive confirm — Delete photos

An Nhien
✕ Anti-pattern

Are you sure?

This action cannot be undone.

✓ Đúng VN voice

Xoá 5 ảnh trầm hương?

Không hoàn tác được. Link đã chia sẻ với khách sẽ hỏng.

RULE
"Are you sure?" mơ hồ — user không biết action là gì, hệ quả ra sao. Destructive đúng = Verb + số cụ thể + object trong title + explicit consequence trong body + CTA match title verb. Cancel label = "Giữ lại" (không "Huỷ" — overload với "Xoá"). Destructive button bên phải (eye lands last).
NN/G — Proximity of Consequential Options; Apple HIG — destructive placement
SURFACE 05

Loading state — Long upload

An Nhien
✕ Anti-pattern
Loading...
Please wait.
✓ Đúng VN voice
Đang tải ảnh 3/5 — 45%
RULE
"Loading..." không cho user biết loading cái gì, bao lâu nữa, có thể cancel không. Loading đúng = Đang + verb + object + (số nếu >10s) + cancel CTA nếu unmeasurable. NN/G threshold: >10s phải có progress + cancel để tránh "hopeless wait".
NN/G — Skeleton Screens & response time thresholds; Microsoft Style — "explain what's going on"
SURFACE 06

Success toast — Order saved

An Nhien
✕ Anti-pattern
Success! Your order was placed successfully.
✓ Đúng VN voice
Tạo đơn #1234 xong. Em gửi xác nhận qua email trong 2 phút.
RULE
"Success!" là phản xạ của user sau khi click — toast không cần lặp. Confirmation đúng = past-tense verb + object cụ thể + next-step expectation. Order # để user track, "2 phút" giải toả lo lắng "email tới chưa?".
Mailchimp — plainspoken; Atlassian — practical/direct tone
SURFACE 07

Form field — Label + Placeholder + Helper 3-layer

A-Kryphan
✕ Anti-pattern
Email của bạn: *
Bắt buộc
✓ Đúng VN voice
Email
Mình chỉ gửi bài mới — không spam, không sale.
RULE
Anti dư mọi thứ: "của bạn" (đã rõ là user), ":" (visual noise), "*" (marker thừa khi đã có "Bắt buộc"), placeholder lặp label, helper vô nghĩa. 3-layer đúng: Label = noun ngắn · Placeholder = ví dụ thật · Helper = lý do. A-Kryphan voice: "mình" reflective, "không spam, không sale" = explicit value prop kiểu blogger.
Material 3 — "you/your direct"; NN/G — placeholder vs persistent helper
SURFACE 08

404 page — Voice across 3 brand

A-Kryphan
✕ Anti-pattern
!

404 Not Found

The page you are looking for does not exist.

✓ Đúng (3 brand voice)
KHI Wellness
Trang này không có nữa
Có thể link cũ rồi. Em đưa anh về trang lịch tập nhé?
An Nhien
Trang đã đi vắng
Không tìm thấy đường này. Trở về vườn trầm chính.
A-Kryphan
404 — chưa viết bài này
Hoặc đã xoá. Hoặc link sai. Mình cũng không nhớ.
RULE
"404 Not Found" là HTTP code dump — không phải copy. Cùng 1 surface, voice phải khác theo brand archetype: KHI (caregiver — "em đưa anh"), An Nhien (sage — "đi vắng", "vườn trầm"), A-Kryphan (creator dry — "mình cũng không nhớ"). Cùng utility, khác personality.
Mailchimp — voice constant, tone shifts; Atlassian — brand archetype mapping