@sylix/coworker 2.0.11 → 2.0.12

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 (169) hide show
  1. package/dist/commands/slash/config.d.ts.map +1 -1
  2. package/dist/commands/slash/config.js +22 -4
  3. package/dist/commands/slash/config.js.map +1 -1
  4. package/dist/core/CoWorkerAgent.d.ts.map +1 -1
  5. package/dist/core/CoWorkerAgent.js +6 -3
  6. package/dist/core/CoWorkerAgent.js.map +1 -1
  7. package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
  8. package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
  9. package/dist/skills/defaults/ai-ml/rag.md +276 -0
  10. package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
  11. package/dist/skills/defaults/backend-development/api-design.md +285 -0
  12. package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
  13. package/dist/skills/defaults/backend-development/async-python.md +237 -0
  14. package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
  15. package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
  16. package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
  17. package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
  18. package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
  19. package/dist/skills/defaults/backend-development/database-design.md +305 -0
  20. package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
  21. package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
  22. package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
  23. package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
  24. package/dist/skills/defaults/backend-development/fastapi.md +309 -0
  25. package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
  26. package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
  27. package/dist/skills/defaults/backend-development/microservices.md +284 -0
  28. package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
  29. package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
  30. package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
  31. package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
  32. package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
  33. package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
  34. package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
  35. package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
  36. package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
  37. package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
  38. package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
  39. package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
  40. package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
  41. package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
  42. package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
  43. package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
  44. package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
  45. package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
  46. package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
  47. package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
  48. package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
  49. package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
  50. package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
  51. package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
  52. package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
  53. package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
  54. package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
  55. package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
  56. package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
  57. package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
  58. package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
  59. package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
  60. package/dist/skills/defaults/data-engineering/airflow.md +519 -0
  61. package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
  62. package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
  63. package/dist/skills/defaults/data-engineering/dbt.md +556 -0
  64. package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
  65. package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
  66. package/dist/skills/defaults/data-engineering/spark.md +411 -0
  67. package/dist/skills/defaults/database/postgresql.md +202 -0
  68. package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
  69. package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
  70. package/dist/skills/defaults/devops/changelog-automation.md +580 -0
  71. package/dist/skills/defaults/devops/cicd.md +314 -0
  72. package/dist/skills/defaults/devops/cloud.md +263 -0
  73. package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
  74. package/dist/skills/defaults/devops/cost-optimization.md +295 -0
  75. package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
  76. package/dist/skills/defaults/devops/docker.md +281 -0
  77. package/dist/skills/defaults/devops/git-workflows.md +205 -0
  78. package/dist/skills/defaults/devops/github-actions.md +311 -0
  79. package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
  80. package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
  81. package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
  82. package/dist/skills/defaults/devops/kubernetes.md +339 -0
  83. package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
  84. package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
  85. package/dist/skills/defaults/devops/observability.md +243 -0
  86. package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
  87. package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
  88. package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
  89. package/dist/skills/defaults/devops/secrets-management.md +341 -0
  90. package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
  91. package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
  92. package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
  93. package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
  94. package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
  95. package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
  96. package/dist/skills/defaults/frontend/interaction-design.md +327 -0
  97. package/dist/skills/defaults/frontend/javascript.md +311 -0
  98. package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
  99. package/dist/skills/defaults/frontend/react-native-design.md +440 -0
  100. package/dist/skills/defaults/frontend/react.md +345 -0
  101. package/dist/skills/defaults/frontend/responsive-design.md +472 -0
  102. package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
  103. package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
  104. package/dist/skills/defaults/frontend/typescript.md +334 -0
  105. package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
  106. package/dist/skills/defaults/frontend/web-component-design.md +279 -0
  107. package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
  108. package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
  109. package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
  110. package/dist/skills/defaults/kubernetes/gitops.md +280 -0
  111. package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
  112. package/dist/skills/defaults/kubernetes/helm.md +343 -0
  113. package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
  114. package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
  115. package/dist/skills/defaults/kubernetes/manifests.md +330 -0
  116. package/dist/skills/defaults/kubernetes/security.md +337 -0
  117. package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
  118. package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
  119. package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
  120. package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
  121. package/dist/skills/defaults/llm-application/langchain.md +259 -0
  122. package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
  123. package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
  124. package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
  125. package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
  126. package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
  127. package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
  128. package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
  129. package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
  130. package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
  131. package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
  132. package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
  133. package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
  134. package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
  135. package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
  136. package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
  137. package/dist/skills/defaults/security/auditor.md +168 -0
  138. package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
  139. package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
  140. package/dist/skills/defaults/security/mtls-configuration.md +349 -0
  141. package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
  142. package/dist/skills/defaults/security/sast-configuration.md +182 -0
  143. package/dist/skills/defaults/security/security.md +313 -0
  144. package/dist/skills/defaults/security/stride-analysis.md +273 -0
  145. package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
  146. package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
  147. package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
  148. package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
  149. package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
  150. package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
  151. package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
  152. package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
  153. package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
  154. package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
  155. package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
  156. package/dist/skills/defaults/testing/testing.md +332 -0
  157. package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
  158. package/dist/skills/defaults/workflows/track-management.md +592 -0
  159. package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
  160. package/dist/skills/index.d.ts +11 -0
  161. package/dist/skills/index.d.ts.map +1 -0
  162. package/dist/skills/index.js +129 -0
  163. package/dist/skills/index.js.map +1 -0
  164. package/dist/utils/character.js +4 -4
  165. package/dist/utils/character.js.map +1 -1
  166. package/dist/utils/inputbar.d.ts.map +1 -1
  167. package/dist/utils/inputbar.js +7 -0
  168. package/dist/utils/inputbar.js.map +1 -1
  169. package/package.json +1 -1
