@mrtrinhvn/ag-kit 1.0.11 → 1.1.1

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 (218) hide show
  1. package/README.md +31 -0
  2. package/bin/cli.js +72 -0
  3. package/package.json +7 -1
  4. package/template/.agent/knowledge/orchestrator_v3_protocol.md +60 -0
  5. package/template/.agent/knowledge/self_healing_logs.md +22 -0
  6. package/{.agent → template/.agent}/skills/telegram-agentic-gateway/SKILL.md +0 -0
  7. package/template/.agent/skills/vfs-assistant/SKILL.md +39 -0
  8. package/.agent/agents/backend-specialist.md +0 -263
  9. package/.agent/agents/code-archaeologist.md +0 -106
  10. package/.agent/agents/database-architect.md +0 -226
  11. package/.agent/agents/debugger.md +0 -225
  12. package/.agent/agents/devops-engineer.md +0 -242
  13. package/.agent/agents/documentation-writer.md +0 -104
  14. package/.agent/agents/explorer-agent.md +0 -73
  15. package/.agent/agents/frontend-specialist.md +0 -556
  16. package/.agent/agents/game-developer.md +0 -162
  17. package/.agent/agents/mobile-developer.md +0 -377
  18. package/.agent/agents/orchestrator.md +0 -416
  19. package/.agent/agents/penetration-tester.md +0 -188
  20. package/.agent/agents/performance-optimizer.md +0 -187
  21. package/.agent/agents/product-manager.md +0 -112
  22. package/.agent/agents/product-owner.md +0 -95
  23. package/.agent/agents/project-planner.md +0 -406
  24. package/.agent/agents/qa-automation-engineer.md +0 -103
  25. package/.agent/agents/quant-architect.md +0 -31
  26. package/.agent/agents/security-auditor.md +0 -170
  27. package/.agent/agents/seo-specialist.md +0 -111
  28. package/.agent/agents/test-engineer.md +0 -158
  29. package/.agent/rules/GEMINI.md +0 -280
  30. package/.agent/scripts/auto_preview.py +0 -148
  31. package/.agent/scripts/checklist.py +0 -217
  32. package/.agent/scripts/session_manager.py +0 -120
  33. package/.agent/scripts/verify_all.py +0 -327
  34. package/.agent/skills/api-patterns/SKILL.md +0 -81
  35. package/.agent/skills/api-patterns/api-style.md +0 -42
  36. package/.agent/skills/api-patterns/auth.md +0 -24
  37. package/.agent/skills/api-patterns/documentation.md +0 -26
  38. package/.agent/skills/api-patterns/graphql.md +0 -41
  39. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  40. package/.agent/skills/api-patterns/response.md +0 -37
  41. package/.agent/skills/api-patterns/rest.md +0 -40
  42. package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  43. package/.agent/skills/api-patterns/security-testing.md +0 -122
  44. package/.agent/skills/api-patterns/trpc.md +0 -41
  45. package/.agent/skills/api-patterns/versioning.md +0 -22
  46. package/.agent/skills/app-builder/SKILL.md +0 -75
  47. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  48. package/.agent/skills/app-builder/feature-building.md +0 -53
  49. package/.agent/skills/app-builder/project-detection.md +0 -34
  50. package/.agent/skills/app-builder/scaffolding.md +0 -118
  51. package/.agent/skills/app-builder/tech-stack.md +0 -40
  52. package/.agent/skills/app-builder/templates/SKILL.md +0 -39
  53. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  54. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  55. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  56. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  57. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  58. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  59. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  60. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -82
  61. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -100
  62. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -106
  63. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -101
  64. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  65. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -93
  66. package/.agent/skills/architecture/SKILL.md +0 -55
  67. package/.agent/skills/architecture/context-discovery.md +0 -43
  68. package/.agent/skills/architecture/examples.md +0 -94
  69. package/.agent/skills/architecture/pattern-selection.md +0 -68
  70. package/.agent/skills/architecture/patterns-reference.md +0 -50
  71. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  72. package/.agent/skills/bash-linux/SKILL.md +0 -199
  73. package/.agent/skills/behavioral-modes/SKILL.md +0 -242
  74. package/.agent/skills/brainstorming/SKILL.md +0 -168
  75. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -350
  76. package/.agent/skills/business-ops/SKILL.md +0 -26
  77. package/.agent/skills/clean-code/SKILL.md +0 -202
  78. package/.agent/skills/cli-generator/SKILL.md +0 -48
  79. package/.agent/skills/code-review-checklist/SKILL.md +0 -109
  80. package/.agent/skills/cognitive-session/SKILL.md +0 -28
  81. package/.agent/skills/data-science/SKILL.md +0 -28
  82. package/.agent/skills/database-design/SKILL.md +0 -52
  83. package/.agent/skills/database-design/database-selection.md +0 -43
  84. package/.agent/skills/database-design/indexing.md +0 -39
  85. package/.agent/skills/database-design/migrations.md +0 -48
  86. package/.agent/skills/database-design/optimization.md +0 -36
  87. package/.agent/skills/database-design/orm-selection.md +0 -30
  88. package/.agent/skills/database-design/schema-design.md +0 -56
  89. package/.agent/skills/database-design/scripts/schema_validator.py +0 -172
  90. package/.agent/skills/deployment-procedures/SKILL.md +0 -241
  91. package/.agent/skills/doc.md +0 -177
  92. package/.agent/skills/documentation-templates/SKILL.md +0 -194
  93. package/.agent/skills/frontend-design/SKILL.md +0 -418
  94. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  95. package/.agent/skills/frontend-design/color-system.md +0 -311
  96. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  97. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  98. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
  99. package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
  100. package/.agent/skills/frontend-design/typography-system.md +0 -345
  101. package/.agent/skills/frontend-design/ux-psychology.md +0 -541
  102. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  103. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  104. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  105. package/.agent/skills/game-development/SKILL.md +0 -167
  106. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  107. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  108. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  109. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  110. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  111. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  112. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  113. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
  114. package/.agent/skills/geo-fundamentals/SKILL.md +0 -156
  115. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +0 -289
  116. package/.agent/skills/i18n-localization/SKILL.md +0 -154
  117. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  118. package/.agent/skills/intelligent-routing/SKILL.md +0 -335
  119. package/.agent/skills/knowledge-management/SKILL.md +0 -66
  120. package/.agent/skills/lint-and-validate/SKILL.md +0 -45
  121. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +0 -172
  122. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  123. package/.agent/skills/llm-routing-quirks/SKILL.md +0 -41
  124. package/.agent/skills/mcp-builder/SKILL.md +0 -176
  125. package/.agent/skills/memory-architecture/SKILL.md +0 -107
  126. package/.agent/skills/mini-antigravity-injection/SKILL.md +0 -66
  127. package/.agent/skills/mobile-design/SKILL.md +0 -394
  128. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  129. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  130. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  131. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  132. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  133. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  134. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  135. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  136. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  137. package/.agent/skills/mobile-design/platform-android.md +0 -666
  138. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  139. package/.agent/skills/mobile-design/scripts/mobile_audit.py +0 -670
  140. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  141. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  142. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  143. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  144. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  145. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  146. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  147. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  148. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  149. package/.agent/skills/nextjs-react-expert/SKILL.md +0 -267
  150. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +0 -222
  151. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -252
  152. package/.agent/skills/nodejs-best-practices/SKILL.md +0 -333
  153. package/.agent/skills/parallel-agents/SKILL.md +0 -175
  154. package/.agent/skills/performance-profiling/SKILL.md +0 -143
  155. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +0 -76
  156. package/.agent/skills/plan-writing/SKILL.md +0 -153
  157. package/.agent/skills/powershell-windows/SKILL.md +0 -167
  158. package/.agent/skills/product-management/SKILL.md +0 -30
  159. package/.agent/skills/python-patterns/SKILL.md +0 -441
  160. package/.agent/skills/red-team-tactics/SKILL.md +0 -199
  161. package/.agent/skills/seo-fundamentals/SKILL.md +0 -129
  162. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +0 -219
  163. package/.agent/skills/server-management/SKILL.md +0 -161
  164. package/.agent/skills/systematic-debugging/SKILL.md +0 -120
  165. package/.agent/skills/tailwind-patterns/SKILL.md +0 -269
  166. package/.agent/skills/tdd-workflow/SKILL.md +0 -148
  167. package/.agent/skills/testing-patterns/SKILL.md +0 -178
  168. package/.agent/skills/testing-patterns/scripts/test_runner.py +0 -219
  169. package/.agent/skills/vulnerability-scanner/SKILL.md +0 -276
  170. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
  171. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +0 -458
  172. package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
  173. package/.agent/skills/webapp-testing/SKILL.md +0 -187
  174. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +0 -173
  175. package/.agent/workflows/brainstorm.md +0 -113
  176. package/.agent/workflows/create.md +0 -59
  177. package/.agent/workflows/debug.md +0 -103
  178. package/.agent/workflows/deploy.md +0 -176
  179. package/.agent/workflows/enhance.md +0 -63
  180. package/.agent/workflows/orchestrate.md +0 -237
  181. package/.agent/workflows/plan.md +0 -89
  182. package/.agent/workflows/preview.md +0 -81
  183. package/.agent/workflows/status.md +0 -86
  184. package/.agent/workflows/test.md +0 -144
  185. package/.agent/workflows/ui-ux-pro-max.md +0 -296
  186. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/charts.csv +0 -0
  187. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/colors.csv +0 -0
  188. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/icons.csv +0 -0
  189. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/landing.csv +0 -0
  190. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/products.csv +0 -0
  191. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/prompts.csv +0 -0
  192. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/react-performance.csv +0 -0
  193. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -0
  194. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -0
  195. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -0
  196. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -0
  197. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -0
  198. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -0
  199. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -0
  200. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -0
  201. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -0
  202. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -0
  203. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -0
  204. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -0
  205. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/styles.csv +0 -0
  206. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/typography.csv +0 -0
  207. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -0
  208. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -0
  209. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/data/web-interface.csv +0 -0
  210. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  211. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  212. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/scripts/core.py +0 -0
  213. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/scripts/design_system.py +0 -0
  214. /package/{.agent → template/.agent}/.shared/ui-ux-pro-max/scripts/search.py +0 -0
  215. /package/{.agent → template/.agent}/ARCHITECTURE.md +0 -0
  216. /package/{.agent → template/.agent}/mcp_config.json +0 -0
  217. /package/{.agent → template/.agent}/skills/nextjs-react-expert/9-cache-components.md +0 -0
  218. /package/{.agent → template/.agent}/skills/rust-pro/SKILL.md +0 -0
