opencode-agent-kit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/README.md +796 -0
  2. package/bin/commands/init.mjs +221 -0
  3. package/bin/init.mjs +21 -0
  4. package/package.json +22 -0
  5. package/template/.opencode/agent-docs/backend/README.md +0 -0
  6. package/template/.opencode/agent-docs/backend/node/BACKEND_PATTERNS.md +82 -0
  7. package/template/.opencode/agent-docs/backend/node/BACKEND_QUICK_START.md +49 -0
  8. package/template/.opencode/agent-docs/frontend/next/README.md +0 -0
  9. package/template/.opencode/agent-docs/frontend/nuxt/API_PATTERNS.md +807 -0
  10. package/template/.opencode/agent-docs/frontend/nuxt/CHEATSHEET.md +676 -0
  11. package/template/.opencode/agent-docs/frontend/nuxt/COMPLETION_REPORT.md +613 -0
  12. package/template/.opencode/agent-docs/frontend/nuxt/EXAMPLES.md +956 -0
  13. package/template/.opencode/agent-docs/frontend/nuxt/INDEX.md +596 -0
  14. package/template/.opencode/agent-docs/frontend/nuxt/MCP_GUIDE.md +881 -0
  15. package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_CURRICULUM_30_DAYS.md +256 -0
  16. package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_CURRICULUM_CHECKLIST.md +156 -0
  17. package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_WEEKLY_ASSIGNMENTS.md +191 -0
  18. package/template/.opencode/agent-docs/frontend/nuxt/QUICK_START.md +509 -0
  19. package/template/.opencode/agent-docs/frontend/nuxt/README.md +506 -0
  20. package/template/.opencode/agent-docs/frontend/nuxt/README_AGENTS.md +140 -0
  21. package/template/.opencode/agent-docs/frontend/nuxt/README_DOCS.md +65 -0
  22. package/template/.opencode/agent-docs/frontend/nuxt/SUMMARY.md +474 -0
  23. package/template/.opencode/agent-docs/frontend/nuxt/TEAM_OPERATING_GUIDE.md +54 -0
  24. package/template/.opencode/agent-docs/frontend/nuxt/TESTING_GUIDE.md +904 -0
  25. package/template/.opencode/agent-docs/frontend/nuxt/WORKFLOWS.md +758 -0
  26. package/template/.opencode/agent-docs/frontend/react/API_PATTERNS.md +187 -0
  27. package/template/.opencode/agent-docs/frontend/react/CHEATSHEET.md +87 -0
  28. package/template/.opencode/agent-docs/frontend/react/INDEX.md +45 -0
  29. package/template/.opencode/agent-docs/frontend/react/QUICK_START.md +43 -0
  30. package/template/.opencode/agent-docs/frontend/react/README.md +159 -0
  31. package/template/.opencode/agent-docs/frontend/vue/README.md +0 -0
  32. package/template/.opencode/agent-docs/mobile/android/README.md +45 -0
  33. package/template/.opencode/agent-docs/mobile/flutter/README.md +44 -0
  34. package/template/.opencode/agents/android-developer.md +418 -0
  35. package/template/.opencode/agents/code-igniter-3-fullstack.md +345 -0
  36. package/template/.opencode/agents/code-reviewer.md +517 -0
  37. package/template/.opencode/agents/database-specialist.md +455 -0
  38. package/template/.opencode/agents/devops-specialist.md +562 -0
  39. package/template/.opencode/agents/flutter-developer.md +556 -0
  40. package/template/.opencode/agents/it-leader.md +911 -0
  41. package/template/.opencode/agents/laravel-advanced.md +691 -0
  42. package/template/.opencode/agents/node-backend-developer.md +343 -0
  43. package/template/.opencode/agents/nuxt-frontend-developer-mentor.md +402 -0
  44. package/template/.opencode/agents/nuxt-frontend-developer.md +1573 -0
  45. package/template/.opencode/agents/react-frontend-developer.md +1017 -0
  46. package/template/.opencode/agents/seo-specialist.md +681 -0
  47. package/template/.opencode/agents/ui-ux-designer.md +783 -0
  48. package/template/.opencode/commands/android-build/command.md +25 -0
  49. package/template/.opencode/commands/android-test/command.md +23 -0
  50. package/template/.opencode/commands/build-fix.md +29 -0
  51. package/template/.opencode/commands/checkpoint.md +74 -0
  52. package/template/.opencode/commands/code-review.md +40 -0
  53. package/template/.opencode/commands/e2e.md +363 -0
  54. package/template/.opencode/commands/eval.md +120 -0
  55. package/template/.opencode/commands/evolve.md +193 -0
  56. package/template/.opencode/commands/flutter-build/command.md +25 -0
  57. package/template/.opencode/commands/flutter-test/command.md +24 -0
  58. package/template/.opencode/commands/go-build.md +183 -0
  59. package/template/.opencode/commands/go-review.md +148 -0
  60. package/template/.opencode/commands/go-test.md +268 -0
  61. package/template/.opencode/commands/gpc-release/command.md +30 -0
  62. package/template/.opencode/commands/instinct-export.md +91 -0
  63. package/template/.opencode/commands/instinct-import.md +142 -0
  64. package/template/.opencode/commands/instinct-status.md +86 -0
  65. package/template/.opencode/commands/learn.md +70 -0
  66. package/template/.opencode/commands/multi-backend.md +158 -0
  67. package/template/.opencode/commands/multi-execute.md +310 -0
  68. package/template/.opencode/commands/multi-frontend.md +158 -0
  69. package/template/.opencode/commands/multi-plan.md +261 -0
  70. package/template/.opencode/commands/multi-workflow.md +183 -0
  71. package/template/.opencode/commands/orchestrate.md +172 -0
  72. package/template/.opencode/commands/plan.md +113 -0
  73. package/template/.opencode/commands/pm2.md +271 -0
  74. package/template/.opencode/commands/python-review.md +297 -0
  75. package/template/.opencode/commands/refactor-clean.md +28 -0
  76. package/template/.opencode/commands/sessions.md +305 -0
  77. package/template/.opencode/commands/setup-pm.md +80 -0
  78. package/template/.opencode/commands/skill-create.md +174 -0
  79. package/template/.opencode/commands/tdd.md +326 -0
  80. package/template/.opencode/commands/test-coverage.md +27 -0
  81. package/template/.opencode/commands/update-codemaps.md +17 -0
  82. package/template/.opencode/commands/update-docs.md +31 -0
  83. package/template/.opencode/commands/verify.md +59 -0
  84. package/template/.opencode/config.example.json +309 -0
  85. package/template/.opencode/config.json +341 -0
  86. package/template/.opencode/contexts/dev.md +20 -0
  87. package/template/.opencode/contexts/research.md +26 -0
  88. package/template/.opencode/contexts/review.md +22 -0
  89. package/template/.opencode/hooks/hooks.json +169 -0
  90. package/template/.opencode/instructions/INSTRUCTIONS.md +388 -0
  91. package/template/.opencode/package.json +5 -0
  92. package/template/.opencode/rules/README.md +82 -0
  93. package/template/.opencode/rules/android/gradle.md +62 -0
  94. package/template/.opencode/rules/android/testing.md +27 -0
  95. package/template/.opencode/rules/common/agents.md +49 -0
  96. package/template/.opencode/rules/common/coding-style.md +48 -0
  97. package/template/.opencode/rules/common/git-workflow.md +45 -0
  98. package/template/.opencode/rules/common/hooks.md +30 -0
  99. package/template/.opencode/rules/common/patterns.md +31 -0
  100. package/template/.opencode/rules/common/performance.md +55 -0
  101. package/template/.opencode/rules/common/security.md +29 -0
  102. package/template/.opencode/rules/common/testing.md +29 -0
  103. package/template/.opencode/rules/flutter/state-management.md +57 -0
  104. package/template/.opencode/rules/flutter/testing.md +42 -0
  105. package/template/.opencode/rules/golang/coding-style.md +26 -0
  106. package/template/.opencode/rules/golang/hooks.md +11 -0
  107. package/template/.opencode/rules/golang/patterns.md +39 -0
  108. package/template/.opencode/rules/golang/security.md +28 -0
  109. package/template/.opencode/rules/golang/testing.md +25 -0
  110. package/template/.opencode/rules/mobile/performance.md +36 -0
  111. package/template/.opencode/rules/python/coding-style.md +37 -0
  112. package/template/.opencode/rules/python/hooks.md +14 -0
  113. package/template/.opencode/rules/python/patterns.md +34 -0
  114. package/template/.opencode/rules/python/security.md +25 -0
  115. package/template/.opencode/rules/python/testing.md +33 -0
  116. package/template/.opencode/rules/typescript/coding-style.md +58 -0
  117. package/template/.opencode/rules/typescript/hooks.md +15 -0
  118. package/template/.opencode/rules/typescript/patterns.md +45 -0
  119. package/template/.opencode/rules/typescript/security.md +21 -0
  120. package/template/.opencode/rules/typescript/testing.md +11 -0
  121. package/template/.opencode/skills/api-documentation/SKILL.md +188 -0
  122. package/template/.opencode/skills/backend-patterns/SKILL.md +587 -0
  123. package/template/.opencode/skills/building-components/SKILL.md +37 -0
  124. package/template/.opencode/skills/building-components/references/accessibility.mdx +819 -0
  125. package/template/.opencode/skills/building-components/references/as-child.mdx +324 -0
  126. package/template/.opencode/skills/building-components/references/composition.mdx +239 -0
  127. package/template/.opencode/skills/building-components/references/data-attributes.mdx +413 -0
  128. package/template/.opencode/skills/building-components/references/definitions.mdx +258 -0
  129. package/template/.opencode/skills/building-components/references/design-tokens.mdx +57 -0
  130. package/template/.opencode/skills/building-components/references/docs.mdx +155 -0
  131. package/template/.opencode/skills/building-components/references/marketplaces.mdx +144 -0
  132. package/template/.opencode/skills/building-components/references/npm.mdx +166 -0
  133. package/template/.opencode/skills/building-components/references/polymorphism.mdx +583 -0
  134. package/template/.opencode/skills/building-components/references/principles.mdx +61 -0
  135. package/template/.opencode/skills/building-components/references/registry.mdx +169 -0
  136. package/template/.opencode/skills/building-components/references/state.mdx +99 -0
  137. package/template/.opencode/skills/building-components/references/styling.mdx +286 -0
  138. package/template/.opencode/skills/building-components/references/types.mdx +191 -0
  139. package/template/.opencode/skills/clickhouse-io/SKILL.md +429 -0
  140. package/template/.opencode/skills/coding-standards/SKILL.md +520 -0
  141. package/template/.opencode/skills/configure-ecc/SKILL.md +298 -0
  142. package/template/.opencode/skills/continuous-learning/SKILL.md +110 -0
  143. package/template/.opencode/skills/continuous-learning/config.json +18 -0
  144. package/template/.opencode/skills/continuous-learning/evaluate-session.sh +60 -0
  145. package/template/.opencode/skills/continuous-learning-v2/SKILL.md +284 -0
  146. package/template/.opencode/skills/continuous-learning-v2/agents/observer.md +137 -0
  147. package/template/.opencode/skills/continuous-learning-v2/agents/start-observer.sh +134 -0
  148. package/template/.opencode/skills/continuous-learning-v2/config.json +41 -0
  149. package/template/.opencode/skills/continuous-learning-v2/hooks/observe.sh +153 -0
  150. package/template/.opencode/skills/continuous-learning-v2/scripts/instinct-cli.py +489 -0
  151. package/template/.opencode/skills/continuous-learning-v2/scripts/test_parse_instinct.py +82 -0
  152. package/template/.opencode/skills/dart-add-unit-test/SKILL.md +122 -0
  153. package/template/.opencode/skills/dart-build-cli-app/SKILL.md +185 -0
  154. package/template/.opencode/skills/dart-collect-coverage/SKILL.md +141 -0
  155. package/template/.opencode/skills/dart-fix-runtime-errors/SKILL.md +166 -0
  156. package/template/.opencode/skills/dart-generate-test-mocks/SKILL.md +155 -0
  157. package/template/.opencode/skills/dart-migrate-to-checks-package/SKILL.md +126 -0
  158. package/template/.opencode/skills/dart-resolve-package-conflicts/SKILL.md +116 -0
  159. package/template/.opencode/skills/dart-run-static-analysis/SKILL.md +104 -0
  160. package/template/.opencode/skills/dart-use-pattern-matching/SKILL.md +146 -0
  161. package/template/.opencode/skills/django-patterns/SKILL.md +733 -0
  162. package/template/.opencode/skills/django-security/SKILL.md +592 -0
  163. package/template/.opencode/skills/django-tdd/SKILL.md +728 -0
  164. package/template/.opencode/skills/django-verification/SKILL.md +460 -0
  165. package/template/.opencode/skills/eval-harness/SKILL.md +227 -0
  166. package/template/.opencode/skills/firebase-basics/SKILL.md +103 -0
  167. package/template/.opencode/skills/firebase-basics/references/additional-skills.md +113 -0
  168. package/template/.opencode/skills/firebase-basics/references/cli-usage.md +31 -0
  169. package/template/.opencode/skills/firebase-basics/references/client-library-usage.md +45 -0
  170. package/template/.opencode/skills/firebase-basics/references/core-concepts.md +61 -0
  171. package/template/.opencode/skills/firebase-basics/references/iac-usage.md +40 -0
  172. package/template/.opencode/skills/firebase-basics/references/iam-security.md +74 -0
  173. package/template/.opencode/skills/firebase-basics/references/mcp-usage.md +63 -0
  174. package/template/.opencode/skills/flutter/SKILL.md +292 -0
  175. package/template/.opencode/skills/flutter-add-integration-test/SKILL.md +163 -0
  176. package/template/.opencode/skills/flutter-add-widget-preview/SKILL.md +145 -0
  177. package/template/.opencode/skills/flutter-add-widget-test/SKILL.md +154 -0
  178. package/template/.opencode/skills/flutter-apply-architecture-best-practices/SKILL.md +162 -0
  179. package/template/.opencode/skills/flutter-build-responsive-layout/SKILL.md +139 -0
  180. package/template/.opencode/skills/flutter-fix-layout-issues/SKILL.md +130 -0
  181. package/template/.opencode/skills/flutter-implement-json-serialization/SKILL.md +153 -0
  182. package/template/.opencode/skills/flutter-setup-declarative-routing/SKILL.md +255 -0
  183. package/template/.opencode/skills/flutter-setup-localization/SKILL.md +210 -0
  184. package/template/.opencode/skills/flutter-use-http-package/SKILL.md +174 -0
  185. package/template/.opencode/skills/frontend-design/SKILL.md +89 -0
  186. package/template/.opencode/skills/frontend-patterns/SKILL.md +631 -0
  187. package/template/.opencode/skills/golang-patterns/SKILL.md +673 -0
  188. package/template/.opencode/skills/golang-testing/SKILL.md +719 -0
  189. package/template/.opencode/skills/impeccable/SKILL.md +165 -0
  190. package/template/.opencode/skills/impeccable/agents/impeccable-asset-producer.md +101 -0
  191. package/template/.opencode/skills/impeccable/reference/adapt.md +190 -0
  192. package/template/.opencode/skills/impeccable/reference/animate.md +175 -0
  193. package/template/.opencode/skills/impeccable/reference/audit.md +133 -0
  194. package/template/.opencode/skills/impeccable/reference/bolder.md +113 -0
  195. package/template/.opencode/skills/impeccable/reference/brand.md +118 -0
  196. package/template/.opencode/skills/impeccable/reference/clarify.md +174 -0
  197. package/template/.opencode/skills/impeccable/reference/codex.md +105 -0
  198. package/template/.opencode/skills/impeccable/reference/cognitive-load.md +106 -0
  199. package/template/.opencode/skills/impeccable/reference/color-and-contrast.md +105 -0
  200. package/template/.opencode/skills/impeccable/reference/colorize.md +154 -0
  201. package/template/.opencode/skills/impeccable/reference/craft.md +123 -0
  202. package/template/.opencode/skills/impeccable/reference/critique.md +273 -0
  203. package/template/.opencode/skills/impeccable/reference/delight.md +302 -0
  204. package/template/.opencode/skills/impeccable/reference/distill.md +111 -0
  205. package/template/.opencode/skills/impeccable/reference/document.md +427 -0
  206. package/template/.opencode/skills/impeccable/reference/extract.md +69 -0
  207. package/template/.opencode/skills/impeccable/reference/harden.md +347 -0
  208. package/template/.opencode/skills/impeccable/reference/heuristics-scoring.md +234 -0
  209. package/template/.opencode/skills/impeccable/reference/interaction-design.md +195 -0
  210. package/template/.opencode/skills/impeccable/reference/layout.md +141 -0
  211. package/template/.opencode/skills/impeccable/reference/live.md +622 -0
  212. package/template/.opencode/skills/impeccable/reference/motion-design.md +109 -0
  213. package/template/.opencode/skills/impeccable/reference/onboard.md +234 -0
  214. package/template/.opencode/skills/impeccable/reference/optimize.md +258 -0
  215. package/template/.opencode/skills/impeccable/reference/overdrive.md +130 -0
  216. package/template/.opencode/skills/impeccable/reference/personas.md +179 -0
  217. package/template/.opencode/skills/impeccable/reference/polish.md +242 -0
  218. package/template/.opencode/skills/impeccable/reference/product.md +62 -0
  219. package/template/.opencode/skills/impeccable/reference/quieter.md +99 -0
  220. package/template/.opencode/skills/impeccable/reference/responsive-design.md +114 -0
  221. package/template/.opencode/skills/impeccable/reference/shape.md +165 -0
  222. package/template/.opencode/skills/impeccable/reference/spatial-design.md +100 -0
  223. package/template/.opencode/skills/impeccable/reference/teach.md +156 -0
  224. package/template/.opencode/skills/impeccable/reference/typeset.md +124 -0
  225. package/template/.opencode/skills/impeccable/reference/typography.md +159 -0
  226. package/template/.opencode/skills/impeccable/reference/ux-writing.md +107 -0
  227. package/template/.opencode/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
  228. package/template/.opencode/skills/impeccable/scripts/command-metadata.json +94 -0
  229. package/template/.opencode/skills/impeccable/scripts/critique-storage.mjs +242 -0
  230. package/template/.opencode/skills/impeccable/scripts/design-parser.mjs +820 -0
  231. package/template/.opencode/skills/impeccable/scripts/detect-csp.mjs +198 -0
  232. package/template/.opencode/skills/impeccable/scripts/detect.mjs +21 -0
  233. package/template/.opencode/skills/impeccable/scripts/impeccable-paths.mjs +110 -0
  234. package/template/.opencode/skills/impeccable/scripts/is-generated.mjs +69 -0
  235. package/template/.opencode/skills/impeccable/scripts/live-accept.mjs +595 -0
  236. package/template/.opencode/skills/impeccable/scripts/live-browser-session.js +123 -0
  237. package/template/.opencode/skills/impeccable/scripts/live-browser.js +4860 -0
  238. package/template/.opencode/skills/impeccable/scripts/live-complete.mjs +75 -0
  239. package/template/.opencode/skills/impeccable/scripts/live-completion.mjs +18 -0
  240. package/template/.opencode/skills/impeccable/scripts/live-inject.mjs +446 -0
  241. package/template/.opencode/skills/impeccable/scripts/live-poll.mjs +200 -0
  242. package/template/.opencode/skills/impeccable/scripts/live-resume.mjs +48 -0
  243. package/template/.opencode/skills/impeccable/scripts/live-server.mjs +838 -0
  244. package/template/.opencode/skills/impeccable/scripts/live-session-store.mjs +254 -0
  245. package/template/.opencode/skills/impeccable/scripts/live-status.mjs +47 -0
  246. package/template/.opencode/skills/impeccable/scripts/live-wrap.mjs +632 -0
  247. package/template/.opencode/skills/impeccable/scripts/live.mjs +247 -0
  248. package/template/.opencode/skills/impeccable/scripts/load-context.mjs +141 -0
  249. package/template/.opencode/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  250. package/template/.opencode/skills/impeccable/scripts/pin.mjs +214 -0
  251. package/template/.opencode/skills/iterative-retrieval/SKILL.md +202 -0
  252. package/template/.opencode/skills/java-coding-standards/SKILL.md +138 -0
  253. package/template/.opencode/skills/jetpack-compose/.skillfish.json +10 -0
  254. package/template/.opencode/skills/jetpack-compose/SKILL.md +420 -0
  255. package/template/.opencode/skills/jpa-patterns/SKILL.md +141 -0
  256. package/template/.opencode/skills/nutrient-document-processing/SKILL.md +165 -0
  257. package/template/.opencode/skills/nuxt-ui/SKILL.md +334 -0
  258. package/template/.opencode/skills/nuxt-ui/references/components.md +377 -0
  259. package/template/.opencode/skills/nuxt-ui/references/composables.md +127 -0
  260. package/template/.opencode/skills/nuxt-ui/references/layouts/chat.md +266 -0
  261. package/template/.opencode/skills/nuxt-ui/references/layouts/dashboard.md +220 -0
  262. package/template/.opencode/skills/nuxt-ui/references/layouts/docs.md +141 -0
  263. package/template/.opencode/skills/nuxt-ui/references/layouts/editor.md +168 -0
  264. package/template/.opencode/skills/nuxt-ui/references/layouts/page.md +260 -0
  265. package/template/.opencode/skills/nuxt-ui/references/theming.md +427 -0
  266. package/template/.opencode/skills/postgres-patterns/SKILL.md +146 -0
  267. package/template/.opencode/skills/project-guidelines-example/SKILL.md +345 -0
  268. package/template/.opencode/skills/python-patterns/SKILL.md +749 -0
  269. package/template/.opencode/skills/python-testing/SKILL.md +815 -0
  270. package/template/.opencode/skills/security-review/SKILL.md +494 -0
  271. package/template/.opencode/skills/security-review/cloud-infrastructure-security.md +361 -0
  272. package/template/.opencode/skills/shadcn-ui/README.md +248 -0
  273. package/template/.opencode/skills/shadcn-ui/SKILL.md +326 -0
  274. package/template/.opencode/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
  275. package/template/.opencode/skills/shadcn-ui/examples/data-table.tsx +313 -0
  276. package/template/.opencode/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
  277. package/template/.opencode/skills/shadcn-ui/resources/component-catalog.md +481 -0
  278. package/template/.opencode/skills/shadcn-ui/resources/customization-guide.md +516 -0
  279. package/template/.opencode/skills/shadcn-ui/resources/migration-guide.md +463 -0
  280. package/template/.opencode/skills/shadcn-ui/resources/setup-guide.md +412 -0
  281. package/template/.opencode/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
  282. package/template/.opencode/skills/springboot-patterns/SKILL.md +304 -0
  283. package/template/.opencode/skills/springboot-security/SKILL.md +119 -0
  284. package/template/.opencode/skills/springboot-tdd/SKILL.md +157 -0
  285. package/template/.opencode/skills/springboot-verification/SKILL.md +100 -0
  286. package/template/.opencode/skills/strategic-compact/SKILL.md +63 -0
  287. package/template/.opencode/skills/strategic-compact/suggest-compact.sh +52 -0
  288. package/template/.opencode/skills/tdd-workflow/SKILL.md +409 -0
  289. package/template/.opencode/skills/vercel-composition-patterns/AGENTS.md +946 -0
  290. package/template/.opencode/skills/vercel-composition-patterns/SKILL.md +89 -0
  291. package/template/.opencode/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  292. package/template/.opencode/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
  293. package/template/.opencode/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  294. package/template/.opencode/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
  295. package/template/.opencode/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  296. package/template/.opencode/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  297. package/template/.opencode/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
  298. package/template/.opencode/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  299. package/template/.opencode/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  300. package/template/.opencode/skills/vercel-react-best-practices/SKILL.md +136 -0
  301. package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  302. package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  303. package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  304. package/template/.opencode/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  305. package/template/.opencode/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  306. package/template/.opencode/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  307. package/template/.opencode/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  308. package/template/.opencode/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  309. package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  310. package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  311. package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  312. package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  313. package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  314. package/template/.opencode/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  315. package/template/.opencode/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  316. package/template/.opencode/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  317. package/template/.opencode/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  318. package/template/.opencode/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  319. package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  320. package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  321. package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  322. package/template/.opencode/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  323. package/template/.opencode/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  324. package/template/.opencode/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  325. package/template/.opencode/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  326. package/template/.opencode/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  327. package/template/.opencode/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  328. package/template/.opencode/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  329. package/template/.opencode/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  330. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  331. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  332. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  333. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  334. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  335. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  336. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  337. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  338. package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  339. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  340. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  341. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  342. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  343. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  344. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  345. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  346. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  347. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  348. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  349. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  350. package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  351. package/template/.opencode/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  352. package/template/.opencode/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  353. package/template/.opencode/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  354. package/template/.opencode/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  355. package/template/.opencode/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  356. package/template/.opencode/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  357. package/template/.opencode/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  358. package/template/.opencode/skills/verification-loop/SKILL.md +120 -0
  359. package/template/.opencode/skills/web-design-guidelines/SKILL.md +39 -0
  360. package/template/AGENTS.md +32 -0
  361. package/template/opencode.json +354 -0