@@ -0,0 +1,334 @@
1
+ ---
2
+ name: typescript
3
+ description: Write type-safe TypeScript code with advanced types, patterns, and best practices.
4
+ ---
5
+
6
+ # TypeScript Advanced Patterns — CoWorker Edition
7
+
8
+ Write robust, maintainable TypeScript with confidence.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Building type-safe applications
13
+ - Creating reusable libraries
14
+ - Working with complex type transformations
15
+ - Defining API contracts
16
+
17
+ ## Core Concepts
18
+
19
+ ### 1. Utility Types
20
+
21
+ ```typescript
22
+ // Basic utilities
23
+ type Partial<T> = { [P in keyof T]?: T[P] };
24
+ type Required<T> = { [P in keyof T]-?: T[P] };
25
+ type Readonly<T> = { readonly [P in keyof T]: T[P] };
26
+ type Pick<T, K extends keyof T> = { [P in K]: T[P] };
27
+ type Omit<T, K extends keyof T> = { [P in Exclude<keyof T, K>]: T[P] };
28
+
29
+ // Practical usage
30
+ interface User {
31
+ id: string;
32
+ name: string;
33
+ email: string;
34
+ password: string;
35
+ createdAt: Date;
36
+ }
37
+
38
+ type PublicUser = Pick<User, 'id' | 'name'>;
39
+ type UserCreateInput = Omit<User, 'id' | 'createdAt'>;
40
+ type UserUpdateInput = Partial<Omit<User, 'id'>>;
41
+ ```
42
+
43
+ ### 2. Generics
44
+
45
+ ```typescript
46
+ // Generic functions
47
+ function first<T>(arr: T[]): T | undefined {
48
+ return arr[0];
49
+ }
50
+
51
+ function map<T, U>(arr: T[], fn: (item: T) => U): U[] {
52
+ return arr.map(fn);
53
+ }
54
+
55
+ // Generic constraints
56
+ interface HasId {
57
+ id: string;
58
+ }
59
+
60
+ function findById<T extends HasId>(arr: T[], id: string): T | undefined {
61
+ return arr.find(item => item.id === id);
62
+ }
63
+
64
+ // Generic classes
65
+ class Repository<T extends HasId> {
66
+ private items: T[] = [];
67
+
68
+ find(id: string): T | undefined {
69
+ return this.items.find(item => item.id === id);
70
+ }
71
+
72
+ save(item: T): void {
73
+ const idx = this.items.findIndex(i => i.id === item.id);
74
+ if (idx >= 0) {
75
+ this.items[idx] = item;
76
+ } else {
77
+ this.items.push(item);
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
83
+ ### 3. Discriminated Unions
84
+
85
+ ```typescript
86
+ type Result<T, E = Error> =
87
+ | { ok: true; value: T }
88
+ | { ok: false; error: E };
89
+
90
+ function handleResult<T>(result: Result<T>): T {
91
+ if (result.ok) {
92
+ return result.value;
93
+ }
94
+ throw result.error;
95
+ }
96
+
97
+ // Practical API response
98
+ interface LoadingState {
99
+ status: 'loading';
100
+ }
101
+
102
+ interface SuccessState<T> {
103
+ status: 'success';
104
+ data: T;
105
+ }
106
+
107
+ interface ErrorState {
108
+ status: 'error';
109
+ error: Error;
110
+ }
111
+
112
+ type AsyncState<T> = LoadingState | SuccessState<T> | ErrorState;
113
+
114
+ function render<T>(state: AsyncState<T>): string {
115
+ switch (state.status) {
116
+ case 'loading':
117
+ return 'Loading...';
118
+ case 'success':
119
+ return `Data: ${JSON.stringify(state.data)}`;
120
+ case 'error':
121
+ return `Error: ${state.error.message}`;
122
+ }
123
+ }
124
+ ```
125
+
126
+ ### 4. Template Literal Types
127
+
128
+ ```typescript
129
+ // Event system
130
+ type EventName = `${string}:${'click' | 'focus' | 'blur'}`;
131
+
132
+ interface Emitter<Events extends Record<string, unknown>> {
133
+ on<K extends keyof Events>(event: K, fn: (data: Events[K]) => void): void;
134
+ emit<K extends keyof Events>(event: K, data: Events[K]): void;
135
+ }
136
+
137
+ // API paths
138
+ type HttpMethod = 'get' | 'post' | 'put' | 'delete' | 'patch';
139
+ type ApiEndpoint = `/api/${string}`;
140
+ type Route = `${HttpMethod}:${ApiEndpoint}`;
141
+
142
+ const routes: Route[] = [
143
+ 'get:/api/users',
144
+ 'post:/api/users',
145
+ 'get:/api/users/:id',
146
+ ];
147
+ ```
148
+
149
+ ### 5. Mapped Types
150
+
151
+ ```typescript
152
+ type Readonly<T> = {
153
+ readonly [P in keyof T]: T[P];
154
+ };
155
+
156
+ type Nullable<T> = {
157
+ [P in keyof T]: T[P] | null;
158
+ };
159
+
160
+ type RequiredKeys<T> = {
161
+ [K in keyof T]: T extends Record<K, T[K]> ? never : K;
162
+ }[keyof T];
163
+
164
+ type OptionalKeys<T> = {
165
+ [K in keyof T]: T extends Record<K, T[K]> ? K : never;
166
+ }[keyof T];
167
+
168
+ // Practical: Make all methods async
169
+ type AsyncMethods<T> = {
170
+ [K in keyof T]: T[K] extends (...args: infer A) => infer R
171
+ ? (...args: A) => Promise<R>
172
+ : T[K];
173
+ };
174
+ ```
175
+
176
+ ### 6. Type Guards
177
+
178
+ ```typescript
179
+ // Type predicate
180
+ function isString(value: unknown): value is string {
181
+ return typeof value === 'string';
182
+ }
183
+
184
+ function process(value: unknown) {
185
+ if (isString(value)) {
186
+ // value is narrowed to string
187
+ return value.toUpperCase();
188
+ }
189
+ return value;
190
+ }
191
+
192
+ // Discriminated union guard
193
+ type Shape = { kind: 'circle'; radius: number } | { kind: 'square'; side: number };
194
+
195
+ function area(shape: Shape): number {
196
+ if (shape.kind === 'circle') {
197
+ return Math.PI * shape.radius ** 2;
198
+ }
199
+ return shape.side ** 2;
200
+ }
201
+
202
+ // Instance guard
203
+ class ApiError extends Error {
204
+ constructor(public statusCode: number, message: string) {
205
+ super(message);
206
+ }
207
+ }
208
+
209
+ function isApiError(error: unknown): error is ApiError {
210
+ return error instanceof ApiError && 'statusCode' in error;
211
+ }
212
+ ```
213
+
214
+ ### 7. Zod Schema Validation
215
+
216
+ ```typescript
217
+ import { z } from 'zod';
218
+
219
+ const UserSchema = z.object({
220
+ id: z.string().uuid(),
221
+ name: z.string().min(2).max(100),
222
+ email: z.string().email(),
223
+ age: z.number().int().positive().optional(),
224
+ role: z.enum(['admin', 'user', 'guest']),
225
+ metadata: z.record(z.string()).optional(),
226
+ createdAt: z.string().datetime(),
227
+ });
228
+
229
+ type User = z.infer<typeof UserSchema>;
230
+
231
+ // Validation
232
+ function validateUser(data: unknown): User {
233
+ return UserSchema.parse(data);
234
+ }
235
+
236
+ // With error handling
237
+ function safeValidateUser(data: unknown) {
238
+ const result = UserSchema.safeParse(data);
239
+ if (!result.success) {
240
+ return { error: result.error.flatten() };
241
+ }
242
+ return { data: result.data };
243
+ }
244
+
245
+ // Refinement
246
+ const AdminSchema = UserSchema.refine(
247
+ (user) => user.role === 'admin' || user.age >= 18,
248
+ { message: 'Must be admin or 18+' }
249
+ );
250
+ ```
251
+
252
+ ### 8. React with TypeScript
253
+
254
+ ```typescript
255
+ import { useState, useCallback } from 'react';
256
+
257
+ // Component props
258
+ interface ButtonProps {
259
+ children: React.ReactNode;
260
+ onClick?: () => void;
261
+ variant?: 'primary' | 'secondary';
262
+ disabled?: boolean;
263
+ }
264
+
265
+ function Button({ children, onClick, variant = 'primary', disabled }: ButtonProps) {
266
+ return (
267
+ <button
268
+ className={`btn btn-${variant}`}
269
+ onClick={onClick}
270
+ disabled={disabled}
271
+ >
272
+ {children}
273
+ </button>
274
+ );
275
+ }
276
+
277
+ // Hooks with types
278
+ function useFetch<T>(url: string) {
279
+ const [data, setData] = useState<T | null>(null);
280
+ const [loading, setLoading] = useState(true);
281
+ const [error, setError] = useState<Error | null>(null);
282
+
283
+ const fetch = useCallback(async () => {
284
+ try {
285
+ setLoading(true);
286
+ const res = await fetch(url);
287
+ const json = await res.json();
288
+ setData(json);
289
+ } catch (e) {
290
+ setError(e as Error);
291
+ } finally {
292
+ setLoading(false);
293
+ }
294
+ }, [url]);
295
+
296
+ return { data, loading, error, refetch: fetch };
297
+ }
298
+
299
+ // Context with types
300
+ interface AuthState {
301
+ user: User | null;
302
+ login: (email: string, password: string) => Promise<void>;
303
+ logout: () => void;
304
+ }
305
+
306
+ const AuthContext = createContext<AuthState | null>(null);
307
+
308
+ function useAuth() {
309
+ const context = useContext(AuthContext);
310
+ if (!context) {
311
+ throw new Error('useAuth must be used within AuthProvider');
312
+ }
313
+ return context;
314
+ }
315
+ ```
316
+
317
+ ## Best Practices
318
+
319
+ 1. **Strict mode** - Always use strict TypeScript
320
+ 2. **Explicit types** - Don't overuse `any`
321
+ 3. **Discriminated unions** - For state machines
322
+ 4. **Utility types** - Leverage built-in utilities
323
+ 5. **Generics** - For reusable components
324
+ 6. **Type guards** - Narrow types explicitly
325
+ 7. **Schema validation** - Zod for runtime validation
326
+
327
+ ## Common Mistakes
328
+
329
+ - Using `any` too liberally
330
+ - Not enabling strict mode
331
+ - Ignoring generic constraints
332
+ - Missing null checks
333
+ - Not using readonly appropriately
334
+ - Over-engineering types
@@ -0,0 +1,326 @@
1
+ ---
2
+ name: visual-design-foundations
3
+ description: Apply typography, color theory, spacing systems, and iconography principles to create cohesive visual designs. Use when establishing design tokens, building style guides, or improving visual hierarchy and consistency.
4
+ ---
5
+
6
+ # Visual Design Foundations
7
+
8
+ Build cohesive, accessible visual systems using typography, color, spacing, and iconography fundamentals.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Establishing design tokens for a new project
13
+ - Creating or refining a spacing and sizing system
14
+ - Selecting and pairing typefaces
15
+ - Building accessible color palettes
16
+ - Designing icon systems and visual assets
17
+ - Improving visual hierarchy and readability
18
+ - Auditing designs for visual consistency
19
+ - Implementing dark mode or theming
20
+
21
+ ## Core Systems
22
+
23
+ ### 1. Typography Scale
24
+
25
+ **Modular Scale** (ratio-based sizing):
26
+
27
+ ```css
28
+ :root {
29
+ --font-size-xs: 0.75rem; /* 12px */
30
+ --font-size-sm: 0.875rem; /* 14px */
31
+ --font-size-base: 1rem; /* 16px */
32
+ --font-size-lg: 1.125rem; /* 18px */
33
+ --font-size-xl: 1.25rem; /* 20px */
34
+ --font-size-2xl: 1.5rem; /* 24px */
35
+ --font-size-3xl: 1.875rem; /* 30px */
36
+ --font-size-4xl: 2.25rem; /* 36px */
37
+ --font-size-5xl: 3rem; /* 48px */
38
+ }
39
+ ```
40
+
41
+ **Line Height Guidelines**:
42
+ | Text Type | Line Height |
43
+ |-----------|-------------|
44
+ | Headings | 1.1 - 1.3 |
45
+ | Body text | 1.5 - 1.7 |
46
+ | UI labels | 1.2 - 1.4 |
47
+
48
+ ### 2. Spacing System
49
+
50
+ **8-point grid** (industry standard):
51
+
52
+ ```css
53
+ :root {
54
+ --space-1: 0.25rem; /* 4px */
55
+ --space-2: 0.5rem; /* 8px */
56
+ --space-3: 0.75rem; /* 12px */
57
+ --space-4: 1rem; /* 16px */
58
+ --space-5: 1.25rem; /* 20px */
59
+ --space-6: 1.5rem; /* 24px */
60
+ --space-8: 2rem; /* 32px */
61
+ --space-10: 2.5rem; /* 40px */
62
+ --space-12: 3rem; /* 48px */
63
+ --space-16: 4rem; /* 64px */
64
+ }
65
+ ```
66
+
67
+ ### 3. Color System
68
+
69
+ **Semantic color tokens**:
70
+
71
+ ```css
72
+ :root {
73
+ /* Brand */
74
+ --color-primary: #2563eb;
75
+ --color-primary-hover: #1d4ed8;
76
+ --color-primary-active: #1e40af;
77
+
78
+ /* Semantic */
79
+ --color-success: #16a34a;
80
+ --color-warning: #ca8a04;
81
+ --color-error: #dc2626;
82
+ --color-info: #0891b2;
83
+
84
+ /* Neutral */
85
+ --color-gray-50: #f9fafb;
86
+ --color-gray-100: #f3f4f6;
87
+ --color-gray-200: #e5e7eb;
88
+ --color-gray-300: #d1d5db;
89
+ --color-gray-400: #9ca3af;
90
+ --color-gray-500: #6b7280;
91
+ --color-gray-600: #4b5563;
92
+ --color-gray-700: #374151;
93
+ --color-gray-800: #1f2937;
94
+ --color-gray-900: #111827;
95
+ }
96
+ ```
97
+
98
+ ## Quick Start: Design Tokens in Tailwind
99
+
100
+ ```js
101
+ // tailwind.config.js
102
+ module.exports = {
103
+ theme: {
104
+ extend: {
105
+ fontFamily: {
106
+ sans: ["Inter", "system-ui", "sans-serif"],
107
+ mono: ["JetBrains Mono", "monospace"],
108
+ },
109
+ fontSize: {
110
+ xs: ["0.75rem", { lineHeight: "1rem" }],
111
+ sm: ["0.875rem", { lineHeight: "1.25rem" }],
112
+ base: ["1rem", { lineHeight: "1.5rem" }],
113
+ lg: ["1.125rem", { lineHeight: "1.75rem" }],
114
+ xl: ["1.25rem", { lineHeight: "1.75rem" }],
115
+ "2xl": ["1.5rem", { lineHeight: "2rem" }],
116
+ },
117
+ colors: {
118
+ brand: {
119
+ 50: "#eff6ff",
120
+ 500: "#3b82f6",
121
+ 600: "#2563eb",
122
+ 700: "#1d4ed8",
123
+ },
124
+ },
125
+ spacing: {
126
+ // Extends default with custom values
127
+ 18: "4.5rem",
128
+ 88: "22rem",
129
+ },
130
+ },
131
+ },
132
+ };
133
+ ```
134
+
135
+ ## Typography Best Practices
136
+
137
+ ### Font Pairing
138
+
139
+ **Safe combinations**:
140
+
141
+ - Heading: **Inter** / Body: **Inter** (single family)
142
+ - Heading: **Playfair Display** / Body: **Source Sans Pro** (contrast)
143
+ - Heading: **Space Grotesk** / Body: **IBM Plex Sans** (geometric)
144
+
145
+ ### Responsive Typography
146
+
147
+ ```css
148
+ /* Fluid typography using clamp() */
149
+ h1 {
150
+ font-size: clamp(2rem, 5vw + 1rem, 3.5rem);
151
+ line-height: 1.1;
152
+ }
153
+
154
+ p {
155
+ font-size: clamp(1rem, 2vw + 0.5rem, 1.125rem);
156
+ line-height: 1.6;
157
+ max-width: 65ch; /* Optimal reading width */
158
+ }
159
+ ```
160
+
161
+ ### Font Loading
162
+
163
+ ```css
164
+ /* Prevent layout shift */
165
+ @font-face {
166
+ font-family: "Inter";
167
+ src: url("/fonts/Inter.woff2") format("woff2");
168
+ font-display: swap;
169
+ font-weight: 400 700;
170
+ }
171
+ ```
172
+
173
+ ## Color Theory
174
+
175
+ ### Contrast Requirements (WCAG)
176
+
177
+ | Element | Minimum Ratio |
178
+ | ------------------ | ------------- |
179
+ | Body text | 4.5:1 (AA) |
180
+ | Large text (18px+) | 3:1 (AA) |
181
+ | UI components | 3:1 (AA) |
182
+ | Enhanced | 7:1 (AAA) |
183
+
184
+ ### Dark Mode Strategy
185
+
186
+ ```css
187
+ :root {
188
+ --bg-primary: #ffffff;
189
+ --bg-secondary: #f9fafb;
190
+ --text-primary: #111827;
191
+ --text-secondary: #6b7280;
192
+ --border: #e5e7eb;
193
+ }
194
+
195
+ [data-theme="dark"] {
196
+ --bg-primary: #111827;
197
+ --bg-secondary: #1f2937;
198
+ --text-primary: #f9fafb;
199
+ --text-secondary: #9ca3af;
200
+ --border: #374151;
201
+ }
202
+ ```
203
+
204
+ ### Color Accessibility
205
+
206
+ ```tsx
207
+ // Check contrast programmatically
208
+ function getContrastRatio(foreground: string, background: string): number {
209
+ const getLuminance = (hex: string) => {
210
+ const rgb = hexToRgb(hex);
211
+ const [r, g, b] = rgb.map((c) => {
212
+ c = c / 255;
213
+ return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
214
+ });
215
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
216
+ };
217
+
218
+ const l1 = getLuminance(foreground);
219
+ const l2 = getLuminance(background);
220
+ const lighter = Math.max(l1, l2);
221
+ const darker = Math.min(l1, l2);
222
+
223
+ return (lighter + 0.05) / (darker + 0.05);
224
+ }
225
+ ```
226
+
227
+ ## Spacing Guidelines
228
+
229
+ ### Component Spacing
230
+
231
+ ```
232
+ Card padding: 16-24px (--space-4 to --space-6)
233
+ Section gap: 32-64px (--space-8 to --space-16)
234
+ Form field gap: 16-24px (--space-4 to --space-6)
235
+ Button padding: 8-16px vertical, 16-24px horizontal
236
+ Icon-text gap: 8px (--space-2)
237
+ ```
238
+
239
+ ### Visual Rhythm
240
+
241
+ ```css
242
+ /* Consistent vertical rhythm */
243
+ .prose > * + * {
244
+ margin-top: var(--space-4);
245
+ }
246
+
247
+ .prose > h2 + * {
248
+ margin-top: var(--space-2);
249
+ }
250
+
251
+ .prose > * + h2 {
252
+ margin-top: var(--space-8);
253
+ }
254
+ ```
255
+
256
+ ## Iconography
257
+
258
+ ### Icon Sizing System
259
+
260
+ ```css
261
+ :root {
262
+ --icon-xs: 12px;
263
+ --icon-sm: 16px;
264
+ --icon-md: 20px;
265
+ --icon-lg: 24px;
266
+ --icon-xl: 32px;
267
+ }
268
+ ```
269
+
270
+ ### Icon Component
271
+
272
+ ```tsx
273
+ interface IconProps {
274
+ name: string;
275
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
276
+ className?: string;
277
+ }
278
+
279
+ const sizeMap = {
280
+ xs: 12,
281
+ sm: 16,
282
+ md: 20,
283
+ lg: 24,
284
+ xl: 32,
285
+ };
286
+
287
+ export function Icon({ name, size = "md", className }: IconProps) {
288
+ return (
289
+ <svg
290
+ width={sizeMap[size]}
291
+ height={sizeMap[size]}
292
+ className={cn("inline-block flex-shrink-0", className)}
293
+ aria-hidden="true"
294
+ >
295
+ <use href={`/icons.svg#${name}`} />
296
+ </svg>
297
+ );
298
+ }
299
+ ```
300
+
301
+ ## Best Practices
302
+
303
+ 1. **Establish Constraints**: Limit choices to maintain consistency
304
+ 2. **Document Decisions**: Create a living style guide
305
+ 3. **Test Accessibility**: Verify contrast, sizing, touch targets
306
+ 4. **Use Semantic Tokens**: Name by purpose, not appearance
307
+ 5. **Design Mobile-First**: Start with constraints, add complexity
308
+ 6. **Maintain Vertical Rhythm**: Consistent spacing creates harmony
309
+ 7. **Limit Font Weights**: 2-3 weights per family is sufficient
310
+
311
+ ## Common Issues
312
+
313
+ - **Inconsistent Spacing**: Not using a defined scale
314
+ - **Poor Contrast**: Failing WCAG requirements
315
+ - **Font Overload**: Too many families or weights
316
+ - **Magic Numbers**: Arbitrary values instead of tokens
317
+ - **Missing States**: Forgetting hover, focus, disabled
318
+ - **No Dark Mode Plan**: Retrofitting is harder than planning
319
+
320
+ ## Resources
321
+
322
+ - [Tailwind CSS Documentation](https://tailwindcss.com/docs)
323
+ - [Type Scale Calculator](https://typescale.com/)
324
+ - [Contrast Checker](https://webaim.org/resources/contrastchecker/)
325
+ - [Material Design Color System](https://m3.material.io/styles/color/overview)
326
+ - [Radix Colors](https://www.radix-ui.com/colors)