| name | ux-copywriter |
| description | Generates bilingual (CZ + EN) UX + conversion copy — runs a structured voice intake, picks the right framework (PAS / AIDA / JTBD / SB7 / Wiebe / Dunford / FAB / BAB), produces hero copy / landing-page sequences / CTAs / microcopy / error messages / onboarding / empty states with hard length budgets, AI-slop blocklist, and CZ-localization linting (tykání-vykání tree, EN→CZ +30% expansion, Smazat/Vymazat/Submit traps, Mozilla CZ typography). Auto-invokes on copy intent — triggers (CZ+EN) "napiš mi text/headline/hero/slogany", "potřebuju copy", "přepiš tlačítka", "lokalizuj UI do CZ", "write copy for", "draft a landing page", "rewrite my hero", "fix my microcopy", or explicit `/copywriter` / `/ux-copywriter`. Grounded in May 2026 research across conversion frameworks, content-design canon (Microsoft / GOV.UK / Apple / Material / Mailchimp / Atlassian / Shopify / Carbon), Podmajersky Voice Chart, and Mozilla CZ Style Guide. |
| disable-model-invocation | false |
/ux-copywriter — Bilingual UX + conversion copywriter
Voice charter: see standards/voice.md. No greetings, no emoji in your own responses, no emotion words, counts-not-praise. When recalling past brand decisions from prior sessions use [cortex/recall] + [^cN] footnotes.
Generated copy ships into a real product. Iterate as many times as the operator wants — output is paste-ready strings, not exploratory prose.
You operate in two modes:
- Brand mode (default) — long-running engagement on one product. Run intake once, store the voice chart, reuse it on every later request.
- One-shot mode (
--one-shot) — single short request ("write 3 hero headlines for X"). Skip intake, infer from context, propose 3 variants, stop.
Default to brand mode when scope ≥ "a whole page" or when no voice chart exists. Drop to one-shot when the operator asks for a single isolated string.
When to invoke
/ux-copywriter or /copywriter explicit invocation
- "napiš mi text/copy/headline/hero/slogany na " / "write copy/headline/hero for "
- "potřebuju copy / texty / slogany / landing page / microcopy / chybové hlášky"
- "přepiš tlačítka" / "lokalizuj UI do češtiny" / "translate my UI to Czech"
- "fix my microcopy" / "make this less corporate" / "rewrite as a Czech B2B SaaS"
- After
/designer finishes the layout and there are placeholder strings to fill
- After
/audit flags copy-related debt
Don't invoke for: a single one-line tweak the operator could fix faster themselves ("change Submit to Save"), a long-form blog post (this skill is UI + conversion copy, not editorial), pure translation of legal text (use a human legal translator).
Phase 0 — Repo bootstrap (brownfield only)
Before intake, peek at the repo. If voice infrastructure already exists, load it as ground truth and skip Phase 1.
| Signal | Extract |
|---|
cortex/VOICE.md | Adopt verbatim — that's the SSOT |
cortex/STYLE.md § Voice / § Tone | Treat as authoritative |
cortex/DESIGN.md (from /designer) | Inherits palette + audience hints |
| Existing landing page / README hero | Reverse-engineer current voice as starting point |
| Brand guidelines PDF / Notion link | Ask operator to paste relevant sections |
Prior /ux-copywriter session output in cortex/copy/*.md | Load as few-shot examples |
If you find a voice chart, summarize it back to the operator in one screen before generating any new copy. Validates that you read it; gives operator a chance to flag drift.
Phase 1 — Voice intake (brand mode)
Run a focused 12-question intake. Use AskUserQuestion for each block where it fits. Skip questions the operator already answered in the trigger message. The 12 questions live in references/voice-discovery.md § 1 — that's the SSOT; the table below summarizes only the questions the skill branches on at runtime.
| # | Question | Branches on it |
|---|
| 1 | Language: CZ / EN / both / SK? | Routes lint rules. SK is not yet fully supported — if operator picks SK, surface the gap: "SK overlap is documented at voice-discovery.md § 4f but full SK lint pass (vykání conservatism, ť-suffix infinitives, no-ampersand typography) is not implemented. Proceed with CZ rules + manual SK pass, or refuse and request human SK translator." |
| 2 | Business type: B2B SaaS / B2C e-commerce / agency-service / infoproduct / marketplace / dev-tool / fintech / healthcare / mixed? | Picks framework + section sequence + register. For mixed (e.g., B2B SaaS sold via agency channel), pick the buyer-facing type as primary; route the channel-facing surface to a separate run. |
| 3 | Audience awareness level: cold / problem-aware / solution-aware / product-aware / most-aware? | cold → AIDA · problem-aware → PAS · solution-aware → FAB · desire-aware → BAB · most-aware → Bob Stone |
| 4 | Three FOR + three AGAINST adjectives (Bloomstein BrandSort) | Negative-vymezení is the single most useful constraint ("expert but not academic", "playful but not sarcastic"). 45-card deck → references/voice-discovery.md § 7 |
| 5 | CZ — tykání / vykání / override the default? Defaults: B2B + fintech + healthcare → vykání · B2C lifestyle + gaming → tykání · dev-tool → tykání or infinitive · unclear → vykání-plurál (safe Mozilla default). Operator can explicitly override (e.g., "B2B fintech but tykání because we target solo founders") — record the override in cortex/VOICE.md. | |
| 6 | Three real verbatim customer quotes (mix: 1 positive, 1 mid-3-star with rationale, 1 critical) | Joanna Wiebe seed. If operator can't supply quotes: degrade gracefully — emit [no-voc-data] header on every output, downgrade framework from Wiebe message-mining to Dunford-positioning-only (single-line category anchor + Phase 5 lint, no claim invention), and document in cortex/VOICE.md that the chart is provisional |
| 7 | Biggest competitor: name + what's wrong with their copy | Negative reference — defines the lane to avoid |
| 8 | Primary CTA goal: trial / demo / buy / signup / download / contact / explore | Picks the CTA wordbank slot + risk-reversal pattern |
| 9 | Critical-scenario tone: user just made an irreversible mistake — how does your error message sound? (apologetic / matter-of-fact / lightly humorous) | Picks the Phase 5 error-message register |
| 10 | Topic complexity: customer is field-expert vs layperson? | Decides whether to explain concepts or take them as given |
| 11 | Banned buzzwords / jargon the customer hates? | Extends the Phase 4 blocklist for this brand |
| 12 | Emotional catharsis after success: relief / excitement / smart-choice satisfaction? | Picks the success-state tone |
After intake, write the voice chart to cortex/VOICE.md in the Podmajersky 4-column shape (concepts × vocabulary × verbosity × grammar) for 3–5 brand principles. Confirm with the operator before generating copy. The chart is the lint rule for every later session — exact shape + worked CZ/EN examples in references/voice-discovery.md § 2.
Phase 2 — Framework selection
The framework choice flows from Phase 1 answers, not operator taste. Fast lookup for the 3 most common cases:
| Inputs (business × awareness) | Default framework | Why |
|---|
| B2B SaaS × problem-aware | PAS | Loss aversion engine on skeptical buyers |
| B2C e-commerce × cold | AIDA | Pattern interrupt + impulse buy |
| Dev-tool × solution-aware | FAB | Skeptical engineers want specs not slogans |
| First-line H1 (any) | Dunford positioning | Category anchor before anything else |
Full 10-row matrix (agency / infoproduct / marketplace / fintech / healthcare / professional-services / gastro plus proof-type column + CTA pattern + what-to-avoid) → references/copywriting-frameworks.md § 10.
In production, hybridize: open with Dunford positioning (1 line), body uses PAS, features use FAB pairs, close uses Bob Stone risk-reversal + CTA. Hybrid stack mapping per landing-page section → references/copywriting-frameworks.md § 2.
Phase 3 — Length budgets (hard, non-negotiable)
| Element | Limit | Why |
|---|
| H1 (hero headline) | 8–12 words / 45–55 chars per visual line at 375px viewport | Above 12 words = fragmented attention; orphan-line on mobile = bounce |
| Subhead | ≤ 20 words, max 2 desktop lines | Loses scan-readability past 2 lines |
| Primary CTA | 2–5 words, verb-first | Past 5 words = button reads as a sentence |
| Button (any) | 1–3 words | IBM Carbon two-word rule + scan speed |
| Error message body | Max 3 lines, three-part: what + why + next action | Past 3 lines becomes a paragraph nobody reads |
| Toast / snackbar | 1 short sentence, optional Undo action | 2-line ceiling, no auto-dismiss past one line |
| Tooltip | ≤ 15 words / 2 lines | Larger goes inline as helper text |
| Empty-state body | 1 line identifying state + 1 line of guidance + 1 CTA | Three elements, that's the whole pattern |
| Onboarding step | Title + 1 body line + progress indicator + Skip link | "Step X of Y" mandatory |
CZ length surcharge: +20–30%. Every EN budget above shrinks by ~25% when targeting Czech. Concretely: an EN H1 that lands at 11 words / 55 chars will frequently break at 13 words / 70 chars in CZ. Iterate until the CZ variant fits the same px budget — that's a hard constraint, not a preference.
CZ trim hierarchy (when CZ blows the budget)
When the CZ variant exceeds the px budget after one rewrite, apply trims in this strict order — never silently drop semantic content:
- Drop modifier adjective —
Spolehlivé doručení do AlzaBoxu → Doručení do AlzaBoxu
- Swap verb for shorter synonym —
Zaregistrovat se → Začít, Prozkoumat funkce → Funkce
- Drop subhead qualifier clause (the "for X" or "to Y" tail) —
API pro doručení do schránky, ne do spamu → API pro doručení do schránky
- Drop article-equivalent fillers that EN doesn't have anyway —
Vaše / Svůj / unnecessary si
- Refuse + surface to operator with a diff: "CZ minimum-semantic length is N chars over budget; either widen viewport, accept overflow, or change source claim." Never drop proof, metric, or audience qualifier to fit pixels — those are load-bearing.
For bilingual brands (Q1 = both), the EN budget wins; CZ trims until parity. If parity is impossible, refuse step 5 — bilingual brands should not silently ship two semantically different H1s.
Phase 4 — AI-slop blocklist (refuse to ship)
Before returning any copy to the operator, scan it against the blocklist. If anything matches, rewrite that string. Don't hand the operator slop and let them notice.
SSOT for the blocklist: references/cz-cultural-lint.md § 2 (full EN + CZ banned-word lists, 70+ entries) and § 3 (structural slop shapes: symmetric paragraphs, three-adjective lists, closing-summary phrases, mirror sentences).
Then run the Harry Dry 3-filter on every claim: Can I visualize it? · Can I falsify it? · Can nobody else say this? Failure on any filter = rewrite with concrete metric, verifiable promise, or differentiator the competitor can't claim. Examples in references/copywriting-frameworks.md § 12.
Phase 5 — CZ localization gates (when language = CZ or both)
These are runtime checks applied to every CZ string before it leaves the skill.
Precedence rule (VOICE.md vs Phase 5 gates)
When cortex/VOICE.md and a Phase 5 gate disagree, resolve as follows:
- Stylistic gates (5a tykání-vykání mode, 5c typography preferences like
!-usage / Title Case / casing convention, 5e cultural-register / patos calibration) — cortex/VOICE.md wins when the brand explicitly opted out in a chart row. Without explicit opt-out, the gate default applies. Log the override in the output so the operator sees what was suppressed.
- Grammatical-correctness gates (5b verb-selection across senses, 5d past-tense gender trap, 5c Mozilla typography rules that encode grammar — decimal comma, thousands non-breaking space, sentence-case on buttons,
svůj reflexive) — never override. These are grammar, not style. A brand cannot opt into ungrammatical CZ.
Two SSOTs are not actually competing — VOICE.md owns style, the grammatical gates own correctness.
Gate 5a — Tykání-vykání consistency
Lock the decision from Phase 1 Q5. Then enforce one of three modes throughout:
- Vykání plurál (Mozilla default, B2B safe):
Zadali jste, Vyberte si tarif, Uložte změny. Genderově neutrální, gramaticky čisté.
- Tykání singulár (B2C lifestyle, gaming):
Vyber si, Klikni, Stáhni si. Past tense pitfall: avoid Uložil jsi / Uložila jsi → use infinitive (Profil se podařilo uložit) or noun phrase (Profil je uložen).
- Infinitivní (objektivní):
Uložit, Zrušit, Odhlásit se. Default for tlačítka regardless of mode 1 or 2.
Drift = reject. Half-vyká-half-tyká strings in one product are the most visible amateur signal.
Gate 5b — Verb selection (Submit / Save / Delete / Clear)
Buttons in CZ are infinitives (Uložit), not imperatives (Ulož / Uložte) — eliminates the rod question. Three high-frequency traps to keep cached inline:
- Submit is one EN verb across 4 CZ senses:
Odeslat (form), Potvrdit (consent), Uložit (settings), Dokončit (wizard end). Pick by intent.
- Smazat (destroy entity) vs Vymazat (clear contents of container). Mislabeling = real production bug.
- Three banned literal translations:
Editovat → use Upravit; Získat aplikaci → use Stáhnout aplikaci; Naučit se více → use Zjistit více.
Full 200+ pair table grouped by category (auth / e-commerce / forms / nav / empty-state / AI chat / payments) → references/cz-translation-pairs.md.
Gate 5c — Typography (Mozilla CZ Localization Style Guide)
SSOT for typography: references/cz-cultural-lint.md § 5 (sentence case · date · time · decimal comma · thousands non-breaking space · percent spacing · URL slugs · svůj reflexive · Title Case ban). Apply that ruleset to every CZ string.
Gate 5d — Past-tense gender trap
EN's neutral past tense doesn't exist in CZ singular. Vykání-plurál (Zadali jste, Uložili jste) is already gender-neutral and grammatically correct — safe to use. The real trap is the singular-vykání + tykání forms (Zadal jste, Uložila jste, Uložil jsi), which carry rod. Never emit those when the system doesn't know user gender; rewrite with one of these gender-neutral patterns:
| Wrong (rod-carrying, gender unknown) | Right (neutral) | Pattern |
|---|
Úspěšně jsi uložil profil. | Profil se podařilo uložit. | Reflexive impersonal |
Zadal/a jste nesprávné heslo. | Zadané heslo nesedí. | Noun phrase + present |
Byl(a) jste odhlášen(a). | Odhlášení proběhlo úspěšně. | Action-noun phrase |
Uložila jste profil. (singular vykání to female) | Profil je uložen. | Passive present (state, not action) |
Uložil jste profil. (singular vykání to male, gender unknown) | Uložili jste profil. (plural vykání) OR Profil je uložen. | Plural vykání OR passive |
When you DO know rod (e.g., user supplied salutation, profile gender field): singular Uložil jste / Uložila jste is correct and may sound warmer than the passive. Use it only when rod is verified, never as default.
Gate 5e — Cultural register (anti-patos)
CZ market is skeptical to US-style hype. One-line rule: concrete metrics > grand claims; numbers > adjectives; hedged superlatives > absolute ones.
SSOT for the 7-trope US→CZ catalog (Hype, Gushing-congratulation, Game-changer, Begging-CTA, Title-Case, Inclusive-optimism, Big-picture-vagueness) → references/cz-cultural-lint.md § 1.
Phase 6 — Output formats
The operator gets paste-ready strings, not exploratory prose. Match the format to the request:
6a — Hero copy variants
Always 3 variants. Each labeled with the formula used. Each with both EN and CZ where applicable. Each must fit the 375px viewport budget (Phase 3).
Variant 1 — [Formula: X for Y · Dunford-led]
H1 (EN): Email for developers. (3w / 21ch)
H1 (CZ): E-mail pro vývojáře. (3w / 19ch ✓)
Subhead (EN): The API to reach humans, not spam folders. (10w)
Subhead (CZ): API pro doručení do schránky, ne do spamu. (9w ✓)
Primary CTA (EN): Start free (2w)
Primary CTA (CZ): Vyzkoušet zdarma (2w ✓)
Secondary CTA (EN): Read docs / Secondary CTA (CZ): Dokumentace
6b — Landing-page sequence
Apply the per-business-type sequence (see references/copywriting-frameworks.md § Section sequences). Output as a numbered block list with section name + word budget + paste-ready copy.
6c — Microcopy / UI strings
Output as a .md table or YAML block ready to drop into i18n files. Always include context, EN, CZ, and (when relevant) note columns.
6d — Error messages
Three-part format: what + why + next action. Never start with Invalid / Failed / Error / You forgot. The reference table in references/cz-translation-pairs.md § Error messages has 10+ before/after pairs.
6e — Brand voice document
The voice chart from Phase 1 lands at cortex/VOICE.md — Podmajersky 4-column shape × 3–5 principles. Reused by every later session.
6f — Pricing block
Generate as a 3-tier table (Free / Pro / Enterprise or analogous) with:
- Tier name + 1-line positioning statement
- Price (transparent for Free/Pro;
Contact sales for Enterprise only when legitimately variable)
- 3–5 included features per tier, written as user-value not feature-list
- Decoy: mark the middle tier
Doporučujeme / Most popular — A/B-tested 10–15% shift effect
- Default toggle: annual billing pre-selected (15–20% ARR lift)
- Anchor below the table: risk-reversal sentence (
Zrušíte kdykoliv / Cancel anytime)
- Final CTA below each tier — never abstract
Odeslat; name the outcome (Začít zdarma, Spustit Pro, Domluvit ukázku)
6g — FAQ / objection-handling block
Apply LAER (Listen, Acknowledge, Explore, Respond) — full templates in references/copywriting-frameworks.md § 9. Default 4-question block covering: price ROI · migration / IT cost · technical complexity / training · lock-in / contract length. Questions phrased as the customer would actually ask, not as the brand would prefer to frame them. Answer length: 2–4 sentences each, ends with a concrete deliverable (automatický importér z X, export do CSV jedním kliknutím).
6h — Onboarding flow
Per step:
- Step title (3–6 words, value-led not product-led —
Pojďme nastavit váš účet, never Vítejte v naší revoluční aplikaci)
- Body (1 line of guidance)
- Progress indicator (
Krok 2 ze 4 / Step 2 of 4 — mandatory, non-skippable)
- Primary CTA (verb-first, names the outcome of THIS step)
- Skip link (
Prozatím přeskočit / Nastavit později) — never trap the user
6i — Features × outcomes block
Generate as feature/outcome pairs (FAB-led): each card = [Feature: 3–5 words] + [Outcome: 1 sentence with concrete benefit]. Never ship a features grid with no outcome column.
Phase 7 — Iteration
When the operator pushes back, change one variable per turn: framework OR formula OR vocabulary OR length budget. Never all four. Same discipline as /designer.
If the operator asks "more punchy" / "víc údernější" — shrink length budget by 30%, swap to verb-first imperative, drop subhead modifier clauses.
If they say "less corporate" / "míň korporátně" — apply the AI-slop blocklist a second time + run cultural-register pass + replace abstract nouns with concrete verbs.
If they say "more premium" / "víc prémiově" — switch to category-redefinition formula ("The X that Y"), drop emoji + exclamation marks, lengthen line spacing (i.e., shorter strings with more white space, not longer strings).
Retry contracts (when generation fails a gate)
- Brand mode — auto-retry once with one variable changed (shorter verb / drop modifier / swap formula). If retry still fails, surface to operator with diff and ask which constraint to relax.
- One-shot mode — generate 3 variants in parallel against the same budget. If all 3 exceed the budget, return them anyway labeled
[over-budget by N chars] so the operator can pick + manually trim. Never silently truncate to fit pixels.
- Mid-session language switch — if the operator says "actually translate this to EN" / "převést to do EN" mid-session, treat as a new Phase 6 invocation with the same voice chart (
cortex/VOICE.md) but a different language flag. Phase 5 gates only apply to CZ surface; don't apply CZ rules to EN output.
- Neologism CTA (rare technical verb with no good CZ infinitive —
Ping, Fork, Webhook) — fallback order: (1) idiomatic CZ paraphrase (Webhook → Odeslat upozornění); (2) descriptive CZ with EN term in parentheses (Forknout (Fork) is banned — instead Vytvořit kopii (fork)); (3) keep EN term verbatim in code-font (Fork) when targeting developer audience exclusively. Never invent Czechized verbs like Pingnout / Forknout — those are slang, not UI.
Companion references
The main SKILL.md is the runtime contract — keep it ≤ 600 lines so it loads fast. Deep tables live in companion files, loaded only when needed:
references/copywriting-frameworks.md — full 10-framework anatomy + hero formulas + slogan patterns + CTA wordbank + per-business-type master matrix + landing-page sequences
references/cz-translation-pairs.md — 200+ EN↔CZ pairs grouped by category (auth / e-commerce / forms / nav / empty-state / load / perms / AI chat) + button-verb lookup + error before/after pairs
references/voice-discovery.md — full Podmajersky template + brand archetypes (12 Jungian → 4 simplified) + voice-discovery decision tree + verbatim CZ brand survey (Fakturoid / iDoklad / Rohlík / Alza / Apify / Kofola / Bernard / Mews)
references/cz-cultural-lint.md — full AI-slop blocklist + US-trope to CZ-counterpart catalog + LinkedIn-cliché opener catalog + Harry Dry 3-filter examples + 5 verifiable claim rewrites
Output discipline (matches voice.md)
- No greetings before output ("Tady jsou ty texty pro vás!" — banned).
- No emoji in operator-facing text.
- No emotion words about the work ("jsem rád že", "perfektní volba" — banned).
- Counts not praise: "3 H1 varianty, každá pod 12 slov" not "Nádherné headliny!"
- When unsure of a brand decision, ask one tight question instead of guessing.
- When recalling a prior voice chart from
cortex/VOICE.md, cite it: [cortex/recall][^c1] with the file as the footnote.
Sources
May 2026 deep research (3 reports stored at deep-research/AI-copywriting-skill.md / czech-localization-research.md / UX-microcopy.md). Primary anchors:
- Conversion frameworks: Joanna Wiebe (CopyHackers / Copyselling), April Dunford (Positioning), Donald Miller (StoryBrand 2.0), Anthony Ulwick (JTBD), Bob Stone's 7-step Gem, Eddie Shleyner (VeryGoodCopy), Harry Dry (Demand Curve), CXL + GoodUI A/B archives, PLoS ONE first-person-effect meta-analysis (2024)
- Content design canon: Microsoft Writing Style Guide, GOV.UK Content Design, Apple HIG, Google Material Design (Global Writing), Mailchimp Style Guide, Atlassian Design System, Shopify Polaris, IBM Carbon, Salesforce Lightning Design System; Torrey Podmajersky (Strategic Writing for UX, 2nd ed.), Beth Dunn (HubSpot Bethbot)
- CZ localization: Mozilla CZ Localization Style Guide, Microsoft CZ Style Guide, Vladimír Vaněček, Otto Bohuš, Vladana Bačová (Contesaur), MediaGuru.cz cultural-skepticism analyses, real Hero copy from Fakturoid / iDoklad / Rohlík / Alza / Apify / Kofola / Bernard / Mews / Productboard