tribunal-kit 2.4.6 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +139 -86
  4. package/.agent/agents/ai-code-reviewer.md +160 -90
  5. package/.agent/agents/backend-specialist.md +164 -127
  6. package/.agent/agents/code-archaeologist.md +115 -73
  7. package/.agent/agents/database-architect.md +130 -110
  8. package/.agent/agents/debugger.md +137 -97
  9. package/.agent/agents/dependency-reviewer.md +78 -30
  10. package/.agent/agents/devops-engineer.md +161 -118
  11. package/.agent/agents/documentation-writer.md +151 -87
  12. package/.agent/agents/explorer-agent.md +117 -99
  13. package/.agent/agents/frontend-reviewer.md +127 -47
  14. package/.agent/agents/frontend-specialist.md +169 -109
  15. package/.agent/agents/game-developer.md +28 -164
  16. package/.agent/agents/logic-reviewer.md +87 -49
  17. package/.agent/agents/mobile-developer.md +151 -103
  18. package/.agent/agents/mobile-reviewer.md +133 -50
  19. package/.agent/agents/orchestrator.md +121 -110
  20. package/.agent/agents/penetration-tester.md +103 -77
  21. package/.agent/agents/performance-optimizer.md +136 -92
  22. package/.agent/agents/performance-reviewer.md +139 -69
  23. package/.agent/agents/product-manager.md +104 -70
  24. package/.agent/agents/product-owner.md +6 -25
  25. package/.agent/agents/project-planner.md +95 -95
  26. package/.agent/agents/qa-automation-engineer.md +174 -87
  27. package/.agent/agents/security-auditor.md +133 -129
  28. package/.agent/agents/seo-specialist.md +160 -99
  29. package/.agent/agents/sql-reviewer.md +132 -44
  30. package/.agent/agents/supervisor-agent.md +137 -109
  31. package/.agent/agents/swarm-worker-contracts.md +17 -17
  32. package/.agent/agents/swarm-worker-registry.md +46 -46
  33. package/.agent/agents/test-coverage-reviewer.md +132 -53
  34. package/.agent/agents/test-engineer.md +0 -21
  35. package/.agent/agents/type-safety-reviewer.md +143 -33
  36. package/.agent/patterns/generator.md +9 -9
  37. package/.agent/patterns/inversion.md +12 -12
  38. package/.agent/patterns/pipeline.md +9 -9
  39. package/.agent/patterns/reviewer.md +13 -13
  40. package/.agent/patterns/tool-wrapper.md +9 -9
  41. package/.agent/rules/GEMINI.md +63 -63
  42. package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
  43. package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
  44. package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
  45. package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
  46. package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
  47. package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
  48. package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
  49. package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
  50. package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
  51. package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
  52. package/.agent/scripts/compress_skills.py +167 -0
  53. package/.agent/scripts/consolidate_skills.py +173 -0
  54. package/.agent/scripts/deep_compress.py +202 -0
  55. package/.agent/scripts/minify_context.py +80 -0
  56. package/.agent/scripts/security_scan.py +1 -1
  57. package/.agent/scripts/strip_tribunal.py +41 -0
  58. package/.agent/skills/agent-organizer/SKILL.md +60 -100
  59. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  60. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +108 -53
  61. package/.agent/skills/api-patterns/SKILL.md +197 -257
  62. package/.agent/skills/api-security-auditor/SKILL.md +125 -57
  63. package/.agent/skills/app-builder/SKILL.md +326 -50
  64. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  65. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  66. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  67. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  68. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  69. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  70. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  71. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  72. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  73. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  74. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  75. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  76. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  77. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  78. package/.agent/skills/appflow-wireframe/SKILL.md +71 -98
  79. package/.agent/skills/architecture/SKILL.md +161 -200
  80. package/.agent/skills/authentication-best-practices/SKILL.md +121 -54
  81. package/.agent/skills/bash-linux/SKILL.md +71 -166
  82. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  83. package/.agent/skills/brainstorming/SKILL.md +345 -127
  84. package/.agent/skills/building-native-ui/SKILL.md +125 -57
  85. package/.agent/skills/clean-code/SKILL.md +266 -149
  86. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  87. package/.agent/skills/config-validator/SKILL.md +73 -131
  88. package/.agent/skills/csharp-developer/SKILL.md +434 -73
  89. package/.agent/skills/database-design/SKILL.md +190 -275
  90. package/.agent/skills/deployment-procedures/SKILL.md +81 -158
  91. package/.agent/skills/devops-engineer/SKILL.md +255 -94
  92. package/.agent/skills/devops-incident-responder/SKILL.md +50 -69
  93. package/.agent/skills/doc.md +5 -5
  94. package/.agent/skills/documentation-templates/SKILL.md +19 -63
  95. package/.agent/skills/edge-computing/SKILL.md +75 -165
  96. package/.agent/skills/extract-design-system/SKILL.md +84 -58
  97. package/.agent/skills/framer-motion-expert/SKILL.md +195 -0
  98. package/.agent/skills/frontend-design/SKILL.md +151 -499
  99. package/.agent/skills/game-design-expert/SKILL.md +71 -0
  100. package/.agent/skills/game-engineering-expert/SKILL.md +88 -0
  101. package/.agent/skills/geo-fundamentals/SKILL.md +52 -178
  102. package/.agent/skills/github-operations/SKILL.md +197 -272
  103. package/.agent/skills/gsap-expert/SKILL.md +194 -0
  104. package/.agent/skills/i18n-localization/SKILL.md +60 -172
  105. package/.agent/skills/intelligent-routing/SKILL.md +123 -103
  106. package/.agent/skills/lint-and-validate/SKILL.md +8 -52
  107. package/.agent/skills/llm-engineering/SKILL.md +281 -195
  108. package/.agent/skills/local-first/SKILL.md +76 -159
  109. package/.agent/skills/mcp-builder/SKILL.md +48 -188
  110. package/.agent/skills/mobile-design/SKILL.md +213 -219
  111. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  112. package/.agent/skills/nextjs-react-expert/SKILL.md +184 -203
  113. package/.agent/skills/nodejs-best-practices/SKILL.md +403 -185
  114. package/.agent/skills/observability/SKILL.md +211 -203
  115. package/.agent/skills/parallel-agents/SKILL.md +53 -146
  116. package/.agent/skills/performance-profiling/SKILL.md +171 -151
  117. package/.agent/skills/plan-writing/SKILL.md +49 -153
  118. package/.agent/skills/platform-engineer/SKILL.md +57 -103
  119. package/.agent/skills/playwright-best-practices/SKILL.md +110 -63
  120. package/.agent/skills/powershell-windows/SKILL.md +61 -179
  121. package/.agent/skills/python-patterns/SKILL.md +7 -35
  122. package/.agent/skills/python-pro/SKILL.md +273 -114
  123. package/.agent/skills/react-specialist/SKILL.md +227 -108
  124. package/.agent/skills/readme-builder/SKILL.md +15 -85
  125. package/.agent/skills/realtime-patterns/SKILL.md +216 -243
  126. package/.agent/skills/red-team-tactics/SKILL.md +10 -51
  127. package/.agent/skills/rust-pro/SKILL.md +525 -142
  128. package/.agent/skills/seo-fundamentals/SKILL.md +92 -153
  129. package/.agent/skills/server-management/SKILL.md +110 -166
  130. package/.agent/skills/shadcn-ui-expert/SKILL.md +154 -55
  131. package/.agent/skills/skill-creator/SKILL.md +18 -58
  132. package/.agent/skills/sql-pro/SKILL.md +543 -68
  133. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +28 -68
  134. package/.agent/skills/swiftui-expert/SKILL.md +124 -57
  135. package/.agent/skills/systematic-debugging/SKILL.md +49 -151
  136. package/.agent/skills/tailwind-patterns/SKILL.md +433 -149
  137. package/.agent/skills/tdd-workflow/SKILL.md +63 -169
  138. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  139. package/.agent/skills/testing-patterns/SKILL.md +437 -130
  140. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  141. package/.agent/skills/ui-ux-pro-max/SKILL.md +0 -41
  142. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  143. package/.agent/skills/vue-expert/SKILL.md +225 -119
  144. package/.agent/skills/vulnerability-scanner/SKILL.md +264 -226
  145. package/.agent/skills/web-accessibility-auditor/SKILL.md +141 -58
  146. package/.agent/skills/web-design-guidelines/SKILL.md +17 -61
  147. package/.agent/skills/webapp-testing/SKILL.md +71 -196
  148. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  149. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  150. package/.agent/workflows/api-tester.md +96 -224
  151. package/.agent/workflows/audit.md +81 -122
  152. package/.agent/workflows/brainstorm.md +69 -105
  153. package/.agent/workflows/changelog.md +65 -97
  154. package/.agent/workflows/create.md +73 -88
  155. package/.agent/workflows/debug.md +80 -111
  156. package/.agent/workflows/deploy.md +119 -92
  157. package/.agent/workflows/enhance.md +80 -91
  158. package/.agent/workflows/fix.md +68 -97
  159. package/.agent/workflows/generate.md +165 -164
  160. package/.agent/workflows/migrate.md +106 -109
  161. package/.agent/workflows/orchestrate.md +103 -86
  162. package/.agent/workflows/performance-benchmarker.md +77 -268
  163. package/.agent/workflows/plan.md +120 -98
  164. package/.agent/workflows/preview.md +39 -96
  165. package/.agent/workflows/refactor.md +105 -97
  166. package/.agent/workflows/review-ai.md +63 -102
  167. package/.agent/workflows/review.md +71 -110
  168. package/.agent/workflows/session.md +53 -113
  169. package/.agent/workflows/status.md +42 -88
  170. package/.agent/workflows/strengthen-skills.md +90 -51
  171. package/.agent/workflows/swarm.md +114 -129
  172. package/.agent/workflows/test.md +125 -102
  173. package/.agent/workflows/tribunal-backend.md +60 -78
  174. package/.agent/workflows/tribunal-database.md +62 -100
  175. package/.agent/workflows/tribunal-frontend.md +62 -82
  176. package/.agent/workflows/tribunal-full.md +56 -100
  177. package/.agent/workflows/tribunal-mobile.md +65 -94
  178. package/.agent/workflows/tribunal-performance.md +62 -105
  179. package/.agent/workflows/ui-ux-pro-max.md +72 -121
  180. package/README.md +11 -15
  181. package/package.json +1 -1
  182. package/.agent/skills/api-patterns/api-style.md +0 -42
  183. package/.agent/skills/api-patterns/auth.md +0 -24
  184. package/.agent/skills/api-patterns/documentation.md +0 -26
  185. package/.agent/skills/api-patterns/graphql.md +0 -41
  186. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  187. package/.agent/skills/api-patterns/response.md +0 -37
  188. package/.agent/skills/api-patterns/rest.md +0 -40
  189. package/.agent/skills/api-patterns/security-testing.md +0 -122
  190. package/.agent/skills/api-patterns/trpc.md +0 -41
  191. package/.agent/skills/api-patterns/versioning.md +0 -22
  192. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  193. package/.agent/skills/app-builder/feature-building.md +0 -53
  194. package/.agent/skills/app-builder/project-detection.md +0 -34
  195. package/.agent/skills/app-builder/scaffolding.md +0 -118
  196. package/.agent/skills/app-builder/tech-stack.md +0 -40
  197. package/.agent/skills/architecture/context-discovery.md +0 -43
  198. package/.agent/skills/architecture/examples.md +0 -94
  199. package/.agent/skills/architecture/pattern-selection.md +0 -68
  200. package/.agent/skills/architecture/patterns-reference.md +0 -50
  201. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  202. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  203. package/.agent/skills/database-design/database-selection.md +0 -43
  204. package/.agent/skills/database-design/indexing.md +0 -39
  205. package/.agent/skills/database-design/migrations.md +0 -48
  206. package/.agent/skills/database-design/optimization.md +0 -36
  207. package/.agent/skills/database-design/orm-selection.md +0 -30
  208. package/.agent/skills/database-design/schema-design.md +0 -56
  209. package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
  210. package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
  211. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  212. package/.agent/skills/frontend-design/color-system.md +0 -329
  213. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  214. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  215. package/.agent/skills/frontend-design/typography-system.md +0 -363
  216. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  217. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  218. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  219. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  220. package/.agent/skills/game-development/SKILL.md +0 -236
  221. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  222. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  223. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  224. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  225. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  226. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  227. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  228. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
  229. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  230. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  231. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  232. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  233. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  234. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  235. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  236. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  237. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  238. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  239. package/.agent/skills/mobile-design/platform-android.md +0 -666
  240. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  241. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  242. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  243. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  244. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  245. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  246. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  247. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  248. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  249. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  250. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -0,0 +1,194 @@
