@elsahafy/ux-mcp-server 2.0.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,743 @@
1
+ {
2
+ "name": "Microcopy & UX Writing",
3
+ "description": "Comprehensive guide to writing clear, concise, user-friendly interface copy including buttons, labels, messages, and help text",
4
+ "principles": {
5
+ "clarity": {
6
+ "description": "Be crystal clear - users shouldn't have to guess meaning",
7
+ "guidelines": [
8
+ "Use simple, everyday words",
9
+ "Avoid jargon and technical terms",
10
+ "Be specific, not vague",
11
+ "One idea per sentence"
12
+ ],
13
+ "examples": {
14
+ "good": "Save changes",
15
+ "bad": "Persist modifications"
16
+ }
17
+ },
18
+ "conciseness": {
19
+ "description": "Say more with fewer words",
20
+ "guidelines": [
21
+ "Remove unnecessary words",
22
+ "Use active voice",
23
+ "Get to the point quickly",
24
+ "Respect user's time"
25
+ ],
26
+ "examples": {
27
+ "good": "Delete account",
28
+ "bad": "Click here to permanently delete your account from our system"
29
+ }
30
+ },
31
+ "consistency": {
32
+ "description": "Use same terms for same concepts throughout",
33
+ "guidelines": [
34
+ "Create a word list for your product",
35
+ "Same action = same word (Save, not Save/Store/Keep)",
36
+ "Consistent capitalization",
37
+ "Consistent tone"
38
+ ],
39
+ "examples": {
40
+ "good": "Sign in / Sign out (consistent)",
41
+ "bad": "Log in / Sign out (inconsistent)"
42
+ }
43
+ },
44
+ "user_centered": {
45
+ "description": "Write for users, not the system",
46
+ "guidelines": [
47
+ "Use 'you' and 'your'",
48
+ "Focus on user benefits",
49
+ "Address user's perspective",
50
+ "Show empathy"
51
+ ],
52
+ "examples": {
53
+ "good": "Your password was updated",
54
+ "bad": "Password update successful"
55
+ }
56
+ },
57
+ "actionable": {
58
+ "description": "Tell users what to do next",
59
+ "guidelines": [
60
+ "Start with verbs",
61
+ "Make actions obvious",
62
+ "Remove ambiguity",
63
+ "Guide users forward"
64
+ ],
65
+ "examples": {
66
+ "good": "Continue to payment",
67
+ "bad": "Next"
68
+ }
69
+ }
70
+ },
71
+ "voice_and_tone": {
72
+ "voice": {
73
+ "description": "Your brand personality - consistent across all writing",
74
+ "dimensions": [
75
+ "Formal vs Casual",
76
+ "Professional vs Playful",
77
+ "Serious vs Humorous",
78
+ "Authoritative vs Friendly"
79
+ ],
80
+ "example_voices": {
81
+ "mailchimp": "Friendly, casual, encouraging, sometimes quirky",
82
+ "stripe": "Professional, clear, confident, technical when needed",
83
+ "slack": "Friendly, conversational, supportive, slightly playful",
84
+ "gov_website": "Formal, authoritative, clear, accessible"
85
+ }
86
+ },
87
+ "tone": {
88
+ "description": "Emotional inflection - varies by context",
89
+ "situations": {
90
+ "success": {
91
+ "tone": "Positive, encouraging, celebratory",
92
+ "example": "Great! Your account is all set up."
93
+ },
94
+ "error": {
95
+ "tone": "Helpful, apologetic, solution-oriented",
96
+ "example": "We couldn't process your payment. Please check your card details."
97
+ },
98
+ "warning": {
99
+ "tone": "Cautious, clear, not alarming",
100
+ "example": "This action can't be undone. Are you sure you want to delete?"
101
+ },
102
+ "progress": {
103
+ "tone": "Encouraging, informative",
104
+ "example": "Almost there! Just one more step."
105
+ },
106
+ "empty_state": {
107
+ "tone": "Helpful, motivating, guiding",
108
+ "example": "No messages yet. Start a conversation to get things going!"
109
+ }
110
+ }
111
+ },
112
+ "tone_guidelines": [
113
+ "Match tone to user's emotional state",
114
+ "Be more formal in serious situations (security, legal)",
115
+ "Be encouraging when users accomplish something",
116
+ "Be apologetic and helpful when things go wrong",
117
+ "Never blame the user"
118
+ ]
119
+ },
120
+ "button_labels": {
121
+ "call_to_action": {
122
+ "primary": {
123
+ "description": "Main action on page",
124
+ "guidelines": [
125
+ "Start with action verb",
126
+ "Be specific about what happens",
127
+ "Create urgency when appropriate",
128
+ "Keep 1-3 words"
129
+ ],
130
+ "good_examples": [
131
+ "Create account",
132
+ "Start free trial",
133
+ "Download now",
134
+ "Continue to payment",
135
+ "Save changes",
136
+ "Send message"
137
+ ],
138
+ "bad_examples": [
139
+ "Submit",
140
+ "Click here",
141
+ "OK",
142
+ "Continue",
143
+ "Next"
144
+ ]
145
+ },
146
+ "secondary": {
147
+ "description": "Alternative or cancel action",
148
+ "examples": [
149
+ "Cancel",
150
+ "Go back",
151
+ "Skip for now",
152
+ "Learn more",
153
+ "Maybe later"
154
+ ]
155
+ }
156
+ },
157
+ "patterns": {
158
+ "save_actions": {
159
+ "save": "General save",
160
+ "save_changes": "Modified data",
161
+ "save_and_continue": "Multi-step process",
162
+ "save_draft": "Incomplete work",
163
+ "apply": "Apply settings"
164
+ },
165
+ "delete_actions": {
166
+ "delete": "General deletion",
167
+ "remove": "Remove from list/collection",
168
+ "clear": "Clear all data",
169
+ "discard": "Discard unsaved changes"
170
+ },
171
+ "navigation": {
172
+ "continue": "Multi-step flows",
173
+ "next": "Pagination, wizards",
174
+ "back": "Previous step/page",
175
+ "done": "Complete task",
176
+ "finish": "End of process"
177
+ },
178
+ "authentication": {
179
+ "sign_in": "Preferred (vs Log in)",
180
+ "sign_out": "Match sign in",
181
+ "sign_up": "Create account",
182
+ "create_account": "Alternative to sign up",
183
+ "register": "Less common, formal"
184
+ }
185
+ },
186
+ "destructive_actions": {
187
+ "pattern": "Clear about consequences",
188
+ "examples": {
189
+ "good": [
190
+ "Delete account permanently",
191
+ "Remove credit card",
192
+ "Cancel subscription"
193
+ ],
194
+ "bad": [
195
+ "Delete",
196
+ "Remove",
197
+ "Cancel"
198
+ ]
199
+ },
200
+ "confirmation": "Require second confirmation for irreversible actions"
201
+ },
202
+ "loading_states": {
203
+ "pattern": "Action verb + '...'",
204
+ "examples": [
205
+ "Saving...",
206
+ "Loading...",
207
+ "Processing payment...",
208
+ "Creating account...",
209
+ "Sending..."
210
+ ]
211
+ }
212
+ },
213
+ "labels": {
214
+ "form_labels": {
215
+ "guidelines": [
216
+ "Use sentence case (not Title Case)",
217
+ "End with colon only if necessary",
218
+ "Keep short (1-3 words)",
219
+ "Be specific"
220
+ ],
221
+ "examples": {
222
+ "good": ["Email address", "Phone number", "Full name", "Date of birth"],
223
+ "bad": ["Email:", "Enter Your Phone Number:", "Name"]
224
+ }
225
+ },
226
+ "field_hints": {
227
+ "purpose": "Clarify expected format or provide examples",
228
+ "placement": "Below label, above or below field",
229
+ "examples": {
230
+ "password": "At least 8 characters with one number",
231
+ "username": "3-20 characters, letters and numbers only",
232
+ "phone": "We'll use this to verify your account",
233
+ "promo_code": "Optional - Enter if you have one"
234
+ }
235
+ },
236
+ "required_optional": {
237
+ "approaches": {
238
+ "mark_required": "* indicates required field (most common)",
239
+ "mark_optional": "(optional) if most fields are required",
240
+ "both": "Clear indication either way"
241
+ },
242
+ "examples": {
243
+ "required": "Email address *",
244
+ "optional": "Middle name (optional)"
245
+ }
246
+ }
247
+ },
248
+ "placeholders": {
249
+ "purpose": "Show format example or hint",
250
+ "rules": [
251
+ "Never replace labels with placeholders",
252
+ "Show format examples",
253
+ "Don't repeat the label",
254
+ "Keep short and simple"
255
+ ],
256
+ "good_examples": {
257
+ "email": "name@example.com",
258
+ "phone": "555-123-4567",
259
+ "search": "Search products...",
260
+ "url": "https://example.com",
261
+ "date": "MM/DD/YYYY",
262
+ "credit_card": "1234 5678 9012 3456"
263
+ },
264
+ "bad_examples": {
265
+ "email": "Enter your email address",
266
+ "password": "Password",
267
+ "name": "What is your name?"
268
+ }
269
+ },
270
+ "error_messages": {
271
+ "structure": {
272
+ "identify": "What went wrong",
273
+ "explain": "Why it's wrong",
274
+ "instruct": "How to fix it"
275
+ },
276
+ "guidelines": [
277
+ "Be specific about the problem",
278
+ "Suggest how to fix it",
279
+ "Use plain language",
280
+ "Don't blame the user",
281
+ "Avoid technical jargon",
282
+ "Be polite and helpful"
283
+ ],
284
+ "examples": {
285
+ "required_field": {
286
+ "good": "Email address is required",
287
+ "bad": "This field is required"
288
+ },
289
+ "invalid_email": {
290
+ "good": "Please enter a valid email address (e.g., name@example.com)",
291
+ "bad": "Invalid email"
292
+ },
293
+ "password_too_short": {
294
+ "good": "Password must be at least 8 characters",
295
+ "bad": "Password too short"
296
+ },
297
+ "passwords_dont_match": {
298
+ "good": "Passwords don't match. Please re-enter.",
299
+ "bad": "Error: password mismatch"
300
+ },
301
+ "username_taken": {
302
+ "good": "This username is already taken. Try adding numbers or your name.",
303
+ "bad": "Username exists"
304
+ },
305
+ "network_error": {
306
+ "good": "Couldn't connect to server. Please check your internet connection and try again.",
307
+ "bad": "Error 500: Internal server error"
308
+ },
309
+ "payment_declined": {
310
+ "good": "Your card was declined. Please check your card details or use a different payment method.",
311
+ "bad": "Payment failed"
312
+ }
313
+ },
314
+ "tone": "Helpful and apologetic, never accusatory"
315
+ },
316
+ "success_messages": {
317
+ "guidelines": [
318
+ "Confirm what happened",
319
+ "Be specific",
320
+ "Tell user what to do next (if applicable)",
321
+ "Use positive, encouraging tone"
322
+ ],
323
+ "examples": {
324
+ "account_created": "Welcome! Your account has been created. Check your email to verify.",
325
+ "settings_saved": "Your settings have been saved.",
326
+ "message_sent": "Message sent successfully!",
327
+ "file_uploaded": "Photo uploaded. It will appear in your profile shortly.",
328
+ "subscription_cancelled": "Your subscription has been cancelled. You'll have access until March 1, 2026.",
329
+ "payment_complete": "Payment successful! You'll receive a confirmation email shortly."
330
+ },
331
+ "patterns": {
332
+ "checkmark_prefix": "✓ Changes saved",
333
+ "action_confirmation": "[Action] successful!",
334
+ "with_next_step": "[Confirmation] + [What's next]"
335
+ }
336
+ },
337
+ "help_text": {
338
+ "tooltips": {
339
+ "use_for": "Additional context, not critical information",
340
+ "keep_brief": "1-2 sentences maximum",
341
+ "examples": {
342
+ "cvv": "3-digit code on back of card",
343
+ "username": "You can't change this later",
344
+ "public_profile": "Anyone can view your public profile"
345
+ }
346
+ },
347
+ "inline_help": {
348
+ "use_for": "Important instructions or context",
349
+ "placement": "Below field label or input",
350
+ "examples": {
351
+ "password": "Must be at least 8 characters with one number and one special character",
352
+ "email_privacy": "We'll never share your email address",
353
+ "promo_code": "Enter your promo code if you have one"
354
+ }
355
+ },
356
+ "contextual_help": {
357
+ "description": "Help that appears based on user action",
358
+ "examples": {
359
+ "password_strength": "Shows strength as user types",
360
+ "character_count": "Shows remaining characters",
361
+ "validation_feedback": "Real-time format validation"
362
+ }
363
+ }
364
+ },
365
+ "empty_states": {
366
+ "structure": {
367
+ "headline": "Short, clear description of state",
368
+ "explanation": "Why it's empty (optional)",
369
+ "call_to_action": "How to get started"
370
+ },
371
+ "examples": {
372
+ "no_messages": {
373
+ "headline": "No messages yet",
374
+ "body": "Start a conversation to get things going!",
375
+ "cta": "Send your first message"
376
+ },
377
+ "no_search_results": {
378
+ "headline": "No results found",
379
+ "body": "Try adjusting your search or filters",
380
+ "suggestions": ["Check spelling", "Use fewer keywords", "Clear filters"]
381
+ },
382
+ "no_items_in_cart": {
383
+ "headline": "Your cart is empty",
384
+ "body": "Add items to your cart to continue shopping",
385
+ "cta": "Start shopping"
386
+ },
387
+ "no_notifications": {
388
+ "headline": "You're all caught up!",
389
+ "body": "No new notifications"
390
+ },
391
+ "no_files": {
392
+ "headline": "No files uploaded yet",
393
+ "body": "Drag and drop files here or click to browse",
394
+ "cta": "Upload your first file"
395
+ }
396
+ },
397
+ "tone": "Helpful and encouraging, not negative"
398
+ },
399
+ "loading_messages": {
400
+ "short_waits": {
401
+ "duration": "< 2 seconds",
402
+ "message": "Loading...",
403
+ "alternatives": ["Spinner only", "Progress bar"]
404
+ },
405
+ "medium_waits": {
406
+ "duration": "2-10 seconds",
407
+ "messages": [
408
+ "Loading your data...",
409
+ "Processing payment...",
410
+ "Creating your account...",
411
+ "Uploading file..."
412
+ ],
413
+ "add_progress": "Show progress bar or percentage"
414
+ },
415
+ "long_waits": {
416
+ "duration": "> 10 seconds",
417
+ "approach": "Show progress with encouraging messages",
418
+ "examples": [
419
+ "Uploading file... 45% complete",
420
+ "Processing large file... This may take a minute",
421
+ "Generating report... Almost there!"
422
+ ],
423
+ "keep_user_informed": "Update message as progress continues"
424
+ },
425
+ "indeterminate": {
426
+ "when": "Unknown duration",
427
+ "examples": [
428
+ "Please wait...",
429
+ "This may take a few moments",
430
+ "Processing your request..."
431
+ ]
432
+ }
433
+ },
434
+ "confirmation_dialogs": {
435
+ "destructive_actions": {
436
+ "title": "State action clearly",
437
+ "body": "Explain consequences",
438
+ "buttons": "Specific action + Cancel",
439
+ "example": {
440
+ "title": "Delete account?",
441
+ "body": "This will permanently delete your account and all your data. This action cannot be undone.",
442
+ "primary_button": "Delete account permanently",
443
+ "secondary_button": "Cancel"
444
+ }
445
+ },
446
+ "navigation_warnings": {
447
+ "use_when": "User has unsaved changes",
448
+ "example": {
449
+ "title": "Unsaved changes",
450
+ "body": "You have unsaved changes. Are you sure you want to leave?",
451
+ "primary_button": "Leave without saving",
452
+ "secondary_button": "Stay and save"
453
+ }
454
+ }
455
+ },
456
+ "notifications_toasts": {
457
+ "success": {
458
+ "examples": [
459
+ "✓ Saved",
460
+ "✓ Message sent",
461
+ "✓ File uploaded successfully"
462
+ ],
463
+ "duration": "3-5 seconds",
464
+ "dismissible": "Optional"
465
+ },
466
+ "error": {
467
+ "examples": [
468
+ "❌ Couldn't save changes. Please try again.",
469
+ "❌ Upload failed. File is too large.",
470
+ "❌ Connection lost. Check your internet."
471
+ ],
472
+ "duration": "Persist until dismissed",
473
+ "dismissible": "Yes"
474
+ },
475
+ "info": {
476
+ "examples": [
477
+ "ℹ️ Your session will expire in 5 minutes",
478
+ "ℹ️ New version available. Refresh to update.",
479
+ "ℹ️ Your report is being generated"
480
+ ],
481
+ "duration": "5-10 seconds or until dismissed"
482
+ },
483
+ "warning": {
484
+ "examples": [
485
+ "⚠️ Storage almost full (90%)",
486
+ "⚠️ Your trial ends in 3 days",
487
+ "⚠️ Unsaved changes"
488
+ ],
489
+ "duration": "Persist until user acts"
490
+ }
491
+ },
492
+ "onboarding": {
493
+ "welcome_messages": {
494
+ "guidelines": [
495
+ "Warm greeting",
496
+ "Brief value proposition",
497
+ "Clear next step"
498
+ ],
499
+ "examples": {
500
+ "new_user": "Welcome to [Product]! Let's get you set up in just a few steps.",
501
+ "returning": "Welcome back, [Name]! Here's what's new since your last visit.",
502
+ "trial": "Welcome! Your 14-day trial starts now. Let's create your first project."
503
+ }
504
+ },
505
+ "tooltips": {
506
+ "progressive_disclosure": "Show one tip at a time",
507
+ "dismissible": "Always allow skip/dismiss",
508
+ "examples": [
509
+ "Click here to create your first project",
510
+ "This is your dashboard where you'll see all your work",
511
+ "Use the sidebar to navigate between sections"
512
+ ]
513
+ },
514
+ "progress_indicators": {
515
+ "show_completion": "Profile 60% complete",
516
+ "encourage_action": "Add a profile photo to complete your profile",
517
+ "celebrate_milestones": "Great! You've completed all setup steps."
518
+ }
519
+ },
520
+ "settings_preferences": {
521
+ "section_headers": {
522
+ "examples": [
523
+ "Account settings",
524
+ "Privacy & security",
525
+ "Notifications",
526
+ "Billing & subscription"
527
+ ]
528
+ },
529
+ "setting_labels": {
530
+ "clear_and_specific": true,
531
+ "examples": {
532
+ "good": [
533
+ "Email me when someone comments on my post",
534
+ "Automatically save drafts every 5 minutes",
535
+ "Show profile to public"
536
+ ],
537
+ "bad": [
538
+ "Enable notifications",
539
+ "Auto-save",
540
+ "Public profile"
541
+ ]
542
+ }
543
+ },
544
+ "setting_descriptions": {
545
+ "when_to_use": "When setting needs clarification",
546
+ "examples": {
547
+ "two_factor": "Add an extra layer of security to your account",
548
+ "email_digest": "Get a weekly summary instead of individual emails",
549
+ "data_collection": "Help us improve by sharing anonymous usage data"
550
+ }
551
+ }
552
+ },
553
+ "navigation": {
554
+ "menu_items": {
555
+ "guidelines": [
556
+ "Use clear, familiar terms",
557
+ "Start with capital letter",
558
+ "Keep to 1-2 words",
559
+ "Be consistent"
560
+ ],
561
+ "good_examples": [
562
+ "Dashboard",
563
+ "Projects",
564
+ "Settings",
565
+ "Help",
566
+ "Profile"
567
+ ],
568
+ "bad_examples": [
569
+ "Portal",
570
+ "My stuff",
571
+ "Control panel",
572
+ "Info"
573
+ ]
574
+ },
575
+ "breadcrumbs": {
576
+ "format": "Home > Category > Subcategory > Current Page",
577
+ "use_separators": "> or / or ›",
578
+ "link_all_but_current": "Current page shouldn't be a link"
579
+ }
580
+ },
581
+ "search": {
582
+ "search_placeholder": {
583
+ "examples": [
584
+ "Search...",
585
+ "Search products",
586
+ "Search for people, files, or messages",
587
+ "What are you looking for?"
588
+ ],
589
+ "be_specific": "Tell users what they can search for"
590
+ },
591
+ "no_results": {
592
+ "structure": {
593
+ "headline": "No results for \"[query]\"",
594
+ "suggestions": "Try these tips:",
595
+ "tips": [
596
+ "Check your spelling",
597
+ "Use fewer keywords",
598
+ "Try more general terms"
599
+ ]
600
+ }
601
+ },
602
+ "search_suggestions": {
603
+ "show_popular": "Popular searches",
604
+ "show_recent": "Recent searches",
605
+ "autocomplete": "As user types"
606
+ }
607
+ },
608
+ "dates_times": {
609
+ "relative_dates": {
610
+ "recent": [
611
+ "Just now",
612
+ "2 minutes ago",
613
+ "1 hour ago",
614
+ "Yesterday",
615
+ "3 days ago"
616
+ ],
617
+ "use_when": "Recent activity (< 7 days)",
618
+ "fallback": "Show full date for older items"
619
+ },
620
+ "absolute_dates": {
621
+ "formats": {
622
+ "short": "Jan 24",
623
+ "medium": "Jan 24, 2026",
624
+ "long": "January 24, 2026",
625
+ "with_time": "Jan 24, 2026 at 3:45 PM"
626
+ },
627
+ "localize": "Use user's locale format"
628
+ },
629
+ "future_dates": {
630
+ "examples": [
631
+ "In 5 minutes",
632
+ "Tomorrow at 3:00 PM",
633
+ "Next Monday",
634
+ "In 3 days"
635
+ ]
636
+ }
637
+ },
638
+ "numbers_quantities": {
639
+ "large_numbers": {
640
+ "abbreviate": {
641
+ "1000": "1K",
642
+ "1000000": "1M",
643
+ "1000000000": "1B"
644
+ },
645
+ "use_when": "Space is limited (social media counts)",
646
+ "show_full": "On hover or in expanded view"
647
+ },
648
+ "counts": {
649
+ "examples": {
650
+ "items": "1 item / 5 items",
651
+ "users": "1 user / 23 users",
652
+ "messages": "1 message / 100 messages"
653
+ },
654
+ "handle_plurals": "Programmatically (1 item, not 1 items)"
655
+ },
656
+ "ranges": {
657
+ "examples": [
658
+ "1-10 of 100",
659
+ "$50-$100",
660
+ "5-10 minutes"
661
+ ]
662
+ }
663
+ },
664
+ "accessibility_writing": {
665
+ "alt_text": {
666
+ "images": "Describe content and function",
667
+ "decorative": "Use empty alt='' for decorative images",
668
+ "examples": {
669
+ "good": "alt='Woman using laptop at coffee shop'",
670
+ "bad": "alt='Image123.jpg'"
671
+ }
672
+ },
673
+ "aria_labels": {
674
+ "when_to_use": "When visual label isn't sufficient",
675
+ "examples": {
676
+ "icon_button": "aria-label='Close dialog'",
677
+ "search": "aria-label='Search products'",
678
+ "nav": "aria-label='Main navigation'"
679
+ }
680
+ },
681
+ "link_text": {
682
+ "descriptive": "Link text should make sense out of context",
683
+ "good": "Read our privacy policy",
684
+ "bad": "Click here",
685
+ "avoid": "Learn more (too vague)"
686
+ }
687
+ },
688
+ "international": {
689
+ "avoid_idioms": [
690
+ "Don't use culture-specific phrases",
691
+ "Avoid humor that doesn't translate",
692
+ "Use clear, simple language",
693
+ "Avoid sports/cultural references"
694
+ ],
695
+ "date_time_formats": "Use locale-appropriate formats",
696
+ "currency": "Show currency symbol and code when ambiguous",
697
+ "units": "Use metric or imperial based on locale"
698
+ },
699
+ "best_practices": [
700
+ "Write in active voice",
701
+ "Use present tense",
702
+ "Be conversational but professional",
703
+ "Avoid ALL CAPS (except acronyms)",
704
+ "Use contractions for friendly tone (you're, we'll)",
705
+ "Write for humans, not search engines",
706
+ "Test copy with real users",
707
+ "Read aloud to check flow",
708
+ "Keep sentences short",
709
+ "Use parallel structure in lists",
710
+ "Be consistent with terminology",
711
+ "Create a style guide",
712
+ "Localize, don't just translate",
713
+ "Consider cultural context",
714
+ "Use positive language",
715
+ "Show don't tell when possible",
716
+ "Remove filler words",
717
+ "Front-load important information"
718
+ ],
719
+ "content_style_guide": {
720
+ "capitalization": {
721
+ "sentence_case": "Preferred for most UI text",
722
+ "title_case": "Page titles, headlines",
723
+ "all_caps": "Avoid except acronyms (API, URL)",
724
+ "examples": {
725
+ "sentence": "Save your changes",
726
+ "title": "Getting Started Guide",
727
+ "avoid": "SAVE YOUR CHANGES"
728
+ }
729
+ },
730
+ "punctuation": {
731
+ "periods": "Use in full sentences, not button labels",
732
+ "exclamation_points": "Use sparingly for excitement",
733
+ "question_marks": "Use in questions, confirmations",
734
+ "colons": "Generally avoid in form labels",
735
+ "ellipsis": "For loading states or truncation"
736
+ },
737
+ "numbers": {
738
+ "spell_out": "One through nine",
739
+ "use_numerals": "10 and above",
740
+ "exceptions": "Dates, times, percentages, money always use numerals"
741
+ }
742
+ }
743
+ }