@@ -1,306 +0,0 @@
1
- # Motion Graphics Reference
2
-
3
- > Advanced animation techniques for premium web experiences - Lottie, GSAP, SVG, 3D, Particles.
4
- > **Learn the principles, create WOW effects.**
5
-
6
- ---
7
-
8
- ## 1. Lottie Animations
9
-
10
- ### What is Lottie?
11
-
12
- ```
13
- JSON-based vector animations:
14
- ├── Exported from After Effects via Bodymovin
15
- ├── Lightweight (smaller than GIF/video)
16
- ├── Scalable (vector-based, no pixelation)
17
- ├── Interactive (control playback, segments)
18
- └── Cross-platform (web, iOS, Android, React Native)
19
- ```
20
-
21
- ### When to Use Lottie
22
-
23
- | Use Case | Why Lottie? |
24
- |----------|-------------|
25
- | **Loading animations** | Branded, smooth, lightweight |
26
- | **Empty states** | Engaging illustrations |
27
- | **Onboarding flows** | Complex multi-step animations |
28
- | **Success/Error feedback** | Delightful micro-interactions |
29
- | **Animated icons** | Consistent cross-platform |
30
-
31
- ### Principles
32
-
33
- - Keep file size under 100KB for performance
34
- - Use loop sparingly (avoid distraction)
35
- - Provide static fallback for reduced-motion
36
- - Lazy load animation files when possible
37
-
38
- ### Sources
39
-
40
- - LottieFiles.com (free library)
41
- - After Effects + Bodymovin (custom)
42
- - Figma plugins (export from design)
43
-
44
- ---
45
-
46
- ## 2. GSAP (GreenSock)
47
-
48
- ### What Makes GSAP Different
49
-
50
- ```
51
- Professional timeline-based animation:
52
- ├── Precise control over sequences
53
- ├── ScrollTrigger for scroll-driven animations
54
- ├── MorphSVG for shape transitions
55
- ├── Physics-based easing
56
- └── Works with any DOM element
57
- ```
58
-
59
- ### Core Concepts
60
-
61
- | Concept | Purpose |
62
- |---------|---------|
63
- | **Tween** | Single A→B animation |
64
- | **Timeline** | Sequenced/overlapping animations |
65
- | **ScrollTrigger** | Scroll position controls playback |
66
- | **Stagger** | Cascade effect across elements |
67
-
68
- ### When to Use GSAP
69
-
70
- - ✅ Complex sequenced animations
71
- - ✅ Scroll-triggered reveals
72
- - ✅ Precise timing control needed
73
- - ✅ SVG morphing effects
74
- - ❌ Simple hover/focus effects (use CSS)
75
- - ❌ Performance-critical mobile (heavier)
76
-
77
- ### Principles
78
-
79
- - Use timeline for orchestration (not individual tweens)
80
- - Stagger delay: 0.05-0.15s between items
81
- - ScrollTrigger: start at 70-80% viewport entry
82
- - Kill animations on unmount (prevent memory leaks)
83
-
84
- ---
85
-
86
- ## 3. SVG Animations
87
-
88
- ### Types of SVG Animation
89
-
90
- | Type | Technique | Use Case |
91
- |------|-----------|----------|
92
- | **Line Drawing** | stroke-dashoffset | Logo reveals, signatures |
93
- | **Morph** | Path interpolation | Icon transitions |
94
- | **Transform** | rotate, scale, translate | Interactive icons |
95
- | **Color** | fill/stroke transition | State changes |
96
-
97
- ### Line Drawing Principles
98
-
99
- ```
100
- How stroke-dashoffset drawing works:
101
- ├── Set dasharray to path length
102
- ├── Set dashoffset equal to dasharray (hidden)
103
- ├── Animate dashoffset to 0 (revealed)
104
- └── Create "drawing" effect
105
- ```
106
-
107
- ### When to Use SVG Animations
108
-
109
- - ✅ Logo reveals, brand moments
110
- - ✅ Icon state transitions (hamburger ↔ X)
111
- - ✅ Infographics, data visualization
112
- - ✅ Interactive illustrations
113
- - ❌ Photo-realistic content (use video)
114
- - ❌ Very complex scenes (performance)
115
-
116
- ### Principles
117
-
118
- - Get path length dynamically for accuracy
119
- - Duration: 1-3s for full drawings
120
- - Easing: ease-out for natural feel
121
- - Simple fills complement, don't compete
122
-
123
- ---
124
-
125
- ## 4. 3D CSS Transforms
126
-
127
- ### Core Properties
128
-
129
- ```
130
- CSS 3D Space:
131
- ├── perspective: depth of 3D field (500-1500px typical)
132
- ├── transform-style: preserve-3d (enable children 3D)
133
- ├── rotateX/Y/Z: rotation per axis
134
- ├── translateZ: move toward/away from viewer
135
- └── backface-visibility: show/hide back side
136
- ```
137
-
138
- ### Common 3D Patterns
139
-
140
- | Pattern | Use Case |
141
- |---------|----------|
142
- | **Card flip** | Reveals, flashcards, product views |
143
- | **Tilt on hover** | Interactive cards, 3D depth |
144
- | **Parallax layers** | Hero sections, immersive scrolling |
145
- | **3D carousel** | Image galleries, sliders |
146
-
147
- ### Principles
148
-
149
- - Perspective: 800-1200px for subtle, 400-600px for dramatic
150
- - Keep transforms simple (rotate + translate)
151
- - Ensure backface-visibility: hidden for flips
152
- - Test on Safari (different rendering)
153
-
154
- ---
155
-
156
- ## 5. Particle Effects
157
-
158
- ### Types of Particle Systems
159
-
160
- | Type | Feel | Use Case |
161
- |------|------|----------|
162
- | **Geometric** | Tech, network | SaaS, tech sites |
163
- | **Confetti** | Celebration | Success moments |
164
- | **Snow/Rain** | Atmospheric | Seasonal, mood |
165
- | **Dust/Bokeh** | Dreamy | Photography, luxury |
166
- | **Fireflies** | Magical | Games, fantasy |
167
-
168
- ### Libraries
169
-
170
- | Library | Best For |
171
- |---------|----------|
172
- | **tsParticles** | Configurable, lightweight |
173
- | **particles.js** | Simple backgrounds |
174
- | **Canvas API** | Custom, maximum control |
175
- | **Three.js** | Complex 3D particles |
176
-
177
- ### Principles
178
-
179
- - Default: 30-50 particles (not overwhelming)
180
- - Movement: slow, organic (speed 0.5-2)
181
- - Opacity: 0.3-0.6 (don't compete with content)
182
- - Connections: subtle lines for "network" feel
183
- - ⚠️ Disable or reduce on mobile
184
-
185
- ### When to Use
186
-
187
- - ✅ Hero backgrounds (atmospheric)
188
- - ✅ Success celebrations (confetti burst)
189
- - ✅ Tech visualization (connected nodes)
190
- - ❌ Content-heavy pages (distraction)
191
- - ❌ Low-powered devices (battery drain)
192
-
193
- ---
194
-
195
- ## 6. Scroll-Driven Animations
196
-
197
- ### Native CSS (Modern)
198
-
199
- ```
200
- CSS Scroll Timelines:
201
- ├── animation-timeline: scroll() - document scroll
202
- ├── animation-timeline: view() - element in viewport
203
- ├── animation-range: entry/exit thresholds
204
- └── No JavaScript required
205
- ```
206
-
207
- ### Principles
208
-
209
- | Trigger Point | Use Case |
210
- |---------------|----------|
211
- | **Entry 0%** | When element starts entering |
212
- | **Entry 50%** | When half visible |
213
- | **Cover 50%** | When centered in viewport |
214
- | **Exit 100%** | When fully exited |
215
-
216
- ### Best Practices
217
-
218
- - Reveal animations: start at ~25% entry
219
- - Parallax: continuous scroll progress
220
- - Sticky elements: use cover range
221
- - Always test scroll performance
222
-
223
- ---
224
-
225
- ## 7. Performance Principles
226
-
227
- ### GPU vs CPU Animation
228
-
229
- ```
230
- CHEAP (GPU-accelerated):
231
- ├── transform (translate, scale, rotate)
232
- ├── opacity
233
- └── filter (use sparingly)
234
-
235
- EXPENSIVE (triggers reflow):
236
- ├── width, height
237
- ├── top, left, right, bottom
238
- ├── padding, margin
239
- └── complex box-shadow
240
- ```
241
-
242
- ### Optimization Checklist
243
-
244
- - [ ] Animate only transform/opacity
245
- - [ ] Use `will-change` before heavy animations (remove after)
246
- - [ ] Test on low-end devices
247
- - [ ] Implement `prefers-reduced-motion`
248
- - [ ] Lazy load animation libraries
249
- - [ ] Throttle scroll-based calculations
250
-
251
- ---
252
-
253
- ## 8. Motion Graphics Decision Tree
254
-
255
- ```
256
- What animation do you need?
257
-
258
- ├── Complex branded animation?
259
- │ └── Lottie (After Effects export)
260
-
261
- ├── Sequenced scroll-triggered?
262
- │ └── GSAP + ScrollTrigger
263
-
264
- ├── Logo/icon animation?
265
- │ └── SVG animation (stroke or morph)
266
-
267
- ├── Interactive 3D effect?
268
- │ └── CSS 3D Transforms (simple) or Three.js (complex)
269
-
270
- ├── Atmospheric background?
271
- │ └── tsParticles or Canvas
272
-
273
- └── Simple entrance/hover?
274
- └── CSS @keyframes or Framer Motion
275
- ```
276
-
277
- ---
278
-
279
- ## 9. Anti-Patterns
280
-
281
- | ❌ Don't | ✅ Do |
282
- |----------|-------|
283
- | Animate everything at once | Stagger and sequence |
284
- | Use heavy libraries for simple effects | Start with CSS |
285
- | Ignore reduced-motion | Always provide fallback |
286
- | Block main thread | Optimize for 60fps |
287
- | Same particles every project | Match brand/context |
288
- | Complex effects on mobile | Feature detection |
289
-
290
- ---
291
-
292
- ## 10. Quick Reference
293
-
294
- | Effect | Tool | Performance |
295
- |--------|------|-------------|
296
- | Loading spinner | CSS/Lottie | Light |
297
- | Staggered reveal | GSAP/Framer | Medium |
298
- | SVG path draw | CSS stroke | Light |
299
- | 3D card flip | CSS transforms | Light |
300
- | Particle background | tsParticles | Heavy |
301
- | Scroll parallax | GSAP ScrollTrigger | Medium |
302
- | Shape morphing | GSAP MorphSVG | Medium |
303
-
304
- ---
305
-
306
- > **Remember**: Motion graphics should enhance, not distract. Every animation must serve a PURPOSE—feedback, guidance, delight, or storytelling.
@@ -1,183 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Accessibility Checker - WCAG compliance audit
4
- Checks HTML files for accessibility issues.
5
-
6
- Usage:
7
- python accessibility_checker.py <project_path>
8
-
9
- Checks:
10
- - Form labels
11
- - ARIA attributes
12
- - Color contrast hints
13
- - Keyboard navigation
14
- - Semantic HTML
15
- """
16
-
17
- import sys
18
- import json
19
- import re
20
- from pathlib import Path
21
- from datetime import datetime
22
-
23
- # Fix Windows console encoding
24
- try:
25
- sys.stdout.reconfigure(encoding='utf-8', errors='replace')
26
- except:
27
- pass
28
-
29
-
30
- def find_html_files(project_path: Path) -> list:
31
- """Find all HTML/JSX/TSX files."""
32
- patterns = ['**/*.html', '**/*.jsx', '**/*.tsx']
33
- skip_dirs = {'node_modules', '.next', 'dist', 'build', '.git'}
34
-
35
- files = []
36
- for pattern in patterns:
37
- for f in project_path.glob(pattern):
38
- if not any(skip in f.parts for skip in skip_dirs):
39
- files.append(f)
40
-
41
- return files[:50]
42
-
43
-
44
- def check_accessibility(file_path: Path) -> list:
45
- """Check a single file for accessibility issues."""
46
- issues = []
47
-
48
- try:
49
- content = file_path.read_text(encoding='utf-8', errors='ignore')
50
-
51
- # Check for form inputs without labels
52
- inputs = re.findall(r'<input[^>]*>', content, re.IGNORECASE)
53
- for inp in inputs:
54
- if 'type="hidden"' not in inp.lower():
55
- if 'aria-label' not in inp.lower() and 'id=' not in inp.lower():
56
- issues.append("Input without label or aria-label")
57
- break
58
-
59
- # Check for buttons without accessible text
60
- buttons = re.findall(r'<button[^>]*>[^<]*</button>', content, re.IGNORECASE)
61
- for btn in buttons:
62
- # Check if button has text content or aria-label
63
- if 'aria-label' not in btn.lower():
64
- text = re.sub(r'<[^>]+>', '', btn)
65
- if not text.strip():
66
- issues.append("Button without accessible text")
67
- break
68
-
69
- # Check for missing lang attribute
70
- if '<html' in content.lower() and 'lang=' not in content.lower():
71
- issues.append("Missing lang attribute on <html>")
72
-
73
- # Check for missing skip link
74
- if '<main' in content.lower() or '<body' in content.lower():
75
- if 'skip' not in content.lower() and '#main' not in content.lower():
76
- issues.append("Consider adding skip-to-main-content link")
77
-
78
- # Check for click handlers without keyboard support
79
- onclick_count = content.lower().count('onclick=')
80
- onkeydown_count = content.lower().count('onkeydown=') + content.lower().count('onkeyup=')
81
- if onclick_count > 0 and onkeydown_count == 0:
82
- issues.append("onClick without keyboard handler (onKeyDown)")
83
-
84
- # Check for tabIndex misuse
85
- if 'tabindex=' in content.lower():
86
- if 'tabindex="-1"' not in content.lower() and 'tabindex="0"' not in content.lower():
87
- positive_tabindex = re.findall(r'tabindex="([1-9]\d*)"', content, re.IGNORECASE)
88
- if positive_tabindex:
89
- issues.append("Avoid positive tabIndex values")
90
-
91
- # Check for autoplay media
92
- if 'autoplay' in content.lower():
93
- if 'muted' not in content.lower():
94
- issues.append("Autoplay media should be muted")
95
-
96
- # Check for role usage
97
- if 'role="button"' in content.lower():
98
- # Divs with role button should have tabindex
99
- div_buttons = re.findall(r'<div[^>]*role="button"[^>]*>', content, re.IGNORECASE)
100
- for div in div_buttons:
101
- if 'tabindex' not in div.lower():
102
- issues.append("role='button' without tabindex")
103
- break
104
-
105
- except Exception as e:
106
- issues.append(f"Error reading file: {str(e)[:50]}")
107
-
108
- return issues
109
-
110
-
111
- def main():
112
- project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
113
-
114
- print(f"\n{'='*60}")
115
- print(f"[ACCESSIBILITY CHECKER] WCAG Compliance Audit")
116
- print(f"{'='*60}")
117
- print(f"Project: {project_path}")
118
- print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
119
- print("-"*60)
120
-
121
- # Find HTML files
122
- files = find_html_files(project_path)
123
- print(f"Found {len(files)} HTML/JSX/TSX files")
124
-
125
- if not files:
126
- output = {
127
- "script": "accessibility_checker",
128
- "project": str(project_path),
129
- "files_checked": 0,
130
- "issues_found": 0,
131
- "passed": True,
132
- "message": "No HTML files found"
133
- }
134
- print(json.dumps(output, indent=2))
135
- sys.exit(0)
136
-
137
- # Check each file
138
- all_issues = []
139
-
140
- for f in files:
141
- issues = check_accessibility(f)
142
- if issues:
143
- all_issues.append({
144
- "file": str(f.name),
145
- "issues": issues
146
- })
147
-
148
- # Summary
149
- print("\n" + "="*60)
150
- print("ACCESSIBILITY ISSUES")
151
- print("="*60)
152
-
153
- if all_issues:
154
- for item in all_issues[:10]:
155
- print(f"\n{item['file']}:")
156
- for issue in item["issues"]:
157
- print(f" - {issue}")
158
-
159
- if len(all_issues) > 10:
160
- print(f"\n... and {len(all_issues) - 10} more files with issues")
161
- else:
162
- print("No accessibility issues found!")
163
-
164
- total_issues = sum(len(item["issues"]) for item in all_issues)
165
- # Accessibility issues are important but not blocking
166
- passed = total_issues < 5 # Allow minor issues
167
-
168
- output = {
169
- "script": "accessibility_checker",
170
- "project": str(project_path),
171
- "files_checked": len(files),
172
- "files_with_issues": len(all_issues),
173
- "issues_found": total_issues,
174
- "passed": passed
175
- }
176
-
177
- print("\n" + json.dumps(output, indent=2))
178
-
179
- sys.exit(0 if passed else 1)
180
-
181
-
182
- if __name__ == "__main__":
183
- main()