1
+ ---
2
+ name: gsap-expert
3
+ description: GreenSock Animation Platform (GSAP 3.12+) mastery. Core tweens, timelines, ScrollTrigger, ScrollSmoother, plugins, React useGSAP hook, responsive animations, performance. Use when building scroll-driven animations, complex sequencing, SVG morphing, or any animation beyond CSS capabilities.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 3.2.0
6
+ last-updated: 2026-04-07
7
+ applies-to-model: gemini-3-1-pro, claude-3-7-sonnet
8
+ ---
9
+
10
+ # GSAP Expert — 3.12+ Dense Reference
11
+
12
+ ## Hallucination Traps (Read First)
13
+ - ❌ `gsap.registerPlugin(ScrollTrigger)` optional → ✅ **REQUIRED** before any use — must call before component mounts
14
+ - ❌ `easeInOut`, `Power2.easeOut` (GSAP 2 syntax) → ✅ `"power2.inOut"` (string, GSAP 3)
15
+ - ❌ `raw useEffect` for GSAP in React → ✅ `useGSAP` from `@gsap/react` — handles cleanup automatically
16
+ - ❌ Timeline position as 2nd arg → ✅ position is the **3rd** arg: `tl.to(el, { x: 100 }, "<")`
17
+ - ❌ `markers: true` in production → ✅ Debug only — never ship. `gsap.config({ markers: false })`
18
+ - ❌ Animate `width`, `height`, `top`, `left` → ✅ Only `x`, `y`, `scale`, `rotation`, `opacity` (GPU composited)
19
+ - ❌ 1 ScrollTrigger per list item → ✅ Use `ScrollTrigger.batch()` for lists — 1 battery per N items
20
+ - ❌ `dependencies` option spelled `deps` → ✅ option is `dependencies` (not `deps`)
21
+ - ❌ GSAP in Next.js Server Components → ✅ Always `"use client"` — GSAP is browser-only
22
+
23
+ ---
24
+
25
+ ## Core Tweens
26
+
27
+ ```javascript
28
+ gsap.to(".box", { x: 100, opacity: 1, duration: 1, ease: "power2.out" });
29
+ gsap.from(".box", { y: -50, opacity: 0, duration: 0.8 });
30
+ gsap.fromTo(".box", { x: -100 }, { x: 0, duration: 1, ease: "expo.out" });
31
+ gsap.set(".box", { transformOrigin: "center center", willChange: "transform" });
32
+
33
+ // Stagger (multiple elements)
34
+ gsap.from(".item", { opacity: 0, y: 30, stagger: 0.08, ease: "power3.out" });
35
+ gsap.from(".item", { opacity: 0, stagger: { each: 0.1, from: "center", grid: "auto" } });
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Timelines
41
+
42
+ ```javascript
43
+ const tl = gsap.timeline({ defaults: { ease: "power2.out", duration: 0.6 } });
44
+
45
+ tl.from(".hero-title", { y: 60, opacity: 0 })
46
+ .from(".hero-sub", { y: 40, opacity: 0 }, "-=0.4") // overlap 0.4s
47
+ .from(".hero-cta", { scale: 0.9, opacity: 0 }, "<0.1") // 0.1s after prev starts
48
+ .to(".hero-img", { x: 0, opacity: 1 }, 0.3); // absolute 0.3s into tl
49
+
50
+ // Position symbols:
51
+ // "<" → same start time as previous tween
52
+ // ">" → after previous ends
53
+ // "-=0.5" → 0.5s before previous ends (overlap)
54
+ // "+=0.5" → 0.5s after previous ends (gap)
55
+ // "2" → absolute 2s from timeline start
56
+
57
+ // Runtime control
58
+ tl.play(); tl.pause(); tl.reverse(); tl.seek(1.5); tl.timeScale(2); // 2x speed
59
+ ```
60
+
61
+ ---
62
+
63
+ ## ScrollTrigger
64
+
65
+ ```javascript
66
+ import { gsap } from "gsap";
67
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
68
+ gsap.registerPlugin(ScrollTrigger); // REQUIRED — call once at module level
69
+
70
+ // Basic scroll-triggered animation
71
+ gsap.from(".section", {
72
+ scrollTrigger: {
73
+ trigger: ".section",
74
+ start: "top 80%", // "triggerEdge viewportEdge"
75
+ end: "bottom 20%",
76
+ scrub: 1, // smooth scrubbing (seconds to catch up) | true = instant
77
+ pin: true, // pin element during scroll
78
+ anticipatePin: 1, // prevents jump on pin
79
+ markers: false, // NEVER true in production
80
+ },
81
+ y: 100, opacity: 0,
82
+ });
83
+
84
+ // Batch — for lists (1 ST instance per group, not per item)
85
+ ScrollTrigger.batch(".card", {
86
+ onEnter: (elements) => gsap.from(elements, { opacity: 0, y: 40, stagger: 0.08 }),
87
+ start: "top 85%",
88
+ });
89
+
90
+ // Pin + scrub storytelling
91
+ const tl = gsap.timeline({
92
+ scrollTrigger: { trigger: ".scene", pin: true, scrub: true, end: "+=3000" }
93
+ });
94
+ tl.from(".layer-1", { x: -200 }).from(".layer-2", { x: 200 }, "<");
95
+
96
+ // Cleanup — MANDATORY on SPA route unmount
97
+ ScrollTrigger.killAll(); // in component cleanup / router onChange
98
+ ```
99
+
100
+ ---
101
+
102
+ ## React Integration (`useGSAP`)
103
+
104
+ ```tsx
105
+ import { useGSAP } from "@gsap/react";
106
+ import { gsap } from "gsap";
107
+ import { ScrollTrigger } from "gsap/ScrollTrigger";
108
+ import { useRef } from "react";
109
+
110
+ gsap.registerPlugin(ScrollTrigger); // once, outside component
111
+
112
+ export function HeroSection() {
113
+ const container = useRef<HTMLDivElement>(null);
114
+
115
+ useGSAP(() => {
116
+ // ✅ All GSAP code here is automatically scoped & cleaned up
117
+ gsap.from(".hero-title", { y: 60, opacity: 0, duration: 0.8 });
118
+
119
+ gsap.from(".hero-card", {
120
+ scrollTrigger: { trigger: ".hero-card", start: "top 80%" },
121
+ y: 40, opacity: 0, stagger: 0.1,
122
+ });
123
+ }, { scope: container, dependencies: [] }); // re-runs when dependencies change
124
+
125
+ return <div ref={container}><h1 className="hero-title">...</h1></div>;
126
+ }
127
+
128
+ // With cleanup for dynamic content:
129
+ useGSAP(() => {
130
+ const ctx = gsap.context(() => {
131
+ gsap.from(".item", { opacity: 0, stagger: 0.05 });
132
+ }, container);
133
+ return () => ctx.revert(); // explicit cleanup if needed beyond useGSAP scope
134
+ }, { scope: container, dependencies: [items] });
135
+ ```
136
+
137
+ ---
138
+
139
+ ## Responsive Animations (`gsap.matchMedia`)
140
+
141
+ ```javascript
142
+ // Replaces window.matchMedia listeners + resize handlers
143
+ const mm = gsap.matchMedia();
144
+
145
+ mm.add("(min-width: 768px)", () => {
146
+ gsap.to(".sidebar", { x: 0, duration: 0.5 });
147
+ // Return cleanup function
148
+ return () => gsap.set(".sidebar", { x: -300 });
149
+ });
150
+
151
+ mm.add("(max-width: 767px)", () => {
152
+ gsap.to(".mobile-menu", { y: 0, duration: 0.4 });
153
+ });
154
+
155
+ // In React — use inside useGSAP
156
+ useGSAP(() => {
157
+ const mm = gsap.matchMedia();
158
+ mm.add("(prefers-reduced-motion: no-preference)", () => {
159
+ gsap.from(".hero", { y: 100, duration: 1 });
160
+ });
161
+ mm.add("(prefers-reduced-motion: reduce)", () => {
162
+ gsap.set(".hero", { opacity: 1 }); // instant, no animation
163
+ });
164
+ });
165
+ ```
166
+
167
+ ---
168
+
169
+ ## Plugin Reference
170
+
171
+ | Plugin | Use For | Registration |
172
+ |--------|---------|-------------|
173
+ | `ScrollTrigger` | Scroll-driven animations | `gsap.registerPlugin(ScrollTrigger)` |
174
+ | `ScrollSmoother` | Smooth native scroll momentum | Requires `ScrollTrigger` + Club GSAP |
175
+ | `Flip` | Stateful layout morphing (FLIP technique) | `gsap.registerPlugin(Flip)` |
176
+ | `Draggable` | Interactive drag/sort/resize | `gsap.registerPlugin(Draggable)` |
177
+ | `SplitText` | Character/word/line text splits | Call `.revert()` after use to prevent SEO damage |
178
+ | `DrawSVG` | SVG stroke-dasharray animations | Club GSAP |
179
+ | `MorphSVG` | SVG path morphing | Club GSAP |
180
+ | `ScrollToPlugin` | Programmatic scroll-to | `gsap.registerPlugin(ScrollToPlugin)` |
181
+
182
+ ---
183
+
184
+ ## Performance Rules
185
+
186
+ ```
187
+ ✅ Animate: x, y, scale, rotation, skewX/Y, opacity (GPU composited transforms)
188
+ ❌ Never: width, height, top, left, padding, margin (triggers layout/paint)
189
+ ✅ Use willChange: "transform" on elements that will animate
190
+ ✅ overwrite: "auto" to kill conflicting tweens automatically
191
+ ✅ ScrollTrigger.batch() for lists — NOT 1 instance per item
192
+ ✅ gsap.ticker.lagSmoothing(0) in high-framerate contexts (optional)
193
+ ❌ Don't animate SVG path 'd' attribute directly — use MorphSVG plugin
194
+ ```
@@ -1,216 +1,104 @@
1
1
  ---
2
2
  name: i18n-localization
3
- description: Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support.
3
+ description: Internationalization (i18n) and localization mastery. Abstracting hardcoded strings, managing JSON/YAML translation dictionaries, bidirectional routing (RTL support for Arabic/Hebrew), Pluralization algorithms, date/currency formatting, and SSR locale detection in Next.js/React. Use when preparing an application for global multilingual scaling.
4
4
  allowed-tools: Read, Write, Edit, Glob, Grep
5
- version: 1.0.0
6
- last-updated: 2026-03-12
5
+ version: 2.0.0
6
+ last-updated: 2026-04-02
7
7
  applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
8
  ---
9
9
 
10
- # Internationalization & Localization
11
-
12
- > Internationalization (i18n) is preparing code to support multiple languages.
13
- > Localization (l10n) is the work of adapting to a specific locale.
14
- > Do i18n once, properly. Do l10n for each market.
10
+ # i18n & Localization — Global Scale Mastery
15
11
 
16
12
  ---
17
13
 
18
- ## The Core Rule: No Hardcoded Strings
19
-
20
- Every user-visible string in the source code is a localization problem waiting to happen.
21
-
22
- ```ts
23
- // ❌ Hardcoded — untranslatable
24
- <button>Save Changes</button>
25
- <p>You have {count} messages</p>
26
- <p>Error: Invalid email address</p>
14
+ ## 1. The i18n Architecture (Next.js / React)
27
15
 
