Improve UI copy using proven frameworks (JTBD, benefit-first, error patterns). Use when a designer wants to improve button text, error messages, empty states, or audit copy in a component. Supports interactive walkthrough mode for reviewing changes one-by-one, or batch mode for quick fixes.
Improve UI microcopy using proven UX writing frameworks.
For designers who think: "This button says 'Submit'... there has to be something better."
Focus on the outcome the user is hiring the product to achieve.
Lead with value, then the action.
Start with the verb, be direct.
Structure: [What happened] [Why] [What to do]
Structure: "No [items] yet. [Action] to [benefit]."
Structure: "[Consequence]. [Question]?"
Tell users what's happening, or build anticipation.
Calibrate tone on these spectrums:
| Dimension | Range |
|---|---|
| Formal ↔ Casual | "Please submit your request" ↔ "Send it over" |
| Serious ↔ Playful | "Error occurred" ↔ "Oops, something broke" |
| Respectful ↔ Irreverent | "We appreciate your patience" ↔ "Hang tight" |
| Matter-of-fact ↔ Enthusiastic | "File uploaded" ↔ "Your file is ready to go!" |
Match your product's personality. Banking apps stay serious; creative tools can be playful.
Same voice, different tone based on situation:
| Context | Tone | Example |
|---|---|---|
| Onboarding | Warm, encouraging | "Welcome! Let's get you set up." |
| Success | Celebratory but brief | "Done! Your changes are live." |
| Error | Calm, helpful | "Couldn't save. Check your connection." |
| Destructive action | Serious, clear | "This will permanently delete your data." |
| Empty state | Encouraging | "Nothing here yet—let's fix that." |
Quality checklist for any copy:
| Principle | Question to ask |
|---|---|
| Clear | Would a new user understand this? |
| Concise | Can I say this in fewer words? |
| Conversational | Does this sound like a helpful human? |
| Consistent | Am I using the same terms everywhere? |
User provides copy, get suggestions:
Input: "Submit"
Output: Table of options across frameworks
Scan a file or current context for copy to improve:
/dcode:copy -audit [file]
Step through each item with choices. Default for < 10 items.
Show all suggestions in a table. Use --batch flag or type a during walkthrough.
Check the input:
-audit flag → Audit mode-list → Show frameworks referencePresent improvements across relevant frameworks:
"Submit" improvements:
| Framework | Suggestion | Why |
|-----------|------------|-----|
| jtbd | Get my results | Focuses on outcome |
| action-first | Send request | Clear action |
| contextual | Save changes | Matches actual behavior |
Recommendation: [best option based on context]
If context is unclear, ask: "What does this button do?"
If no file specified:
Find UI copy in the file:
Categorize each item by type (button, error, empty, label, etc.)
--batch flag → Interactive walkthrough--batch flag → Batch modeFor each copy item:
────────────────────────────────────────
[1/4] Line 23: Button
────────────────────────────────────────
Current: "Submit"
Context: Form submission button
Suggestions:
1. "Get started" (jtbd)
2. "Save changes" (action-first)
3. "Continue" (minimal)
4. Keep as-is
5. Custom...
Choice (1-5, s=skip, a=all, r=apply-to-similar, q=quit):
| Key | Action |
|---|---|
1-5 | Pick suggestion |
s | Skip this item |
a | Show all remaining as table (exit walkthrough) |
r | Apply this choice to all remaining items of same type |
q | Quit audit |
e | Enter custom text |
? | Show help |
↵ | Accept first suggestion |
When user picks a suggestion and types r:
Apply "jtbd" style to all remaining buttons? (y/n)
> y
✓ Applied to 3 buttons:
- Line 45: "Submit" → "Complete purchase"
- Line 67: "Send" → "Send message"
- Line 89: "OK" → "Got it"
Moving to error messages...
Show all items in a table:
Copy audit for CheckoutForm.tsx:
| Line | Type | Current | Suggestion |
|------|------|---------|------------|
| 23 | button | "Submit" | "Complete purchase" |
| 31 | error | "Invalid" | "Card number looks wrong" |
| 45 | empty | "No items" | "Your cart is empty" |
| 52 | button | "Cancel" | Keep as-is |
Apply all? (y/n/review-each)
After walkthrough or batch review:
────────────────────────────────────────
Audit complete
────────────────────────────────────────
Changes:
✓ Line 23: "Submit" → "Complete purchase"
✓ Line 31: "Invalid" → "Card number looks wrong"
· Line 45: skipped
✓ Line 52: "Cancel" → kept as-is
Apply to file? (y/n/preview)
If preview:
If y:
| Flag | Behavior |
|---|---|
--batch | Skip walkthrough, show table |
--dry-run | Preview only, no prompts to apply |
--apply | Auto-apply first suggestion (use with caution) |
--framework X | Only suggest using framework X |
Improve a single piece of copy:
/dcode:copy "Click here to learn more"
List available frameworks:
/dcode:copy -list
Audit current file interactively:
/dcode:copy -audit
Audit specific file in batch mode:
/dcode:copy -audit src/components/LoginForm.tsx --batch
Get JTBD suggestions only:
/dcode:copy "Submit" --framework jtbd