claude-code-orchestrator-kit 1.4.0 → 1.4.15

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.
Files changed (219) hide show
  1. package/.claude/agents/business/workers/lead-research-assistant.md +199 -0
  2. package/.claude/agents/database/workers/database-architect.md +3 -3
  3. package/.claude/agents/database/workers/supabase-auditor.md +7 -7
  4. package/.claude/agents/development/workers/code-reviewer.md +17 -2
  5. package/.claude/agents/frontend/workers/nextjs-ui-designer.md +30 -0
  6. package/.claude/agents/health/workers/bug-fixer.md +31 -2
  7. package/.claude/agents/health/workers/bug-hunter.md +0 -1
  8. package/.claude/agents/health/workers/dead-code-hunter.md +167 -75
  9. package/.claude/agents/health/workers/dead-code-remover.md +217 -66
  10. package/.claude/agents/health/workers/dependency-auditor.md +83 -24
  11. package/.claude/agents/health/workers/dependency-updater.md +0 -1
  12. package/.claude/agents/health/workers/security-scanner.md +0 -1
  13. package/.claude/agents/infrastructure/workers/deployment-engineer.md +446 -0
  14. package/.claude/agents/infrastructure/workers/infrastructure-specialist.md +2 -2
  15. package/.claude/agents/meta/workers/meta-agent-v3.md +22 -0
  16. package/.claude/agents/testing/workers/integration-tester.md +1 -1
  17. package/.claude/agents/testing/workers/test-writer.md +16 -0
  18. package/.claude/commands/health-bugs.md +14 -281
  19. package/.claude/commands/health-cleanup.md +14 -281
  20. package/.claude/commands/health-deps.md +14 -281
  21. package/.claude/commands/health-metrics.md +51 -709
  22. package/.claude/commands/health-reuse.md +14 -311
  23. package/.claude/commands/health-security.md +14 -281
  24. package/.claude/commands/push.md +17 -3
  25. package/.claude/commands/speckit.implement.md +0 -11
  26. package/.claude/commands/speckit.taskstoissues.md +95 -5
  27. package/.claude/commands/worktree.md +150 -0
  28. package/.claude/scripts/gates/check-bundle-size.sh +0 -0
  29. package/.claude/scripts/gates/check-coverage.sh +0 -0
  30. package/.claude/scripts/gates/check-security.sh +0 -0
  31. package/.claude/scripts/release.sh +469 -94
  32. package/.claude/skills/algorithmic-art/LICENSE.txt +202 -0
  33. package/.claude/skills/algorithmic-art/SKILL.md +405 -0
  34. package/.claude/skills/algorithmic-art/templates/generator_template.js +223 -0
  35. package/.claude/skills/algorithmic-art/templates/viewer.html +599 -0
  36. package/.claude/skills/artifacts-builder/LICENSE.txt +202 -0
  37. package/.claude/skills/artifacts-builder/SKILL.md +74 -0
  38. package/.claude/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  39. package/.claude/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  40. package/.claude/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  41. package/.claude/skills/bug-health-inline/SKILL.md +221 -0
  42. package/.claude/skills/bug-health-inline/references/worker-prompts.md +182 -0
  43. package/.claude/skills/canvas-design/LICENSE.txt +202 -0
  44. package/.claude/skills/canvas-design/SKILL.md +130 -0
  45. package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  46. package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  47. package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  48. package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  49. package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  50. package/.claude/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  51. package/.claude/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  52. package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  53. package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  54. package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  55. package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  56. package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  57. package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  58. package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  59. package/.claude/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  60. package/.claude/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  61. package/.claude/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  62. package/.claude/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  63. package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  64. package/.claude/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  65. package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  66. package/.claude/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  67. package/.claude/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  68. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  69. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  70. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  71. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  72. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  73. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  74. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  75. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  76. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  77. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  78. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  79. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  80. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  81. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  82. package/.claude/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  83. package/.claude/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  84. package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  85. package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  86. package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  87. package/.claude/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  88. package/.claude/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  89. package/.claude/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  90. package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  91. package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  92. package/.claude/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  93. package/.claude/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  94. package/.claude/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  95. package/.claude/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  96. package/.claude/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  97. package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  98. package/.claude/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  99. package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  100. package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  101. package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  102. package/.claude/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  103. package/.claude/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  104. package/.claude/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  105. package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  106. package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  107. package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  108. package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  109. package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  110. package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  111. package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  112. package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  113. package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  114. package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  115. package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  116. package/.claude/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  117. package/.claude/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  118. package/.claude/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  119. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  120. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  121. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  122. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  123. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  124. package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  125. package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  126. package/.claude/skills/changelog-generator/SKILL.md +104 -0
  127. package/.claude/skills/cleanup-health-inline/SKILL.md +224 -0
  128. package/.claude/skills/code-reviewer/SKILL.md +209 -0
  129. package/.claude/skills/code-reviewer/references/code_review_checklist.md +103 -0
  130. package/.claude/skills/code-reviewer/references/coding_standards.md +103 -0
  131. package/.claude/skills/code-reviewer/references/common_antipatterns.md +103 -0
  132. package/.claude/skills/code-reviewer/scripts/code_quality_checker.py +114 -0
  133. package/.claude/skills/code-reviewer/scripts/pr_analyzer.py +114 -0
  134. package/.claude/skills/code-reviewer/scripts/review_report_generator.py +114 -0
  135. package/.claude/skills/content-research-writer/SKILL.md +538 -0
  136. package/.claude/skills/deps-health-inline/SKILL.md +227 -0
  137. package/.claude/skills/frontend-aesthetics/SKILL.md +51 -396
  138. package/.claude/skills/git-commit-helper/SKILL.md +203 -0
  139. package/.claude/skills/lead-research-assistant/SKILL.md +199 -0
  140. package/.claude/skills/reuse-health-inline/SKILL.md +248 -0
  141. package/.claude/skills/rollback-changes/SKILL.md +50 -524
  142. package/.claude/skills/run-quality-gate/SKILL.md +36 -346
  143. package/.claude/skills/security-health-inline/SKILL.md +224 -0
  144. package/.claude/skills/senior-devops/SKILL.md +209 -0
  145. package/.claude/skills/senior-devops/references/cicd_pipeline_guide.md +103 -0
  146. package/.claude/skills/senior-devops/references/deployment_strategies.md +103 -0
  147. package/.claude/skills/senior-devops/references/infrastructure_as_code.md +103 -0
  148. package/.claude/skills/senior-devops/scripts/deployment_manager.py +114 -0
  149. package/.claude/skills/senior-devops/scripts/pipeline_generator.py +114 -0
  150. package/.claude/skills/senior-devops/scripts/terraform_scaffolder.py +114 -0
  151. package/.claude/skills/senior-prompt-engineer/SKILL.md +226 -0
  152. package/.claude/skills/senior-prompt-engineer/references/agentic_system_design.md +80 -0
  153. package/.claude/skills/senior-prompt-engineer/references/llm_evaluation_frameworks.md +80 -0
  154. package/.claude/skills/senior-prompt-engineer/references/prompt_engineering_patterns.md +80 -0
  155. package/.claude/skills/senior-prompt-engineer/scripts/agent_orchestrator.py +100 -0
  156. package/.claude/skills/senior-prompt-engineer/scripts/prompt_optimizer.py +100 -0
  157. package/.claude/skills/senior-prompt-engineer/scripts/rag_evaluator.py +100 -0
  158. package/.claude/skills/setup-knip/SKILL.md +372 -0
  159. package/.claude/skills/systematic-debugging/CREATION-LOG.md +119 -0
  160. package/.claude/skills/systematic-debugging/SKILL.md +296 -0
  161. package/.claude/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  162. package/.claude/skills/systematic-debugging/condition-based-waiting.md +115 -0
  163. package/.claude/skills/systematic-debugging/defense-in-depth.md +122 -0
  164. package/.claude/skills/systematic-debugging/find-polluter.sh +63 -0
  165. package/.claude/skills/systematic-debugging/root-cause-tracing.md +169 -0
  166. package/.claude/skills/systematic-debugging/test-academic.md +14 -0
  167. package/.claude/skills/systematic-debugging/test-pressure-1.md +58 -0
  168. package/.claude/skills/systematic-debugging/test-pressure-2.md +68 -0
  169. package/.claude/skills/systematic-debugging/test-pressure-3.md +69 -0
  170. package/.claude/skills/theme-factory/LICENSE.txt +202 -0
  171. package/.claude/skills/theme-factory/SKILL.md +59 -0
  172. package/.claude/skills/theme-factory/theme-showcase.pdf +0 -0
  173. package/.claude/skills/theme-factory/themes/arctic-frost.md +19 -0
  174. package/.claude/skills/theme-factory/themes/botanical-garden.md +19 -0
  175. package/.claude/skills/theme-factory/themes/desert-rose.md +19 -0
  176. package/.claude/skills/theme-factory/themes/forest-canopy.md +19 -0
  177. package/.claude/skills/theme-factory/themes/golden-hour.md +19 -0
  178. package/.claude/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  179. package/.claude/skills/theme-factory/themes/modern-minimalist.md +19 -0
  180. package/.claude/skills/theme-factory/themes/ocean-depths.md +19 -0
  181. package/.claude/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  182. package/.claude/skills/theme-factory/themes/tech-innovation.md +19 -0
  183. package/.claude/skills/ui-design-system/SKILL.md +32 -0
  184. package/.claude/skills/ui-design-system/scripts/design_token_generator.py +529 -0
  185. package/.claude/skills/ux-researcher-designer/SKILL.md +30 -0
  186. package/.claude/skills/ux-researcher-designer/scripts/persona_generator.py +508 -0
  187. package/.claude/skills/webapp-testing/LICENSE.txt +202 -0
  188. package/.claude/skills/webapp-testing/SKILL.md +96 -0
  189. package/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
  190. package/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
  191. package/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
  192. package/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
  193. package/.gitignore +4 -0
  194. package/README.md +492 -1093
  195. package/README.ru.md +719 -0
  196. package/docs/Agents Ecosystem/AGENT-ORCHESTRATION.md +2 -2
  197. package/docs/{SPECKIT-GUIDE.md → COMMANDS-GUIDE.md} +252 -20
  198. package/docs/reports/skills/new-skills-analysis-2025-12.md +331 -0
  199. package/package.json +11 -3
  200. package/.claude/agents/health/orchestrators/bug-orchestrator.md +0 -1084
  201. package/.claude/agents/health/orchestrators/dead-code-orchestrator.md +0 -1064
  202. package/.claude/agents/health/orchestrators/dependency-orchestrator.md +0 -1064
  203. package/.claude/agents/health/orchestrators/reuse-orchestrator.md +0 -1112
  204. package/.claude/agents/health/orchestrators/security-orchestrator.md +0 -1064
  205. package/.claude/commands/worktree-cleanup.md +0 -382
  206. package/.claude/commands/worktree-create.md +0 -287
  207. package/.claude/commands/worktree-list.md +0 -239
  208. package/.claude/commands/worktree-remove.md +0 -339
  209. package/.claude/project-index.md +0 -75
  210. package/.claude/skills/load-project-context/SKILL.md +0 -89
  211. package/.claude/skills/resume-session/SKILL.md +0 -164
  212. package/.claude/skills/save-session-context/SKILL.md +0 -123
  213. package/.claude/templates/project-index.template.md +0 -67
  214. package/.claude/templates/session/context.template.md +0 -40
  215. package/.claude/templates/session/log.template.md +0 -72
  216. package/.github/BRANCH_PROTECTION.md +0 -137
  217. package/.github/workflows/build.yml +0 -70
  218. package/.github/workflows/deploy-staging.yml +0 -90
  219. package/.github/workflows/test.yml +0 -104