28
- // Key-referenced translatable
29
- <button>{t('common.save')}</button>
30
- <p>{t('inbox.messageCount', { count })}</p>
31
- <p>{t('errors.invalidEmail')}</p>
32
- ```
33
-
34
- ---
35
-
36
- ## Translation File Structure
37
-
38
- Organize translation keys hierarchically — flat files become unmaintainable past ~50 keys:
16
+ Do not hardcode strings inside UI components. Use a standardized library (e.g., `next-intl` or `react-i18next`).
39
17
 
18
+ ### Step 1: Dictionary Abstraction
40
19
  ```json
41
- // en.json
20
+ // messages/en.json
42
21
  {
43
- "common": {
44
- "save": "Save Changes",
45
- "cancel": "Cancel",
46
- "loading": "Loading…",
47
- "error": "Something went wrong"
48
- },
49
- "auth": {
50
- "login": "Sign In",
51
- "logout": "Sign Out",
52
- "register": "Create Account",
53
- "errors": {
54
- "invalidEmail": "Enter a valid email address",
55
- "passwordTooShort": "Password must be at least {{min}} characters"
56
- }
57
- },
58
- "inbox": {
59
- "messageCount_one": "{{count}} message",
60
- "messageCount_other": "{{count}} messages"
22
+ "Dashboard": {
23
+ "welcomeMessage": "Welcome back, {name}!",
24
+ "unreadAlerts": "{count, plural, =0 {No unread alerts} one {You have 1 unread alert} other {You have # unread alerts}}"
61
25
  }
62
26
  }
63
27
  ```
64
28
 
65
- **Key naming conventions:**
66
- - `feature.element` or `feature.element.state`
67
- - Error keys under `.errors`
68
- - Never use the English text as the key (`"Save Changes": "Save Changes"`)
69
-
70
- ---
71
-
72
- ## Pluralization
73
-
74
- Pluralization rules differ per language. Use your i18n library's plural system — never manual `if count > 1`:
75
-
76
- ```ts
77
- // ❌ Only works for English
78
- const label = count === 1 ? 'message' : 'messages';
79
-
80
- // ✅ i18next handles per-language plural rules
81
- t('inbox.messageCount', { count })
29
+ ### Step 2: Component Implementation
30
+ ```tsx
31
+ // BAD: Hardcoded English text and manual variable interpolation
32
+ export function Header({ user, alertCount }) {
33
+ return <h1>Welcome back, {user.name}! You have {alertCount} alerts.</h1>;
34
+ }
82
35
 
83
- // Translation files handle the variants:
84
- // English: { "messageCount_one": "{{count}} message", "messageCount_other": "{{count}} messages" }
85
- // Arabic: 6 plural forms (zero, one, two, few, many, other)
86
- // Russian: 3 plural forms with complex rules
36
+ // GOOD: i18n Abstraction (using next-intl)
37
+ import { useTranslations } from 'next-intl';
38
+
39
+ export function Header({ user, alertCount }) {
40
+ const t = useTranslations('Dashboard');
41
+
42
+ return (
43
+ <header>
44
+ <h1>{t('welcomeMessage', { name: user.name })}</h1>
45
+ <p>{t('unreadAlerts', { count: alertCount })}</p>
46
+ </header>
47
+ );
48
+ }
87
49
  ```
88
50
 
89
51
  ---
90
52
 
91
- ## Date, Number & Currency Formatting
92
-
93
- Never format these manually. Use the browser's `Intl` API:
94
-
95
- ```ts
96
- // Date
97
- const date = new Date();
98
- new Intl.DateTimeFormat('en-US').format(date); // "2/20/2026"
99
- new Intl.DateTimeFormat('de-DE').format(date); // "20.2.2026"
100
-
101
- // Number
102
- new Intl.NumberFormat('en-US').format(1234567.89); // "1,234,567.89"
103
- new Intl.NumberFormat('de-DE').format(1234567.89); // "1.234.567,89"
104
-
105
- // Currency
106
- new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(99.99);
107
- // "$99.99"
108
- new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(99.99);
109
- // "99,99 €"
110
- ```
111
-
112
- ---
53
+ ## 2. Advanced Native Formatting (`Intl`)
113
54
 
114
- ## RTL (Right-to-Left) Support
55
+ Do not install `moment.js` or write massive regex string parsers to format currencies in Euros vs Dollars. The browser handles this natively with the `Intl` API.
115
56
 
116
- Arabic, Hebrew, Persian, Urdu are RTL languages. Supporting them requires more than flipping direction.
57
+ ```typescript
58
+ // Data/Currency Formatting correctly tied to the active locale
59
+ const locale = 'de-DE';
117
60
 
118
- ```html
119
- <!-- Set direction on html element based on locale -->
120
- <html lang="ar" dir="rtl">
61
+ // ✅ Currency
62
+ const price = new Intl.NumberFormat(locale, { style: 'currency', currency: 'EUR' }).format(1200.50);
63
+ // Output in Germany: "1.200,50 "
121
64
 
122
- <!-- Or dynamically -->
123
- <html lang={locale} dir={isRTL(locale) ? 'rtl' : 'ltr'}>
124
- ```
65
+ // Dates
66
+ const date = new Intl.DateTimeFormat(locale, { dateStyle: 'full' }).format(new Date());
67
+ // Output in Germany: "Freitag, 2. April 2026"
125
68
 
126
- ```css
127
- /* Use logical properties they flip automatically with direction */
128
- /* Physical: only works for LTR */
129
- padding-left: 1rem;
130
- margin-right: 2rem;
131
- border-left: 2px solid;
132
-
133
- /* ✅ Logical: works for both LTR and RTL */
134
- padding-inline-start: 1rem;
135
- margin-inline-end: 2rem;
136
- border-inline-start: 2px solid;
69
+ // ✅ Relative Time
70
+ const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });
71
+ rtf.format(-2, 'day'); // Output: "vorgestern" (the day before yesterday)
137
72
  ```
138
73
 
139
74
  ---
140
75
 
141
- ## Detecting Hardcoded Strings (Code Audit)
142
-
143
- Look for:
144
- - JSX text content directly in tags: `<p>some text</p>` (not `<p>{t(...)}</p>`)
145
- - Template literals with user-facing copy: `` `Welcome, ${name}!` ``
146
- - Alert/toast calls with string literals: `toast.success('Saved!')`
147
- - Error messages: `new Error('Invalid input')` shown to users
148
- - `placeholder`, `aria-label`, `title` attributes hardcoded
149
-
150
- ---
76
+ ## 3. Bidirectional Architecture (RTL)
151
77
 
152
- ## Scripts
78
+ For languages like Arabic and Hebrew, the UI must fundamentally flip horizontally. Right-To-Left (RTL) breaks standard CSS `marginLeft` and `marginRight`.
153
79
 
154
- | Script | Purpose | Run With |
155
- |---|---|---|
156
- | `scripts/i18n_checker.py` | Scans codebase for hardcoded strings | `python scripts/i18n_checker.py <project_path>` |
80
+ **The Solution:** Logical CSS Properties.
81
+ Tailwind v4 (and modern CSS) natively supports logical direction.
157
82
 
158
- ---
159
-
160
- ## Output Format
161
-
162
- When this skill produces a recommendation or design decision, structure your output as:
83
+ ```css
84
+ /* ❌ BAD: Hardcoded physical space */
85
+ .btn { margin-left: 10px; } /* Will break layout in Hebrew */
163
86
 