@@ -0,0 +1,758 @@
1
+ # Frontend Developer Agent - Example Workflows
2
+
3
+ Contoh-contoh workflow konkret untuk berbagai skenario development.
4
+
5
+ ---
6
+
7
+ ## 🎨 Workflow 1: Membuat Component Library
8
+
9
+ ### Scenario
10
+
11
+ Anda ingin membuat design system dengan reusable components.
12
+
13
+ ### Step-by-step
14
+
15
+ **Step 1: Inisialisasi**
16
+
17
+ ```
18
+ @frontend-developer Kita akan buat component library untuk project ini.
19
+ Framework: Nuxt 4 + TypeScript
20
+ Design system: Custom dengan Tailwind CSS
21
+ Components yang dibutuhkan:
22
+ - Button (5 variants, 3 sizes)
23
+ - Input (text, email, password, search)
24
+ - Card (dengan header, body, footer slots)
25
+ - Modal (dengan backdrop, close button)
26
+ - Dropdown (dengan keyboard navigation)
27
+
28
+ Load skill `building-components` dan buatkan structure folder yang optimal.
29
+ ```
30
+
31
+ **Step 2: Design Tokens**
32
+
33
+ ```
34
+ @frontend-developer Sebelum buat components, define design tokens dulu:
35
+
36
+ Colors:
37
+ - Primary: Blue (#3b82f6)
38
+ - Secondary: Purple (#8b5cf6)
39
+ - Success: Green (#10b981)
40
+ - Error: Red (#ef4444)
41
+ - Warning: Yellow (#f59e0b)
42
+
43
+ Typography:
44
+ - Display: "Space Grotesk"
45
+ - Body: "Inter"
46
+
47
+ Spacing scale: 4px base (4, 8, 12, 16, 24, 32, 48, 64)
48
+
49
+ Buat CSS variables di app/assets/styles/design-tokens.css
50
+ ```
51
+
52
+ **Step 3: Component Creation**
53
+
54
+ ```
55
+ @frontend-developer Buat Button component di app/components/ui/Button.vue dengan:
56
+
57
+ Props:
58
+ - variant: 'primary' | 'secondary' | 'success' | 'error' | 'ghost'
59
+ - size: 'sm' | 'md' | 'lg'
60
+ - disabled: boolean
61
+ - loading: boolean
62
+ - fullWidth: boolean
63
+ - leftIcon: Component (optional)
64
+ - rightIcon: Component (optional)
65
+
66
+ Features:
67
+ - Ripple effect on click
68
+ - Focus visible state
69
+ - Loading spinner
70
+ - Disabled state dengan opacity
71
+ - Accessible (ARIA labels, keyboard support)
72
+
73
+ Gunakan design tokens yang sudah dibuat.
74
+ ```
75
+
76
+ **Step 4: Documentation**
77
+
78
+ ```
79
+ @frontend-developer Buat storybook-style documentation di:
80
+ app/pages/components/button.vue
81
+
82
+ Include:
83
+ - All variants showcase
84
+ - All sizes showcase
85
+ - Interactive playground
86
+ - Props table
87
+ - Code examples
88
+ - Accessibility notes
89
+ ```
90
+
91
+ ---
92
+
93
+ ## ⚡ Workflow 2: Performance Optimization
94
+
95
+ ### Scenario
96
+
97
+ Dashboard dengan 500+ items terasa lambat saat scroll dan filter.
98
+
99
+ ### Step-by-step
100
+
101
+ **Step 1: Performance Audit**
102
+
103
+ ```
104
+ @frontend-developer Load skill `frontend-patterns` dan analyze:
105
+
106
+ Files:
107
+ - app/pages/dashboard.vue
108
+ - app/components/MarketList.vue
109
+ - app/components/MarketCard.vue
110
+
111
+ Cari:
112
+ - Unnecessary re-renders
113
+ - Missing memoization
114
+ - Large bundle imports
115
+ - N+1 rendering patterns
116
+ - Unoptimized data fetching
117
+ ```
118
+
119
+ **Step 2: Implement Virtualization**
120
+
121
+ ```
122
+ @frontend-developer MarketList render 500+ items. Implement virtualization:
123
+
124
+ - Gunakan @tanstack/vue-virtual atau library serupa
125
+ - Hanya render visible items + overscan
126
+ - Maintain scroll position
127
+ - Support dynamic heights
128
+ - Preserve keyboard navigation
129
+
130
+ Update app/components/MarketList.vue
131
+ ```
132
+
133
+ **Step 3: Optimize Re-renders**
134
+
135
+ ```
136
+ @frontend-developer Optimize re-renders di MarketCard:
137
+
138
+ Current issue: Every card re-renders saat user filter/sort
139
+
140
+ Solutions:
141
+ - Isolate expensive subcomponents and pass minimal reactive props
142
+ - Stabilize data flow with computed values and avoid unnecessary watchers
143
+ - Move filter logic to parent
144
+ - Use key prop correctly
145
+
146
+ Implement changes.
147
+ ```
148
+
149
+ **Step 4: Bundle Optimization**
150
+
151
+ ```
152
+ @frontend-developer Analyze bundle dan optimize:
153
+
154
+ 1. Check import statements - avoid barrel imports
155
+ 2. Lazy load heavy components (charts, editors)
156
+ 3. Code split routes
157
+ 4. Defer non-critical third-party scripts
158
+
159
+ Generate bundle analysis report dan implement optimizations.
160
+ ```
161
+
162
+ **Step 5: Data Fetching**
163
+
164
+ ```
165
+ @frontend-developer Optimize data fetching pattern:
166
+
167
+ Current: Sequential fetches causing waterfall
168
+ New: Parallel fetches dengan Promise.all
169
+
170
+ Also implement:
171
+ - Request deduplication dengan useSWR
172
+ - Optimistic updates
173
+ - Stale-while-revalidate
174
+ - Proper error boundaries
175
+ ```
176
+
177
+ ---
178
+
179
+ ## 🎯 Workflow 3: Implementasi Design Figma
180
+
181
+ ### Scenario
182
+
183
+ Designer memberikan Figma file untuk landing page baru.
184
+
185
+ ### Step-by-step
186
+
187
+ **Step 1: Design Analysis**
188
+
189
+ ```
190
+ @frontend-developer Analyze Figma design (attach screenshot atau link):
191
+
192
+ [Drag & drop Figma screenshot ke terminal]
193
+
194
+ Identify:
195
+ - Color palette dan typography
196
+ - Spacing system
197
+ - Component patterns
198
+ - Animation opportunities
199
+ - Responsive breakpoints
200
+
201
+ Load skill `frontend-design` untuk aesthetic analysis.
202
+ ```
203
+
204
+ **Step 2: Setup Structure**
205
+
206
+ ```
207
+ @frontend-developer Based on design, setup page structure:
208
+
209
+ Create:
210
+ - app/pages/landing.vue (main page)
211
+ - app/components/landing/Hero.vue
212
+ - app/components/landing/Features.vue
213
+ - app/components/landing/Testimonials.vue
214
+ - app/components/landing/CTA.vue
215
+ - app/components/landing/Footer.vue
216
+
217
+ Extract design tokens ke CSS variables.
218
+ ```
219
+
220
+ **Step 3: Implement Hero Section**
221
+
222
+ ```
223
+ @frontend-developer Implement Hero section dengan:
224
+
225
+ Layout:
226
+ - Full viewport height
227
+ - Text left, visual right (desktop)
228
+ - Stacked (mobile)
229
+
230
+ Typography:
231
+ - H1: 72px bold dengan gradient text
232
+ - Subtitle: 24px regular
233
+ - CTA buttons: Primary + Secondary
234
+
235
+ Animations:
236
+ - Text fade-in from bottom (stagger 100ms)
237
+ - Visual fade-in from right
238
+ - Parallax background effect
239
+ - Smooth scroll to sections
240
+
241
+ Ensure responsive dan accessible.
242
+ ```
243
+
244
+ **Step 4: Interactive Elements**
245
+
246
+ ```
247
+ @frontend-developer Add micro-interactions:
248
+
249
+ Buttons:
250
+ - Hover: Scale 1.05 + shadow increase
251
+ - Active: Scale 0.98
252
+ - Ripple effect on click
253
+
254
+ Cards:
255
+ - Hover: Lift effect (translate + shadow)
256
+ - Focus: Visible outline
257
+ - Tilt on mouse move (subtle 3D effect)
258
+
259
+ Navigation:
260
+ - Sticky header on scroll
261
+ - Active section indicator
262
+ - Smooth scroll to anchors
263
+ ```
264
+
265
+ **Step 5: Performance Check**
266
+
267
+ ```
268
+ @frontend-developer Before shipping, verify:
269
+
270
+ ✓ Images optimized (use <NuxtImg>)
271
+ ✓ Fonts preloaded
272
+ ✓ Animations use transform/opacity only
273
+ ✓ No layout shift (CLS)
274
+ ✓ Lazy load below-fold content
275
+ ✓ Critical CSS inlined
276
+
277
+ Run Lighthouse audit dan fix issues.
278
+ ```
279
+
280
+ ---
281
+
282
+ ## 🔐 Workflow 4: Form dengan Validation
283
+
284
+ ### Scenario
285
+
286
+ Complex form untuk create market prediction.
287
+
288
+ ### Step-by-step
289
+
290
+ **Step 1: Schema Definition**
291
+
292
+ ```
293
+ @frontend-developer Setup form validation dengan Zod:
294
+
295
+ Fields:
296
+ - title: string (required, 5-200 chars)
297
+ - description: string (required, 20-2000 chars)
298
+ - category: enum (required, dari predefined list)
299
+ - endDate: datetime (required, future date)
300
+ - options: array of strings (min 2, max 10 options)
301
+ - tags: array of strings (optional, max 5)
302
+
303
+ Create schema di app/schemas/market.schema.ts
304
+ ```
305
+
306
+ **Step 2: Form Component**
307
+
308
+ ```
309
+ @frontend-developer Build form di app/components/forms/CreateMarketForm.vue:
310
+
311
+ Features:
312
+ - Real-time validation (onChange)
313
+ - Error messages below each field
314
+ - Submit disabled until valid
315
+ - Loading state during submission
316
+ - Success/error toast notifications
317
+
318
+ Use Nuxt UI form components sebagai base.
319
+ Load skill `security-review` untuk validation best practices.
320
+ ```
321
+
322
+ **Step 3: Field Components**
323
+
324
+ ```
325
+ @frontend-developer Create custom field components:
326
+
327
+ 1. TextInput.vue
328
+ - Label + input + error message
329
+ - Character counter
330
+ - Helper text support
331
+ - Icon support (left/right)
332
+
333
+ 2. SelectInput.vue
334
+ - Custom styled select
335
+ - Search functionality
336
+ - Keyboard navigation
337
+ - Multiple selection support
338
+
339
+ 3. DateTimePicker.vue
340
+ - Calendar popup
341
+ - Time picker
342
+ - Min/max date constraints
343
+ - Timezone aware
344
+
345
+ 4. TagInput.vue
346
+ - Add tags with Enter
347
+ - Remove tags with backspace
348
+ - Max tags limit
349
+ - Duplicate prevention
350
+ ```
351
+
352
+ **Step 4: Submit Handler**
353
+
354
+ ```
355
+ @frontend-developer Implement submit logic:
356
+
357
+ async function handleSubmit() {
358
+ // 1. Validate form
359
+ const validated = await schema.parseAsync(formData)
360
+
361
+ // 2. Optimistic update
362
+ addMarketOptimistic(validated)
363
+
364
+ // 3. API call
365
+ try {
366
+ const result = await $fetch('/api/markets', {
367
+ method: 'POST',
368
+ body: validated
369
+ })
370
+
371
+ // 4. Success handling
372
+ toast.success('Market created!')
373
+ router.push(`/markets/${result.id}`)
374
+
375
+ } catch (error) {
376
+ // 5. Error handling
377
+ revertOptimisticUpdate()
378
+ handleApiError(error)
379
+ }
380
+ }
381
+
382
+ Include proper error handling dan loading states.
383
+ ```
384
+
385
+ **Step 5: Accessibility**
386
+
387
+ ```
388
+ @frontend-developer Ensure form accessibility:
389
+
390
+ ✓ All inputs have labels
391
+ ✓ Error messages associated with inputs (aria-describedby)
392
+ ✓ Focus management (focus first error on submit)
393
+ ✓ Keyboard navigation works
394
+ ✓ Screen reader announcements
395
+ ✓ Required fields marked (aria-required)
396
+ ✓ Fieldset for related inputs
397
+
398
+ Test dengan keyboard only dan screen reader.
399
+ ```
400
+
401
+ ---
402
+
403
+ ## 🧪 Workflow 5: Testing Integration
404
+
405
+ ### Scenario
406
+
407
+ Add comprehensive tests untuk critical user flow.
408
+
409
+ ### Step-by-step
410
+
411
+ **Step 1: Test Setup**
412
+
413
+ ```
414
+ @frontend-developer Load skill `tdd-workflow` dan setup testing:
415
+
416
+ Install:
417
+ - @nuxt/test-utils
418
+ - @vue/test-utils
419
+ - vitest
420
+ - @testing-library/vue
421
+
422
+ Create test file structure:
423
+ - tests/unit/components/
424
+ - tests/integration/pages/
425
+ - tests/e2e/flows/
426
+
427
+ Setup test config di vitest.config.ts
428
+ ```
429
+
430
+ **Step 2: Component Tests**
431
+
432
+ ```
433
+ @frontend-developer Write unit tests untuk Button component:
434
+
435
+ Test cases:
436
+ ✓ Renders with correct variant classes
437
+ ✓ Calls onClick when clicked
438
+ ✓ Shows loading spinner when loading=true
439
+ ✓ Disabled state prevents clicks
440
+ ✓ Keyboard (Enter/Space) triggers onClick
441
+ ✓ Icon slots render correctly
442
+ ✓ Ripple effect applies
443
+
444
+ Target: 80%+ coverage
445
+ ```
446
+
447
+ **Step 3: Integration Tests**
448
+
449
+ ```
450
+ @frontend-developer Write integration test untuk CreateMarketForm:
451
+
452
+ Test flow:
453
+ 1. Form renders with empty fields
454
+ 2. Fill title → no error
455
+ 3. Fill invalid description (too short) → error shown
456
+ 4. Fix description → error clears
457
+ 5. Select category → dropdown works
458
+ 6. Add tags → tag chips appear
459
+ 7. Submit form → loading state → success redirect
460
+
461
+ Mock API calls dengan MSW.
462
+ ```
463
+
464
+ **Step 4: E2E Tests**
465
+
466
+ ```
467
+ @frontend-developer Setup Playwright E2E test untuk user journey:
468
+
469
+ Scenario: "User creates and bets on market"
470
+
471
+ Steps:
472
+ 1. Navigate to /markets/create
473
+ 2. Fill form with valid data
474
+ 3. Submit and verify redirect to market page
475
+ 4. Click "Place Bet" button
476
+ 5. Select outcome and amount
477
+ 6. Confirm bet
478
+ 7. Verify bet appears in "My Bets"
479
+
480
+ Include visual regression testing.
481
+ ```
482
+
483
+ ---
484
+
485
+ ## 🎭 Workflow 6: Dark Mode Implementation
486
+
487
+ ### Scenario
488
+
489
+ Add dark mode support dengan smooth transition.
490
+
491
+ ### Step-by-step
492
+
493
+ **Step 1: Setup Theme System**
494
+
495
+ ```
496
+ @frontend-developer Setup theme system dengan CSS variables:
497
+
498
+ Create app/assets/styles/themes.css:
499
+
500
+ :root {
501
+ /* Light theme */
502
+ --color-bg-primary: #ffffff;
503
+ --color-bg-secondary: #f9fafb;
504
+ --color-text-primary: #111827;
505
+ --color-text-secondary: #6b7280;
506
+ --color-border: #e5e7eb;
507
+ }
508
+
509
+ [data-theme="dark"] {
510
+ /* Dark theme */
511
+ --color-bg-primary: #111827;
512
+ --color-bg-secondary: #1f2937;
513
+ --color-text-primary: #f9fafb;
514
+ --color-text-secondary: #9ca3af;
515
+ --color-border: #374151;
516
+ }
517
+
518
+ Ensure all components use CSS variables.
519
+ ```
520
+
521
+ **Step 2: Theme Toggle Component**
522
+
523
+ ```
524
+ @frontend-developer Create ThemeToggle.vue component:
525
+
526
+ Features:
527
+ - Sun icon (light mode)
528
+ - Moon icon (dark mode)
529
+ - Smooth icon transition
530
+ - Persist preference (localStorage)
531
+ - Sync across tabs (storage event)
532
+ - Respect system preference (prefers-color-scheme)
533
+ - No flash on page load
534
+
535
+ Add to navigation bar.
536
+ ```
537
+
538
+ **Step 3: Theme Composable**
539
+
540
+ ```
541
+ @frontend-developer Create useTheme composable:
542
+
543
+ export function useTheme() {
544
+ const theme = ref<'light' | 'dark'>('light')
545
+
546
+ const setTheme = (newTheme: 'light' | 'dark') => {
547
+ theme.value = newTheme
548
+ document.documentElement.dataset.theme = newTheme
549
+ localStorage.setItem('theme', newTheme)
550
+ }
551
+
552
+ const toggleTheme = () => {
553
+ setTheme(theme.value === 'light' ? 'dark' : 'light')
554
+ }
555
+
556
+ // Initialize from localStorage or system preference
557
+ onMounted(() => {
558
+ const saved = localStorage.getItem('theme')
559
+ const system = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
560
+ setTheme((saved as any) || system)
561
+ })
562
+
563
+ return { theme, setTheme, toggleTheme }
564
+ }
565
+ ```
566
+
567
+ **Step 4: Update Components**
568
+
569
+ ```
570
+ @frontend-developer Update all components untuk support dark mode:
571
+
572
+ Priority components:
573
+ 1. Button (hover states, disabled states)
574
+ 2. Card (borders, shadows)
575
+ 3. Input (focus states, placeholders)
576
+ 4. Modal (backdrop, close button)
577
+ 5. Dropdown (hover, active states)
578
+
579
+ Ensure proper contrast ratios in both themes (WCAG AA).
580
+ ```
581
+
582
+ **Step 5: Smooth Transitions**
583
+
584
+ ```
585
+ @frontend-developer Add smooth theme transitions:
586
+
587
+ CSS:
588
+ * {
589
+ transition:
590
+ background-color 200ms ease,
591
+ border-color 200ms ease,
592
+ color 200ms ease;
593
+ }
594
+
595
+ Exceptions (no transition):
596
+ - Animations (keep them snappy)
597
+ - Interactive elements (buttons, links)
598
+ - Transform/translate properties
599
+
600
+ Test transitions don't cause jank.
601
+ ```
602
+
603
+ ---
604
+
605
+ ## 🚀 Workflow 7: Progressive Enhancement
606
+
607
+ ### Scenario
608
+
609
+ Ensure app works tanpa JavaScript (SSR + hydration).
610
+
611
+ ### Step-by-step
612
+
613
+ **Step 1: SSR Audit**
614
+
615
+ ```
616
+ @frontend-developer Audit SSR compatibility:
617
+
618
+ Check:
619
+ ✓ No direct access to window/document in <script setup>
620
+ ✓ Use process.client for browser-only code
621
+ ✓ useFetch for data (not mounted + fetch)
622
+ ✓ No localStorage in server context
623
+ ✓ Proper error handling for missing APIs
624
+
625
+ Scan all components dan fix issues.
626
+ ```
627
+
628
+ **Step 2: Progressive Forms**
629
+
630
+ ```
631
+ @frontend-developer Make forms work tanpa JS:
632
+
633
+ 1. Use native form submission
634
+ 2. Add action="/api/markets/create" method="POST"
635
+ 3. Server handles form data
636
+ 4. Redirect to result page
637
+ 5. Enhance dengan JS (preventDefault, fetch, optimistic updates)
638
+
639
+ This way form works even if JS fails to load.
640
+ ```
641
+
642
+ **Step 3: Lazy Hydration**
643
+
644
+ ```
645
+ @frontend-developer Implement lazy hydration untuk non-critical components:
646
+
647
+ Components to defer:
648
+ - Marketing sections (testimonials, features)
649
+ - Footer
650
+ - Non-interactive content
651
+ - Below-fold elements
652
+
653
+ Use:
654
+ - <ClientOnly> for truly optional components
655
+ - Intersection Observer untuk lazy hydration
656
+ - requestIdleCallback untuk low priority hydration
657
+ ```
658
+
659
+ ---
660
+
661
+ ## 📊 Workflow 8: Analytics Integration
662
+
663
+ ### Scenario
664
+
665
+ Add analytics tracking untuk user behavior.
666
+
667
+ ### Step-by-step
668
+
669
+ **Step 1: Setup Analytics**
670
+
671
+ ```
672
+ @frontend-developer Setup analytics dengan privacy-first approach:
673
+
674
+ Tools:
675
+ - Plausible Analytics (GDPR compliant)
676
+ - Custom event tracking
677
+ - Page view tracking
678
+ - Error tracking
679
+
680
+ Create app/plugins/analytics.client.ts
681
+ ```
682
+
683
+ **Step 2: Event Tracking**
684
+
685
+ ```
686
+ @frontend-developer Create useAnalytics composable:
687
+
688
+ Events to track:
689
+ - market_viewed (marketId, category)
690
+ - bet_placed (marketId, amount, outcome)
691
+ - search_performed (query, resultsCount)
692
+ - filter_applied (filterType, value)
693
+ - share_clicked (marketId, platform)
694
+
695
+ Usage:
696
+ const { track } = useAnalytics()
697
+ track('market_viewed', { marketId: 123, category: 'sports' })
698
+ ```
699
+
700
+ **Step 3: Performance Monitoring**
701
+
702
+ ```
703
+ @frontend-developer Track web vitals:
704
+
705
+ Metrics:
706
+ - LCP (Largest Contentful Paint)
707
+ - FID (First Input Delay)
708
+ - CLS (Cumulative Layout Shift)
709
+ - TTFB (Time to First Byte)
710
+
711
+ Send to analytics untuk monitoring.
712
+ ```
713
+
714
+ ---
715
+
716
+ ## 💡 Tips Umum untuk Semua Workflows
717
+
718
+ ### 1. Iterative Approach
719
+
720
+ Jangan minta semua sekaligus. Break down menjadi small tasks.
721
+
722
+ ### 2. Review Checkpoints
723
+
724
+ Setelah setiap major step, minta agent review:
725
+
726
+ ```
727
+ @frontend-developer Review yang sudah dibuat, ada yang bisa diimprove?
728
+ ```
729
+
730
+ ### 3. Ask for Alternatives
731
+
732
+ Jika tidak puas dengan approach:
733
+
734
+ ```
735
+ @frontend-developer Ada alternative approach yang lebih simple/performant?
736
+ ```
737
+
738
+ ### 4. Documentation
739
+
740
+ Selalu minta dokumentasi:
741
+
742
+ ```
743
+ @frontend-developer Tambahkan JSDoc comments dan usage examples
744
+ ```
745
+
746
+ ### 5. Accessibility First
747
+
748
+ Selalu remind accessibility:
749
+
750
+ ```
751
+ @frontend-developer CRITICAL: Ensure WCAG 2.1 AA compliance
752
+ ```
753
+
754
+ ---
755
+
756
+ **Happy Building! 🎉**
757
+
758
+ Workflows ini bisa dicustomize sesuai kebutuhan project Anda.