@@ -0,0 +1,529 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Design Token Generator
4
+ Creates consistent design system tokens for colors, typography, spacing, and more
5
+ """
6
+
7
+ import json
8
+ from typing import Dict, List, Tuple
9
+ import colorsys
10
+
11
+ class DesignTokenGenerator:
12
+ """Generate comprehensive design system tokens"""
13
+
14
+ def __init__(self):
15
+ self.base_unit = 8 # 8pt grid system
16
+ self.type_scale_ratio = 1.25 # Major third
17
+ self.base_font_size = 16
18
+
19
+ def generate_complete_system(self, brand_color: str = "#0066CC",
20
+ style: str = "modern") -> Dict:
21
+ """Generate complete design token system"""
22
+
23
+ tokens = {
24
+ 'meta': {
25
+ 'version': '1.0.0',
26
+ 'style': style,
27
+ 'generated': 'auto-generated'
28
+ },
29
+ 'colors': self.generate_color_palette(brand_color),
30
+ 'typography': self.generate_typography_system(style),
31
+ 'spacing': self.generate_spacing_system(),
32
+ 'sizing': self.generate_sizing_tokens(),
33
+ 'borders': self.generate_border_tokens(style),
34
+ 'shadows': self.generate_shadow_tokens(style),
35
+ 'animation': self.generate_animation_tokens(),
36
+ 'breakpoints': self.generate_breakpoints(),
37
+ 'z-index': self.generate_z_index_scale()
38
+ }
39
+
40
+ return tokens
41
+
42
+ def generate_color_palette(self, brand_color: str) -> Dict:
43
+ """Generate comprehensive color palette from brand color"""
44
+
45
+ # Convert hex to RGB
46
+ brand_rgb = self._hex_to_rgb(brand_color)
47
+ brand_hsv = colorsys.rgb_to_hsv(*[c/255 for c in brand_rgb])
48
+
49
+ palette = {
50
+ 'primary': self._generate_color_scale(brand_color, 'primary'),
51
+ 'secondary': self._generate_color_scale(
52
+ self._adjust_hue(brand_color, 180), 'secondary'
53
+ ),
54
+ 'neutral': self._generate_neutral_scale(),
55
+ 'semantic': {
56
+ 'success': {
57
+ 'base': '#10B981',
58
+ 'light': '#34D399',
59
+ 'dark': '#059669',
60
+ 'contrast': '#FFFFFF'
61
+ },
62
+ 'warning': {
63
+ 'base': '#F59E0B',
64
+ 'light': '#FBB
65
+
66
+ D24',
67
+ 'dark': '#D97706',
68
+ 'contrast': '#FFFFFF'
69
+ },
70
+ 'error': {
71
+ 'base': '#EF4444',
72
+ 'light': '#F87171',
73
+ 'dark': '#DC2626',
74
+ 'contrast': '#FFFFFF'
75
+ },
76
+ 'info': {
77
+ 'base': '#3B82F6',
78
+ 'light': '#60A5FA',
79
+ 'dark': '#2563EB',
80
+ 'contrast': '#FFFFFF'
81
+ }
82
+ },
83
+ 'surface': {
84
+ 'background': '#FFFFFF',
85
+ 'foreground': '#111827',
86
+ 'card': '#FFFFFF',
87
+ 'overlay': 'rgba(0, 0, 0, 0.5)',
88
+ 'divider': '#E5E7EB'
89
+ }
90
+ }
91
+
92
+ return palette
93
+
94
+ def _generate_color_scale(self, base_color: str, name: str) -> Dict:
95
+ """Generate color scale from base color"""
96
+
97
+ scale = {}
98
+ rgb = self._hex_to_rgb(base_color)
99
+ h, s, v = colorsys.rgb_to_hsv(*[c/255 for c in rgb])
100
+
101
+ # Generate scale from 50 to 900
102
+ steps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900]
103
+
104
+ for step in steps:
105
+ # Adjust lightness based on step
106
+ factor = (1000 - step) / 1000
107
+ new_v = 0.95 if step < 500 else v * (1 - (step - 500) / 500)
108
+ new_s = s * (0.3 + 0.7 * (step / 900))
109
+
110
+ new_rgb = colorsys.hsv_to_rgb(h, new_s, new_v)
111
+ scale[str(step)] = self._rgb_to_hex([int(c * 255) for c in new_rgb])
112
+
113
+ scale['DEFAULT'] = base_color
114
+ return scale
115
+
116
+ def _generate_neutral_scale(self) -> Dict:
117
+ """Generate neutral color scale"""
118
+
119
+ return {
120
+ '50': '#F9FAFB',
121
+ '100': '#F3F4F6',
122
+ '200': '#E5E7EB',
123
+ '300': '#D1D5DB',
124
+ '400': '#9CA3AF',
125
+ '500': '#6B7280',
126
+ '600': '#4B5563',
127
+ '700': '#374151',
128
+ '800': '#1F2937',
129
+ '900': '#111827',
130
+ 'DEFAULT': '#6B7280'
131
+ }
132
+
133
+ def generate_typography_system(self, style: str) -> Dict:
134
+ """Generate typography system"""
135
+
136
+ # Font families based on style
137
+ font_families = {
138
+ 'modern': {
139
+ 'sans': 'Inter, system-ui, -apple-system, sans-serif',
140
+ 'serif': 'Merriweather, Georgia, serif',
141
+ 'mono': 'Fira Code, Monaco, monospace'
142
+ },
143
+ 'classic': {
144
+ 'sans': 'Helvetica, Arial, sans-serif',
145
+ 'serif': 'Times New Roman, Times, serif',
146
+ 'mono': 'Courier New, monospace'
147
+ },
148
+ 'playful': {
149
+ 'sans': 'Poppins, Roboto, sans-serif',
150
+ 'serif': 'Playfair Display, Georgia, serif',
151
+ 'mono': 'Source Code Pro, monospace'
152
+ }
153
+ }
154
+
155
+ typography = {
156
+ 'fontFamily': font_families.get(style, font_families['modern']),
157
+ 'fontSize': self._generate_type_scale(),
158
+ 'fontWeight': {
159
+ 'thin': 100,
160
+ 'light': 300,
161
+ 'normal': 400,
162
+ 'medium': 500,
163
+ 'semibold': 600,
164
+ 'bold': 700,
165
+ 'extrabold': 800,
166
+ 'black': 900
167
+ },
168
+ 'lineHeight': {
169
+ 'none': 1,
170
+ 'tight': 1.25,
171
+ 'snug': 1.375,
172
+ 'normal': 1.5,
173
+ 'relaxed': 1.625,
174
+ 'loose': 2
175
+ },
176
+ 'letterSpacing': {
177
+ 'tighter': '-0.05em',
178
+ 'tight': '-0.025em',
179
+ 'normal': '0',
180
+ 'wide': '0.025em',
181
+ 'wider': '0.05em',
182
+ 'widest': '0.1em'
183
+ },
184
+ 'textStyles': self._generate_text_styles()
185
+ }
186
+
187
+ return typography
188
+
189
+ def _generate_type_scale(self) -> Dict:
190
+ """Generate modular type scale"""
191
+
192
+ scale = {}
193
+ sizes = ['xs', 'sm', 'base', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl']
194
+
195
+ for i, size in enumerate(sizes):
196
+ if size == 'base':
197
+ scale[size] = f'{self.base_font_size}px'
198
+ elif i < sizes.index('base'):
199
+ factor = self.type_scale_ratio ** (sizes.index('base') - i)
200
+ scale[size] = f'{round(self.base_font_size / factor)}px'
201
+ else:
202
+ factor = self.type_scale_ratio ** (i - sizes.index('base'))
203
+ scale[size] = f'{round(self.base_font_size * factor)}px'
204
+
205
+ return scale
206
+
207
+ def _generate_text_styles(self) -> Dict:
208
+ """Generate pre-composed text styles"""
209
+
210
+ return {
211
+ 'h1': {
212
+ 'fontSize': '48px',
213
+ 'fontWeight': 700,
214
+ 'lineHeight': 1.2,
215
+ 'letterSpacing': '-0.02em'
216
+ },
217
+ 'h2': {
218
+ 'fontSize': '36px',
219
+ 'fontWeight': 700,
220
+ 'lineHeight': 1.3,
221
+ 'letterSpacing': '-0.01em'
222
+ },
223
+ 'h3': {
224
+ 'fontSize': '28px',
225
+ 'fontWeight': 600,
226
+ 'lineHeight': 1.4,
227
+ 'letterSpacing': '0'
228
+ },
229
+ 'h4': {
230
+ 'fontSize': '24px',
231
+ 'fontWeight': 600,
232
+ 'lineHeight': 1.4,
233
+ 'letterSpacing': '0'
234
+ },
235
+ 'h5': {
236
+ 'fontSize': '20px',
237
+ 'fontWeight': 600,
238
+ 'lineHeight': 1.5,
239
+ 'letterSpacing': '0'
240
+ },
241
+ 'h6': {
242
+ 'fontSize': '16px',
243
+ 'fontWeight': 600,
244
+ 'lineHeight': 1.5,
245
+ 'letterSpacing': '0.01em'
246
+ },
247
+ 'body': {
248
+ 'fontSize': '16px',
249
+ 'fontWeight': 400,
250
+ 'lineHeight': 1.5,
251
+ 'letterSpacing': '0'
252
+ },
253
+ 'small': {
254
+ 'fontSize': '14px',
255
+ 'fontWeight': 400,
256
+ 'lineHeight': 1.5,
257
+ 'letterSpacing': '0'
258
+ },
259
+ 'caption': {
260
+ 'fontSize': '12px',
261
+ 'fontWeight': 400,
262
+ 'lineHeight': 1.5,
263
+ 'letterSpacing': '0.01em'
264
+ }
265
+ }
266
+
267
+ def generate_spacing_system(self) -> Dict:
268
+ """Generate spacing system based on 8pt grid"""
269
+
270
+ spacing = {}
271
+ multipliers = [0, 0.5, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 20, 24, 32, 40, 48, 56, 64]
272
+
273
+ for i, mult in enumerate(multipliers):
274
+ spacing[str(i)] = f'{int(self.base_unit * mult)}px'
275
+
276
+ # Add semantic spacing
277
+ spacing.update({
278
+ 'xs': spacing['1'], # 4px
279
+ 'sm': spacing['2'], # 8px
280
+ 'md': spacing['4'], # 16px
281
+ 'lg': spacing['6'], # 24px
282
+ 'xl': spacing['8'], # 32px
283
+ '2xl': spacing['12'], # 48px
284
+ '3xl': spacing['16'] # 64px
285
+ })
286
+
287
+ return spacing
288
+
289
+ def generate_sizing_tokens(self) -> Dict:
290
+ """Generate sizing tokens for components"""
291
+
292
+ return {
293
+ 'container': {
294
+ 'sm': '640px',
295
+ 'md': '768px',
296
+ 'lg': '1024px',
297
+ 'xl': '1280px',
298
+ '2xl': '1536px'
299
+ },
300
+ 'components': {
301
+ 'button': {
302
+ 'sm': {'height': '32px', 'paddingX': '12px'},
303
+ 'md': {'height': '40px', 'paddingX': '16px'},
304
+ 'lg': {'height': '48px', 'paddingX': '20px'}
305
+ },
306
+ 'input': {
307
+ 'sm': {'height': '32px', 'paddingX': '12px'},
308
+ 'md': {'height': '40px', 'paddingX': '16px'},
309
+ 'lg': {'height': '48px', 'paddingX': '20px'}
310
+ },
311
+ 'icon': {
312
+ 'sm': '16px',
313
+ 'md': '20px',
314
+ 'lg': '24px',
315
+ 'xl': '32px'
316
+ }
317
+ }
318
+ }
319
+
320
+ def generate_border_tokens(self, style: str) -> Dict:
321
+ """Generate border tokens"""
322
+
323
+ radius_values = {
324
+ 'modern': {
325
+ 'none': '0',
326
+ 'sm': '4px',
327
+ 'DEFAULT': '8px',
328
+ 'md': '12px',
329
+ 'lg': '16px',
330
+ 'xl': '24px',
331
+ 'full': '9999px'
332
+ },
333
+ 'classic': {
334
+ 'none': '0',
335
+ 'sm': '2px',
336
+ 'DEFAULT': '4px',
337
+ 'md': '6px',
338
+ 'lg': '8px',
339
+ 'xl': '12px',
340
+ 'full': '9999px'
341
+ },
342
+ 'playful': {
343
+ 'none': '0',
344
+ 'sm': '8px',
345
+ 'DEFAULT': '16px',
346
+ 'md': '20px',
347
+ 'lg': '24px',
348
+ 'xl': '32px',
349
+ 'full': '9999px'
350
+ }
351
+ }
352
+
353
+ return {
354
+ 'radius': radius_values.get(style, radius_values['modern']),
355
+ 'width': {
356
+ 'none': '0',
357
+ 'thin': '1px',
358
+ 'DEFAULT': '1px',
359
+ 'medium': '2px',
360
+ 'thick': '4px'
361
+ }
362
+ }
363
+
364
+ def generate_shadow_tokens(self, style: str) -> Dict:
365
+ """Generate shadow tokens"""
366
+
367
+ shadow_styles = {
368
+ 'modern': {
369
+ 'none': 'none',
370
+ 'sm': '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
371
+ 'DEFAULT': '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',
372
+ 'md': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
373
+ 'lg': '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
374
+ 'xl': '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
375
+ '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',
376
+ 'inner': 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)'
377
+ },
378
+ 'classic': {
379
+ 'none': 'none',
380
+ 'sm': '0 1px 2px rgba(0, 0, 0, 0.1)',
381
+ 'DEFAULT': '0 2px 4px rgba(0, 0, 0, 0.1)',
382
+ 'md': '0 4px 8px rgba(0, 0, 0, 0.1)',
383
+ 'lg': '0 8px 16px rgba(0, 0, 0, 0.1)',
384
+ 'xl': '0 16px 32px rgba(0, 0, 0, 0.1)'
385
+ }
386
+ }
387
+
388
+ return shadow_styles.get(style, shadow_styles['modern'])
389
+
390
+ def generate_animation_tokens(self) -> Dict:
391
+ """Generate animation tokens"""
392
+
393
+ return {
394
+ 'duration': {
395
+ 'instant': '0ms',
396
+ 'fast': '150ms',
397
+ 'DEFAULT': '250ms',
398
+ 'slow': '350ms',
399
+ 'slower': '500ms'
400
+ },
401
+ 'easing': {
402
+ 'linear': 'linear',
403
+ 'ease': 'ease',
404
+ 'easeIn': 'ease-in',
405
+ 'easeOut': 'ease-out',
406
+ 'easeInOut': 'ease-in-out',
407
+ 'spring': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)'
408
+ },
409
+ 'keyframes': {
410
+ 'fadeIn': {
411
+ 'from': {'opacity': 0},
412
+ 'to': {'opacity': 1}
413
+ },
414
+ 'slideUp': {
415
+ 'from': {'transform': 'translateY(10px)', 'opacity': 0},
416
+ 'to': {'transform': 'translateY(0)', 'opacity': 1}
417
+ },
418
+ 'scale': {
419
+ 'from': {'transform': 'scale(0.95)'},
420
+ 'to': {'transform': 'scale(1)'}
421
+ }
422
+ }
423
+ }
424
+
425
+ def generate_breakpoints(self) -> Dict:
426
+ """Generate responsive breakpoints"""
427
+
428
+ return {
429
+ 'xs': '480px',
430
+ 'sm': '640px',
431
+ 'md': '768px',
432
+ 'lg': '1024px',
433
+ 'xl': '1280px',
434
+ '2xl': '1536px'
435
+ }
436
+
437
+ def generate_z_index_scale(self) -> Dict:
438
+ """Generate z-index scale"""
439
+
440
+ return {
441
+ 'hide': -1,
442
+ 'base': 0,
443
+ 'dropdown': 1000,
444
+ 'sticky': 1020,
445
+ 'overlay': 1030,
446
+ 'modal': 1040,
447
+ 'popover': 1050,
448
+ 'tooltip': 1060,
449
+ 'notification': 1070
450
+ }
451
+
452
+ def export_tokens(self, tokens: Dict, format: str = 'json') -> str:
453
+ """Export tokens in various formats"""
454
+
455
+ if format == 'json':
456
+ return json.dumps(tokens, indent=2)
457
+ elif format == 'css':
458
+ return self._export_as_css(tokens)
459
+ elif format == 'scss':
460
+ return self._export_as_scss(tokens)
461
+ else:
462
+ return json.dumps(tokens, indent=2)
463
+
464
+ def _export_as_css(self, tokens: Dict) -> str:
465
+ """Export as CSS variables"""
466
+
467
+ css = [':root {']
468
+
469
+ def flatten_dict(obj, prefix=''):
470
+ for key, value in obj.items():
471
+ if isinstance(value, dict):
472
+ flatten_dict(value, f'{prefix}-{key}' if prefix else key)
473
+ else:
474
+ css.append(f' --{prefix}-{key}: {value};')
475
+
476
+ flatten_dict(tokens)
477
+ css.append('}')
478
+
479
+ return '\n'.join(css)
480
+
481
+ def _hex_to_rgb(self, hex_color: str) -> Tuple[int, int, int]:
482
+ """Convert hex to RGB"""
483
+ hex_color = hex_color.lstrip('#')
484
+ return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
485
+
486
+ def _rgb_to_hex(self, rgb: List[int]) -> str:
487
+ """Convert RGB to hex"""
488
+ return '#{:02x}{:02x}{:02x}'.format(*rgb)
489
+
490
+ def _adjust_hue(self, hex_color: str, degrees: int) -> str:
491
+ """Adjust hue of color"""
492
+ rgb = self._hex_to_rgb(hex_color)
493
+ h, s, v = colorsys.rgb_to_hsv(*[c/255 for c in rgb])
494
+ h = (h + degrees/360) % 1
495
+ new_rgb = colorsys.hsv_to_rgb(h, s, v)
496
+ return self._rgb_to_hex([int(c * 255) for c in new_rgb])
497
+
498
+ def main():
499
+ import sys
500
+
501
+ generator = DesignTokenGenerator()
502
+
503
+ # Get parameters
504
+ brand_color = sys.argv[1] if len(sys.argv) > 1 else "#0066CC"
505
+ style = sys.argv[2] if len(sys.argv) > 2 else "modern"
506
+ output_format = sys.argv[3] if len(sys.argv) > 3 else "json"
507
+
508
+ # Generate tokens
509
+ tokens = generator.generate_complete_system(brand_color, style)
510
+
511
+ # Output
512
+ if output_format == 'summary':
513
+ print("=" * 60)
514
+ print("DESIGN SYSTEM TOKENS")
515
+ print("=" * 60)
516
+ print(f"\nšŸŽØ Style: {style}")
517
+ print(f"šŸŽØ Brand Color: {brand_color}")
518
+ print("\nšŸ“Š Generated Tokens:")
519
+ print(f" • Colors: {len(tokens['colors'])} palettes")
520
+ print(f" • Typography: {len(tokens['typography'])} categories")
521
+ print(f" • Spacing: {len(tokens['spacing'])} values")
522
+ print(f" • Shadows: {len(tokens['shadows'])} styles")
523
+ print(f" • Breakpoints: {len(tokens['breakpoints'])} sizes")
524
+ print("\nšŸ’¾ Export formats available: json, css, scss")
525
+ else:
526
+ print(generator.export_tokens(tokens, output_format))
527
+
528
+ if __name__ == "__main__":
529
+ main()
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: ux-researcher-designer
3
+ description: UX research and design toolkit for Senior UX Designer/Researcher including data-driven persona generation, journey mapping, usability testing frameworks, and research synthesis. Use for user research, persona creation, journey mapping, and design validation.
4
+ ---
5
+
6
+ # UX Researcher & Designer
7
+
8
+ Comprehensive toolkit for user-centered research and experience design.
9
+
10
+ ## Core Capabilities
11
+ - Data-driven persona generation
12
+ - Customer journey mapping
13
+ - Usability testing frameworks
14
+ - Research synthesis and insights
15
+ - Design validation methods
16
+
17
+ ## Key Scripts
18
+
19
+ ### persona_generator.py
20
+ Creates research-backed personas from user data and interviews.
21
+
22
+ **Usage**: `python scripts/persona_generator.py [json]`
23
+
24
+ **Features**:
25
+ - Analyzes user behavior patterns
26
+ - Identifies persona archetypes
27
+ - Extracts psychographics
28
+ - Generates scenarios
29
+ - Provides design implications
30
+ - Confidence scoring based on sample size