164
- ```
165
- ━━━ I18N Localization Recommendation ━━━━━━━━━━━━━━━━
166
- Decision: [what was chosen / proposed]
167
- Rationale: [why — one concise line]
168
- Trade-offs: [what is consciously accepted]
169
- Next action: [concrete next step for the user]
170
- ─────────────────────────────────────────────────
171
- Pre-Flight: ✅ All checks passed
172
- or ❌ [blocking item that must be resolved first]
87
+ /* ✅ GOOD: Logical spacing (Tailwind: ms-4, me-4) */
88
+ .btn { margin-inline-start: 10px; } /* Automatically flips in RTL mode */
173
89
  ```
174
90
 
175
-
91
+ *In React HTML tag:* `<html lang="ar" dir="rtl">`
176
92
 
177
93
  ---
178
94
 
179
- ## 🤖 LLM-Specific Traps
95
+ ## 4. Routing and SSR Detection
180
96
 
181
- AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
97
+ Users should not face English UI natively in Japan. Detect their browser headers at the edge routing layer.
182
98
 
183
- 1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
184
- 2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
185
- 3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
186
- 4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
187
- 5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
99
+ In Next.js Middleware:
100
+ 1. Parse the incoming `Accept-Language` header.
101
+ 2. Intercept requests to `/dashboard`.
102
+ 3. Rewrite URL to the detected locale (e.g., `/ja/dashboard`).
188
103
 
189
104
  ---
190
-
191
- ## 🏛️ Tribunal Integration (Anti-Hallucination)
192
-
193
- **Slash command: `/review` or `/tribunal-full`**
194
- **Active reviewers: `logic-reviewer` · `security-auditor`**
195
-
196
- ### ❌ Forbidden AI Tropes
197
-
198
- 1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
199
- 2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
200
- 3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
201
-
202
- ### ✅ Pre-Flight Self-Audit
203
-
204
- Review these questions before confirming output:
205
- ```
206
- ✅ Did I rely ONLY on real, verified tools and methods?
207
- ✅ Is this solution appropriately scoped to the user's constraints?
208
- ✅ Did I handle potential failure modes and edge cases?
209
- ✅ Have I avoided generic boilerplate that doesn't add value?
210
- ```
211
-
212
- ### 🛑 Verification-Before-Completion (VBC) Protocol
213
-
214
- **CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
215
- - ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
216
- - ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.