Atelier — UX Writing & Microcopy
The fastest way to make a polished interface feel cheap is the words. A pixel-perfect form with the
label "Submit", an error that says "Error: null", and an empty state that says "No data" reads as
unfinished — because it is. This skill treats copy as design: every visible string is a decision, on the
project's voice, doing a job.
Project memory: if ATELIER.md exists at the project root, read its Personality (the voice
traits) and Register first — they set the voice this copy must hold. Missing on substantial work?
Offer /atelier init (owned by the atelier router).
Suite map. atelier-ux decides the flows and which screen-states exist; this writes the words
in them. atelier-components builds the markup the copy lives in (labels, errors, empty states) and
calls here for the strings. atelier-harden owns the behavior of error/empty/form states and
locale formatting; this owns their words. The atelier-perf-a11y anti-slop gate runs the "copy
self-audit" Tell (and points here); atelier-review's CODE/COPY reviewer checks against this skill.
Deep reference: references/fundamentals-deepdive.md.
The flow
- Lock the voice (from
ATELIER.md / Direction) → 2. Inventory every visible string →
- Fix the high-stakes copy (errors, empty, destructive, primary CTAs) → 4. Labels & microcopy →
- Terminology consistency pass → 6. Self-audit (cut AI-cute, fake-precise).
1. Lock the voice
Voice is constant; tone flexes by moment. Pull the three personality words + register from ATELIER.md
(or the Direction Doc). Full method in references/voice-and-tone.md. The rule: voice is who you
are (calm, expert, warm — set once); tone is how you read in context (an error is plain and
reassuring; a success is brief; an upsell is light). One register per surface — don't slip between playful
and formal in the same flow.
2. Inventory every visible string
List them by type — they have different jobs and rules: actions/CTAs, form labels + helper text,
errors + validation, empty / loading / partial states, confirmations / destructive dialogs,
tooltips / hints, notifications / toasts, onboarding lines, nav labels, alt text,
footer / legal. You can't fix what you haven't enumerated.
3. Fix the high-stakes copy first
The strings that decide trust and task success (patterns in references/microcopy-patterns.md):
- Errors: what happened + why + how to fix. Human language, never a raw code or "null" alone, never
blame the user. "We couldn't save — you're offline. We'll retry when you reconnect." Preserve their input
(behavior is
atelier-harden).
- Empty states: onboard, don't apologize. Name the value + one clear first action. Never a bare "No
data" or blank panel.
- Destructive confirmations: name the consequence + the object + reversibility. "Delete 3 projects?
This can't be undone." Not "Are you sure?".
- Primary CTAs: verb + object, specific. "Create account", "Save changes", "Start free trial" — not
"Submit", "OK", "Click here".
4. Labels & microcopy
- Labels above inputs, always — a placeholder is not a label (it vanishes on focus, fails a11y).
Use placeholders only for format examples; put requirements in persistent helper text.
- Verb-first, specific, parallel — actions are verbs; sibling actions share grammar ("Edit / Duplicate
/ Delete", not "Edit / Duplication / Remove item").
- Sentence case for UI text by default (easier to read than Title Case); reserve Title/UPPER for brand
moments decided in direction.
- Helper > tooltip for anything required to complete a task (tooltips hide on touch and from keyboards).
5. Terminology consistency (one word per concept)
Pick one term per concept and use it everywhere — "Projects" is not sometimes "Workspaces" or "Boards".
Match the user's vocabulary, not the database's ("Billing", not "SubscriptionEntity"). Keep a tiny
glossary for the project; it prevents the slow drift that makes a product feel incoherent.
6. Self-audit (the anti-slop pass on words)
Re-read every visible string out loud and cut:
- AI-cute copy — forced wordplay, mock-poetic micro-meta ("Let's craft magic ✨"), fake-craftsman
labels. Plain functional copy beats clever-wrong copy every time.
- Fake-precise numbers —
92%, 4.1×, 13.4 lb invented for effect. Real (from the brand), an
explicitly-labelled mock, or cut.
- Duplicate CTA intents — "Get in touch" + "Contact us" + "Let's talk" = one intent → one label,
reused. (This is an
atelier-perf-a11y anti-slop Tell too.)
- Marketing slop — "seamless", "robust", "elevate", "empower", "unlock", "supercharge", "delve",
"in today's fast-paced world". Say the specific thing instead.
- Jargon / unclear referents / broken grammar — anything a first-time user wouldn't parse.
Operating principles
- Copy is design. A polished UI with placeholder words ships as slop. Every visible string is a decision.
- Clarity over cleverness, always. The plain version that one-shots comprehension beats the witty one
that needs a second read.
- Errors are a trust moment — say what happened, why, and how to fix it; never blame, never leak a stack trace.
- One voice, one term per concept — drift in either is what makes a product feel incoherent.
- Cut AI tells in words too — no fake precision, no forced whimsy, no duplicate CTAs, no buzzword filler.
1---2name: atelier-copy3description: Atelier suite — the UX-writing & microcopy layer. The words inside the interface are part of the design: button and action labels, form labels and helper text, error messages, empty-state and loading copy, confirmation and destructive-action dialogs, tooltips, onboarding lines, and notifications. Write copy that's clear, human, specific, and on-voice — verb-first actions, errors that say what happened + why + how to fix it, empty states that onboard, no jargon-as-label, no duplicate CTA intents, no fake-precise numbers, no AI-cute wordplay. Use whenever writing or fixing interface copy, microcopy, error/empty/loading text, labels, button text, or when the wording feels generic, confusing, robotic, or off-brand. This owns the WORDS only — which screens/states exist is atelier-ux, their production behavior (overflow, locale, validation) is atelier-harden, and the markup is atelier-components. Part of the Atelier suite.4---56# Atelier — UX Writing & Microcopy78The fastest way to make a polished interface feel cheap is the words. A pixel-perfect form with the9label "Submit", an error that says "Error: null", and an empty state that says "No data" reads as10unfinished — because it is. This skill treats copy as design: every visible string is a decision, on the11project's voice, doing a job.1213> **Project memory:** if **`ATELIER.md`** exists at the project root, read its **Personality** (the voice14> traits) and **Register** first — they set the voice this copy must hold. Missing on substantial work?15> Offer **`/atelier init`** (owned by the **`atelier`** router).16>17> **Suite map.** **`atelier-ux`** decides the flows and *which* screen-states exist; this writes the words18> in them. **`atelier-components`** builds the markup the copy lives in (labels, errors, empty states) and19> calls here for the strings. **`atelier-harden`** owns the *behavior* of error/empty/form states and20> locale formatting; this owns their *words*. The **`atelier-perf-a11y`** anti-slop gate runs the "copy21> self-audit" Tell (and points here); **`atelier-review`**'s CODE/COPY reviewer checks against this skill.22> Deep reference: `references/fundamentals-deepdive.md`.2324---2526## The flow27281. **Lock the voice** (from `ATELIER.md` / Direction) → 2. **Inventory every visible string** →293. **Fix the high-stakes copy** (errors, empty, destructive, primary CTAs) → 4. **Labels & microcopy** →305. **Terminology consistency** pass → 6. **Self-audit** (cut AI-cute, fake-precise).3132## 1. Lock the voice3334Voice is constant; tone flexes by moment. Pull the three personality words + register from `ATELIER.md`35(or the Direction Doc). Full method in **`references/voice-and-tone.md`**. The rule: **voice is who you36are** (calm, expert, warm — set once); **tone is how you read in context** (an error is plain and37reassuring; a success is brief; an upsell is light). One register per surface — don't slip between playful38and formal in the same flow.3940## 2. Inventory every visible string4142List them by type — they have different jobs and rules: **actions/CTAs**, **form labels + helper text**,43**errors + validation**, **empty / loading / partial states**, **confirmations / destructive dialogs**,44**tooltips / hints**, **notifications / toasts**, **onboarding lines**, **nav labels**, **alt text**,45**footer / legal**. You can't fix what you haven't enumerated.4647## 3. Fix the high-stakes copy first4849The strings that decide trust and task success (patterns in `references/microcopy-patterns.md`):50- **Errors: what happened + why + how to fix.** Human language, never a raw code or "null" alone, never51 blame the user. "We couldn't save — you're offline. We'll retry when you reconnect." Preserve their input52 (behavior is `atelier-harden`).53- **Empty states: onboard, don't apologize.** Name the value + one clear first action. Never a bare "No54 data" or blank panel.55- **Destructive confirmations: name the consequence + the object + reversibility.** "Delete 3 projects?56 This can't be undone." Not "Are you sure?".57- **Primary CTAs: verb + object, specific.** "Create account", "Save changes", "Start free trial" — not58 "Submit", "OK", "Click here".5960## 4. Labels & microcopy6162- **Labels above inputs, always** — a placeholder is **not** a label (it vanishes on focus, fails a11y).63 Use placeholders only for format examples; put requirements in persistent helper text.64- **Verb-first, specific, parallel** — actions are verbs; sibling actions share grammar ("Edit / Duplicate65 / Delete", not "Edit / Duplication / Remove item").66- **Sentence case** for UI text by default (easier to read than Title Case); reserve Title/UPPER for brand67 moments decided in direction.68- **Helper > tooltip** for anything required to complete a task (tooltips hide on touch and from keyboards).6970## 5. Terminology consistency (one word per concept)7172Pick one term per concept and use it everywhere — "Projects" is not sometimes "Workspaces" or "Boards".73Match the **user's vocabulary**, not the database's ("Billing", not "SubscriptionEntity"). Keep a tiny74glossary for the project; it prevents the slow drift that makes a product feel incoherent.7576## 6. Self-audit (the anti-slop pass on words)7778Re-read **every** visible string out loud and cut:79- **AI-cute copy** — forced wordplay, mock-poetic micro-meta ("Let's craft magic ✨"), fake-craftsman80 labels. Plain functional copy beats clever-wrong copy every time.81- **Fake-precise numbers** — `92%`, `4.1×`, `13.4 lb` invented for effect. Real (from the brand), an82 explicitly-labelled mock, or cut.83- **Duplicate CTA intents** — "Get in touch" + "Contact us" + "Let's talk" = one intent → one label,84 reused. (This is an `atelier-perf-a11y` anti-slop Tell too.)85- **Marketing slop** — "seamless", "robust", "elevate", "empower", "unlock", "supercharge", "delve",86 "in today's fast-paced world". Say the specific thing instead.87- **Jargon / unclear referents / broken grammar** — anything a first-time user wouldn't parse.8889---9091## Operating principles92- **Copy is design.** A polished UI with placeholder words ships as slop. Every visible string is a decision.93- **Clarity over cleverness, always.** The plain version that one-shots comprehension beats the witty one94 that needs a second read.95- **Errors are a trust moment** — say what happened, why, and how to fix it; never blame, never leak a stack trace.96- **One voice, one term per concept** — drift in either is what makes a product feel incoherent.97- **Cut AI tells in words too** — no fake precision, no forced whimsy, no duplicate CTAs, no buzzword filler.