@haposoft/cafekit 0.16.0-rc.7 → 0.16.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 (299) hide show
  1. package/README.md +116 -27
  2. package/bin/__tests__/codex-hooks-ownership.test.js +239 -0
  3. package/bin/__tests__/codex-hooks.test.js +295 -0
  4. package/bin/__tests__/codex-native.test.js +2289 -34
  5. package/bin/__tests__/develop-contract.test.js +400 -23
  6. package/bin/__tests__/installer-safety.test.js +3 -3
  7. package/bin/__tests__/optional-skill-inventory.test.js +249 -0
  8. package/bin/__tests__/output-styles.test.js +214 -0
  9. package/bin/__tests__/package-inventory.test.js +2131 -16
  10. package/bin/__tests__/runtime-schema.test.js +111 -0
  11. package/bin/__tests__/secret-output-guardrail.test.js +122 -0
  12. package/bin/__tests__/skill-routing-source.test.js +172 -0
  13. package/bin/__tests__/specs-v2-execution-closeout.test.js +1 -1
  14. package/bin/install.js +10 -0
  15. package/bin/lib/codex-install.js +170 -5
  16. package/bin/lib/context.js +14 -0
  17. package/bin/lib/i18n.js +12 -6
  18. package/bin/lib/skill-deps.js +5 -5
  19. package/bin/phases/claude-runtime.js +23 -0
  20. package/bin/phases/claude-settings.js +8 -0
  21. package/bin/phases/codex-hooks.js +156 -0
  22. package/bin/phases/codex-runtime.js +29 -38
  23. package/bin/phases/copy-payload.js +8 -2
  24. package/bin/phases/select-skill-bundles.js +96 -0
  25. package/bin/phases/skill-inventory.js +71 -0
  26. package/bin/phases/skills-setup.js +9 -2
  27. package/bin/phases/write-metadata.js +8 -5
  28. package/package.json +8 -2
  29. package/src/claude/CLAUDE.md +3 -3
  30. package/src/claude/agents/brainstormer.md +52 -69
  31. package/src/claude/agents/code-auditor.md +32 -14
  32. package/src/claude/agents/debugger.md +35 -20
  33. package/src/claude/agents/deployer.md +12 -5
  34. package/src/claude/agents/docs-keeper.md +11 -1
  35. package/src/claude/agents/implementer.md +25 -13
  36. package/src/claude/agents/inspector.md +6 -3
  37. package/src/claude/agents/project-manager.md +1 -1
  38. package/src/claude/agents/researcher.md +26 -55
  39. package/src/claude/agents/spec-maker.md +24 -13
  40. package/src/claude/agents/strategist.md +52 -0
  41. package/src/claude/agents/test-runner.md +117 -132
  42. package/src/claude/agents/ui-ux-designer.md +1 -1
  43. package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -0
  44. package/src/claude/hooks/__tests__/precompact.test.js +158 -0
  45. package/src/claude/hooks/__tests__/spec-gate.test.js +87 -4
  46. package/src/claude/hooks/__tests__/state.test.js +254 -3
  47. package/src/claude/hooks/__tests__/statusline.test.js +196 -0
  48. package/src/claude/hooks/agent.cjs +1 -1
  49. package/src/claude/hooks/docs-sync.cjs +12 -10
  50. package/src/claude/hooks/inspect-block.cjs +1 -1
  51. package/src/claude/hooks/lib/config.cjs +3 -0
  52. package/src/claude/hooks/lib/hook-state-dir.cjs +39 -0
  53. package/src/claude/hooks/lib/secret-keywords.cjs +42 -0
  54. package/src/claude/hooks/precompact.cjs +105 -0
  55. package/src/claude/hooks/rules.cjs +1 -1
  56. package/src/claude/hooks/secret-output-guardrail.cjs +43 -0
  57. package/src/claude/hooks/session.cjs +27 -1
  58. package/src/claude/hooks/spec-gate.cjs +3 -3
  59. package/src/claude/hooks/spec-state.cjs +32 -5
  60. package/src/claude/hooks/state.cjs +1 -1
  61. package/src/claude/hooks/task-scaffold-guard.cjs +1 -1
  62. package/src/claude/hooks/usage.cjs +1 -1
  63. package/src/claude/migration-manifest.json +29 -15
  64. package/src/claude/output-styles/coding-level-0-eli5.md +103 -0
  65. package/src/claude/output-styles/coding-level-1-junior.md +124 -0
  66. package/src/claude/output-styles/coding-level-2-mid.md +146 -0
  67. package/src/claude/output-styles/coding-level-3-senior.md +148 -0
  68. package/src/claude/output-styles/coding-level-4-lead.md +159 -0
  69. package/src/claude/output-styles/coding-level-5-god.md +91 -0
  70. package/src/claude/references/debugger/core-philosophy.md +5 -3
  71. package/src/claude/references/debugger/frontend-verification.md +2 -2
  72. package/src/claude/references/debugger/log-ci-analysis.md +13 -1
  73. package/src/claude/references/debugger/parallel-agent-hydration.md +19 -34
  74. package/src/claude/references/debugger/performance-diagnostics.md +2 -2
  75. package/src/claude/references/debugger/root-cause-tracing.md +37 -6
  76. package/src/claude/references/debugger/side-effect-gate.md +3 -1
  77. package/src/claude/references/debugger/verification-protocol.md +13 -12
  78. package/src/claude/rules/orchestrator.md +7 -1
  79. package/src/claude/rules/process-management.md +39 -0
  80. package/src/claude/rules/review-audit-self-decision.md +48 -0
  81. package/src/claude/rules/skill-domain-routing.md +26 -24
  82. package/src/claude/rules/skill-workflow-routing.md +22 -14
  83. package/src/claude/rules/workflow.md +3 -3
  84. package/src/claude/runtime.json +1 -0
  85. package/src/claude/runtime.schema.json +205 -0
  86. package/src/claude/scripts/generate-skill-catalog.cjs +156 -122
  87. package/src/claude/scripts/provenance.cjs +18 -5
  88. package/src/claude/scripts/spec-receipt.cjs +76 -21
  89. package/src/claude/scripts/spec-resolver.cjs +144 -4
  90. package/src/claude/scripts/workflow-policy.cjs +1 -1
  91. package/src/claude/settings/settings.json +16 -0
  92. package/src/claude/skills/agent-browser/SKILL.md +1 -1
  93. package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
  94. package/src/claude/skills/brainstorm/SKILL.md +193 -172
  95. package/src/claude/skills/brainstorm/references/question-framework.md +105 -167
  96. package/src/claude/skills/chrome-devtools/SKILL.md +1 -1
  97. package/src/claude/skills/code-review/SKILL.md +43 -25
  98. package/src/claude/skills/code-review/references/spec-compliance-review.md +3 -4
  99. package/src/claude/skills/code-review/references/verification-gate.md +1 -1
  100. package/src/claude/skills/debug/SKILL.md +48 -19
  101. package/src/claude/skills/delegate/SKILL.md +1 -1
  102. package/src/claude/skills/develop/SKILL.md +92 -65
  103. package/src/claude/skills/develop/references/parallel-waves.md +36 -63
  104. package/src/claude/skills/develop/references/quality-gate.md +31 -4
  105. package/src/claude/skills/develop/references/subagent-patterns.md +21 -7
  106. package/src/claude/skills/docs/SKILL.md +42 -23
  107. package/src/claude/skills/docs/references/init-workflow.md +4 -4
  108. package/src/claude/skills/docs/references/reconstruct-workflow.md +6 -6
  109. package/src/claude/skills/docs/references/standard-docs-workflow.md +6 -2
  110. package/src/claude/skills/docs/references/summarize-workflow.md +2 -2
  111. package/src/claude/skills/docs/references/update-workflow.md +9 -7
  112. package/src/claude/skills/docs/templates/requirements-as-is.md +1 -1
  113. package/src/claude/skills/docx/SKILL.md +1 -1
  114. package/src/claude/skills/git/SKILL.md +1 -1
  115. package/src/claude/skills/git/references/commit-protocols.md +1 -1
  116. package/src/claude/skills/git/references/finish-branch.md +1 -1
  117. package/src/claude/skills/hotfix/SKILL.md +159 -170
  118. package/src/claude/skills/hotfix/references/diagnosis-protocol.md +14 -9
  119. package/src/claude/skills/hotfix/references/parallel-patterns.md +27 -13
  120. package/src/claude/skills/hotfix/references/prevention-gate.md +5 -0
  121. package/src/claude/skills/hotfix/references/review-cycle.md +21 -15
  122. package/src/claude/skills/hotfix/references/workflow-specialized.md +53 -21
  123. package/src/claude/skills/inspect/SKILL.md +55 -46
  124. package/src/claude/skills/inspect/references/internal-inspection.md +21 -5
  125. package/src/claude/skills/loop/SKILL.md +114 -0
  126. package/src/claude/skills/loop/references/bounded-loop-protocol.md +104 -0
  127. package/src/claude/skills/loop/references/metric-and-guard-contract.md +76 -0
  128. package/src/claude/skills/pdf/SKILL.md +1 -1
  129. package/src/claude/skills/pptx/SKILL.md +1 -1
  130. package/src/claude/skills/question/SKILL.md +16 -13
  131. package/src/claude/skills/research/SKILL.md +70 -43
  132. package/src/claude/skills/route/SKILL.md +94 -0
  133. package/src/claude/skills/route/references/agent-timing.md +46 -0
  134. package/src/claude/skills/route/references/chaining-patterns.md +53 -0
  135. package/src/claude/skills/route/references/task-taxonomy.md +48 -0
  136. package/src/claude/skills/specs/SKILL.md +48 -57
  137. package/src/claude/skills/specs/references/review.md +26 -8
  138. package/src/claude/skills/specs/references/templates.md +76 -31
  139. package/src/claude/skills/specs/templates/requirements-init.md +1 -1
  140. package/src/claude/skills/specs/templates/research.md +2 -2
  141. package/src/claude/skills/sync/SKILL.md +6 -6
  142. package/src/claude/skills/sync/references/sync-protocols.md +1 -1
  143. package/src/claude/skills/test/SKILL.md +120 -120
  144. package/src/claude/skills/test/references/execution-strategy.md +208 -361
  145. package/src/claude/skills/test/references/failure-triage.md +55 -121
  146. package/src/claude/skills/test/references/test-memory.md +20 -34
  147. package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
  148. package/src/claude/skills/web-testing/SKILL.md +1 -1
  149. package/src/claude/skills/xlsx/SKILL.md +1 -1
  150. package/src/claude/status.cjs +135 -33
  151. package/src/codex/AGENTS.md +14 -4
  152. package/src/codex/hooks/docs-sync.cjs +8 -3
  153. package/src/codex/hooks/lib/hook-context.cjs +18 -4
  154. package/src/codex/hooks/rules.cjs +29 -1
  155. package/src/codex/hooks/secret-output-guardrail.cjs +30 -0
  156. package/src/codex/hooks/spec-gate.cjs +3 -8
  157. package/src/codex/hooks/spec-state.cjs +34 -5
  158. package/src/codex/hooks.json +5 -0
  159. package/src/codex/runtime.json +2 -0
  160. package/src/common/.env.example +1 -1
  161. package/src/claude/skills/backend-development/SKILL.md +0 -101
  162. package/src/claude/skills/backend-development/references/backend-api-design.md +0 -495
  163. package/src/claude/skills/backend-development/references/backend-architecture.md +0 -454
  164. package/src/claude/skills/backend-development/references/backend-authentication.md +0 -338
  165. package/src/claude/skills/backend-development/references/backend-code-quality.md +0 -659
  166. package/src/claude/skills/backend-development/references/backend-debugging.md +0 -904
  167. package/src/claude/skills/backend-development/references/backend-devops.md +0 -491
  168. package/src/claude/skills/backend-development/references/backend-mindset.md +0 -387
  169. package/src/claude/skills/backend-development/references/backend-performance.md +0 -397
  170. package/src/claude/skills/backend-development/references/backend-security.md +0 -342
  171. package/src/claude/skills/backend-development/references/backend-technologies.md +0 -256
  172. package/src/claude/skills/backend-development/references/backend-testing.md +0 -429
  173. package/src/claude/skills/devops/.env.example +0 -76
  174. package/src/claude/skills/devops/SKILL.md +0 -102
  175. package/src/claude/skills/devops/references/browser-rendering.md +0 -305
  176. package/src/claude/skills/devops/references/cloudflare-d1-kv.md +0 -123
  177. package/src/claude/skills/devops/references/cloudflare-platform.md +0 -271
  178. package/src/claude/skills/devops/references/cloudflare-r2-storage.md +0 -280
  179. package/src/claude/skills/devops/references/cloudflare-workers-advanced.md +0 -312
  180. package/src/claude/skills/devops/references/cloudflare-workers-apis.md +0 -309
  181. package/src/claude/skills/devops/references/cloudflare-workers-basics.md +0 -418
  182. package/src/claude/skills/devops/references/docker-basics.md +0 -297
  183. package/src/claude/skills/devops/references/docker-compose.md +0 -292
  184. package/src/claude/skills/devops/references/gcloud-platform.md +0 -297
  185. package/src/claude/skills/devops/references/gcloud-services.md +0 -304
  186. package/src/claude/skills/devops/references/kubernetes-basics.md +0 -95
  187. package/src/claude/skills/devops/references/kubernetes-helm-advanced.md +0 -70
  188. package/src/claude/skills/devops/references/kubernetes-helm.md +0 -81
  189. package/src/claude/skills/devops/references/kubernetes-kubectl.md +0 -74
  190. package/src/claude/skills/devops/references/kubernetes-security-advanced.md +0 -94
  191. package/src/claude/skills/devops/references/kubernetes-security.md +0 -89
  192. package/src/claude/skills/devops/references/kubernetes-troubleshooting-advanced.md +0 -74
  193. package/src/claude/skills/devops/references/kubernetes-troubleshooting.md +0 -49
  194. package/src/claude/skills/devops/references/kubernetes-workflows-advanced.md +0 -75
  195. package/src/claude/skills/devops/references/kubernetes-workflows.md +0 -76
  196. package/src/claude/skills/devops/scripts/cloudflare_deploy.py +0 -269
  197. package/src/claude/skills/devops/scripts/docker_optimize.py +0 -332
  198. package/src/claude/skills/devops/scripts/requirements.txt +0 -20
  199. package/src/claude/skills/devops/scripts/tests/requirements.txt +0 -3
  200. package/src/claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +0 -285
  201. package/src/claude/skills/devops/scripts/tests/test_docker_optimize.py +0 -436
  202. package/src/claude/skills/frontend-design/SKILL.md +0 -135
  203. package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +0 -165
  204. package/src/claude/skills/frontend-design/references/analysis-best-practices.md +0 -80
  205. package/src/claude/skills/frontend-design/references/analysis-prompts.md +0 -141
  206. package/src/claude/skills/frontend-design/references/analysis-techniques.md +0 -118
  207. package/src/claude/skills/frontend-design/references/animejs.md +0 -396
  208. package/src/claude/skills/frontend-design/references/anti-slop-rules.md +0 -103
  209. package/src/claude/skills/frontend-design/references/asset-generation.md +0 -337
  210. package/src/claude/skills/frontend-design/references/bento-motion-engine.md +0 -142
  211. package/src/claude/skills/frontend-design/references/design-extraction-overview.md +0 -71
  212. package/src/claude/skills/frontend-design/references/extraction-best-practices.md +0 -141
  213. package/src/claude/skills/frontend-design/references/extraction-output-templates.md +0 -162
  214. package/src/claude/skills/frontend-design/references/extraction-prompts.md +0 -127
  215. package/src/claude/skills/frontend-design/references/magicui-components.md +0 -129
  216. package/src/claude/skills/frontend-design/references/performance-guardrails.md +0 -169
  217. package/src/claude/skills/frontend-design/references/premium-design-patterns.md +0 -93
  218. package/src/claude/skills/frontend-design/references/redesign-audit-checklist.md +0 -114
  219. package/src/claude/skills/frontend-design/references/technical-accessibility.md +0 -119
  220. package/src/claude/skills/frontend-design/references/technical-best-practices.md +0 -97
  221. package/src/claude/skills/frontend-design/references/technical-optimization.md +0 -44
  222. package/src/claude/skills/frontend-design/references/technical-overview.md +0 -90
  223. package/src/claude/skills/frontend-design/references/technical-workflows.md +0 -150
  224. package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +0 -95
  225. package/src/claude/skills/frontend-design/references/workflow-3d.md +0 -102
  226. package/src/claude/skills/frontend-design/references/workflow-describe.md +0 -87
  227. package/src/claude/skills/frontend-design/references/workflow-immersive.md +0 -87
  228. package/src/claude/skills/frontend-design/references/workflow-quick.md +0 -57
  229. package/src/claude/skills/frontend-design/references/workflow-screenshot.md +0 -63
  230. package/src/claude/skills/frontend-design/references/workflow-video.md +0 -74
  231. package/src/claude/skills/frontend-development/SKILL.md +0 -406
  232. package/src/claude/skills/frontend-development/resources/common-patterns.md +0 -331
  233. package/src/claude/skills/frontend-development/resources/complete-examples.md +0 -872
  234. package/src/claude/skills/frontend-development/resources/component-patterns.md +0 -502
  235. package/src/claude/skills/frontend-development/resources/data-fetching.md +0 -767
  236. package/src/claude/skills/frontend-development/resources/file-organization.md +0 -502
  237. package/src/claude/skills/frontend-development/resources/loading-and-error-states.md +0 -501
  238. package/src/claude/skills/frontend-development/resources/performance.md +0 -406
  239. package/src/claude/skills/frontend-development/resources/routing-guide.md +0 -364
  240. package/src/claude/skills/frontend-development/resources/styling-guide.md +0 -428
  241. package/src/claude/skills/frontend-development/resources/typescript-standards.md +0 -418
  242. package/src/claude/skills/mobile-development/SKILL.md +0 -218
  243. package/src/claude/skills/mobile-development/references/mobile-android.md +0 -604
  244. package/src/claude/skills/mobile-development/references/mobile-best-practices.md +0 -544
  245. package/src/claude/skills/mobile-development/references/mobile-debugging.md +0 -1089
  246. package/src/claude/skills/mobile-development/references/mobile-frameworks.md +0 -465
  247. package/src/claude/skills/mobile-development/references/mobile-ios.md +0 -496
  248. package/src/claude/skills/mobile-development/references/mobile-mindset.md +0 -542
  249. package/src/claude/skills/react-best-practices/AGENTS.md +0 -2249
  250. package/src/claude/skills/react-best-practices/README.md +0 -123
  251. package/src/claude/skills/react-best-practices/SKILL.md +0 -128
  252. package/src/claude/skills/react-best-practices/metadata.json +0 -15
  253. package/src/claude/skills/react-best-practices/rules/_sections.md +0 -46
  254. package/src/claude/skills/react-best-practices/rules/_template.md +0 -28
  255. package/src/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  256. package/src/claude/skills/react-best-practices/rules/advanced-use-latest.md +0 -49
  257. package/src/claude/skills/react-best-practices/rules/async-api-routes.md +0 -38
  258. package/src/claude/skills/react-best-practices/rules/async-defer-await.md +0 -80
  259. package/src/claude/skills/react-best-practices/rules/async-dependencies.md +0 -36
  260. package/src/claude/skills/react-best-practices/rules/async-parallel.md +0 -28
  261. package/src/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  262. package/src/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  263. package/src/claude/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  264. package/src/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  265. package/src/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  266. package/src/claude/skills/react-best-practices/rules/bundle-preload.md +0 -50
  267. package/src/claude/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  268. package/src/claude/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  269. package/src/claude/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
  270. package/src/claude/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  271. package/src/claude/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  272. package/src/claude/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  273. package/src/claude/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  274. package/src/claude/skills/react-best-practices/rules/js-early-exit.md +0 -50
  275. package/src/claude/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  276. package/src/claude/skills/react-best-practices/rules/js-index-maps.md +0 -37
  277. package/src/claude/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  278. package/src/claude/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  279. package/src/claude/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  280. package/src/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  281. package/src/claude/skills/react-best-practices/rules/rendering-activity.md +0 -26
  282. package/src/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  283. package/src/claude/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  284. package/src/claude/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  285. package/src/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  286. package/src/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  287. package/src/claude/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  288. package/src/claude/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  289. package/src/claude/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  290. package/src/claude/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  291. package/src/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  292. package/src/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  293. package/src/claude/skills/react-best-practices/rules/rerender-memo.md +0 -44
  294. package/src/claude/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  295. package/src/claude/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  296. package/src/claude/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  297. package/src/claude/skills/react-best-practices/rules/server-cache-react.md +0 -26
  298. package/src/claude/skills/react-best-practices/rules/server-parallel-fetching.md +0 -79
  299. package/src/claude/skills/react-best-practices/rules/server-serialization.md +0 -38
@@ -1,406 +0,0 @@
1
- ---
2
- name: hapo:frontend-development
3
- description: Build React/TypeScript frontends with modern patterns. Use for components, Suspense, lazy loading, useSuspenseQuery, MUI v7 styling, TanStack Router, performance optimization.
4
- user-invocable: true
5
- when_to_use: "Invoke to build React/TS components with best practices."
6
- category: frontend
7
- keywords: [frontend, react, typescript, components]
8
- argument-hint: "[component or feature]"
9
- metadata:
10
- author: haposoft
11
- version: "1.0.0"
12
- ---
13
- # Frontend Development Guidelines
14
-
15
- ## Purpose
16
-
17
- Comprehensive guide for modern React development, emphasizing Suspense-based data fetching, lazy loading, proper file organization, and performance optimization.
18
-
19
- ## When to Use This Skill
20
-
21
- - Creating new components or pages
22
- - Building new features
23
- - Fetching data with TanStack Query
24
- - Setting up routing with TanStack Router
25
- - Styling components with MUI v7
26
- - Performance optimization
27
- - Organizing frontend code
28
- - TypeScript best practices
29
-
30
- ---
31
-
32
- ## Quick Start
33
-
34
- ### New Component Checklist
35
-
36
- Creating a component? Follow this checklist:
37
-
38
- - [ ] Use `React.FC<Props>` pattern with TypeScript
39
- - [ ] Lazy load if heavy component: `React.lazy(() => import())`
40
- - [ ] Wrap in `<SuspenseLoader>` for loading states
41
- - [ ] Use `useSuspenseQuery` for data fetching
42
- - [ ] Import aliases: `@/`, `~types`, `~components`, `~features`
43
- - [ ] Styles: Inline if <100 lines, separate file if >100 lines
44
- - [ ] Use `useCallback` for event handlers passed to children
45
- - [ ] Default export at bottom
46
- - [ ] No early returns with loading spinners
47
- - [ ] Use `useMuiSnackbar` for user notifications
48
-
49
- ### New Feature Checklist
50
-
51
- Creating a feature? Set up this structure:
52
-
53
- - [ ] Create `features/{feature-name}/` directory
54
- - [ ] Create subdirectories: `api/`, `components/`, `hooks/`, `helpers/`, `types/`
55
- - [ ] Create API service file: `api/{feature}Api.ts`
56
- - [ ] Set up TypeScript types in `types/`
57
- - [ ] Create route in `routes/{feature-name}/index.tsx`
58
- - [ ] Lazy load feature components
59
- - [ ] Use Suspense boundaries
60
- - [ ] Export public API from feature `index.ts`
61
-
62
- ---
63
-
64
- ## Import Aliases Quick Reference
65
-
66
- | Alias | Resolves To | Example |
67
- |-------|-------------|---------|
68
- | `@/` | `src/` | `import { apiClient } from '@/lib/apiClient'` |
69
- | `~types` | `src/types` | `import type { User } from '~types/user'` |
70
- | `~components` | `src/components` | `import { SuspenseLoader } from '~components/SuspenseLoader'` |
71
- | `~features` | `src/features` | `import { authApi } from '~features/auth'` |
72
-
73
- Defined in: [vite.config.ts](../../vite.config.ts) lines 180-185
74
-
75
- ---
76
-
77
- ## Common Imports Cheatsheet
78
-
79
- ```typescript
80
- // React & Lazy Loading
81
- import React, { useState, useCallback, useMemo } from 'react';
82
- const Heavy = React.lazy(() => import('./Heavy'));
83
-
84
- // MUI Components
85
- import { Box, Paper, Typography, Button, Grid } from '@mui/material';
86
- import type { SxProps, Theme } from '@mui/material';
87
-
88
- // TanStack Query (Suspense)
89
- import { useSuspenseQuery, useQueryClient } from '@tanstack/react-query';
90
-
91
- // TanStack Router
92
- import { createFileRoute } from '@tanstack/react-router';
93
-
94
- // Project Components
95
- import { SuspenseLoader } from '~components/SuspenseLoader';
96
-
97
- // Hooks
98
- import { useAuth } from '@/hooks/useAuth';
99
- import { useMuiSnackbar } from '@/hooks/useMuiSnackbar';
100
-
101
- // Types
102
- import type { Post } from '~types/post';
103
- ```
104
-
105
- ---
106
-
107
- ## Topic Guides
108
-
109
- ### 🎨 Component Patterns
110
-
111
- **Modern React components use:**
112
- - `React.FC<Props>` for type safety
113
- - `React.lazy()` for code splitting
114
- - `SuspenseLoader` for loading states
115
- - Named const + default export pattern
116
-
117
- **Key Concepts:**
118
- - Lazy load heavy components (DataGrid, charts, editors)
119
- - Always wrap lazy components in Suspense
120
- - Use SuspenseLoader component (with fade animation)
121
- - Component structure: Props → Hooks → Handlers → Render → Export
122
-
123
- **[📖 Complete Guide: resources/component-patterns.md](resources/component-patterns.md)**
124
-
125
- ---
126
-
127
- ### 📊 Data Fetching
128
-
129
- **PRIMARY PATTERN: useSuspenseQuery**
130
- - Use with Suspense boundaries
131
- - Cache-first strategy (check grid cache before API)
132
- - Replaces `isLoading` checks
133
- - Type-safe with generics
134
-
135
- **API Service Layer:**
136
- - Create `features/{feature}/api/{feature}Api.ts`
137
- - Use `apiClient` axios instance
138
- - Centralized methods per feature
139
- - Route format: `/form/route` (NOT `/api/form/route`)
140
-
141
- **[📖 Complete Guide: resources/data-fetching.md](resources/data-fetching.md)**
142
-
143
- ---
144
-
145
- ### 📁 File Organization
146
-
147
- **features/ vs components/:**
148
- - `features/`: Domain-specific (posts, comments, auth)
149
- - `components/`: Truly reusable (SuspenseLoader, CustomAppBar)
150
-
151
- **Feature Subdirectories:**
152
- ```
153
- features/
154
- my-feature/
155
- api/ # API service layer
156
- components/ # Feature components
157
- hooks/ # Custom hooks
158
- helpers/ # Utility functions
159
- types/ # TypeScript types
160
- ```
161
-
162
- **[📖 Complete Guide: resources/file-organization.md](resources/file-organization.md)**
163
-
164
- ---
165
-
166
- ### 🎨 Styling
167
-
168
- **Inline vs Separate:**
169
- - <100 lines: Inline `const styles: Record<string, SxProps<Theme>>`
170
- - >100 lines: Separate `.styles.ts` file
171
-
172
- **Primary Method:**
173
- - Use `sx` prop for MUI components
174
- - Type-safe with `SxProps<Theme>`
175
- - Theme access: `(theme) => theme.palette.primary.main`
176
-
177
- **MUI v7 Grid:**
178
- ```typescript
179
- <Grid size={{ xs: 12, md: 6 }}> // ✅ v7 syntax
180
- <Grid xs={12} md={6}> // ❌ Old syntax
181
- ```
182
-
183
- **[📖 Complete Guide: resources/styling-guide.md](resources/styling-guide.md)**
184
-
185
- ---
186
-
187
- ### 🛣️ Routing
188
-
189
- **TanStack Router - Folder-Based:**
190
- - Directory: `routes/my-route/index.tsx`
191
- - Lazy load components
192
- - Use `createFileRoute`
193
- - Breadcrumb data in loader
194
-
195
- **Example:**
196
- ```typescript
197
- import { createFileRoute } from '@tanstack/react-router';
198
- import { lazy } from 'react';
199
-
200
- const MyPage = lazy(() => import('@/features/my-feature/components/MyPage'));
201
-
202
- export const Route = createFileRoute('/my-route/')({
203
- component: MyPage,
204
- loader: () => ({ crumb: 'My Route' }),
205
- });
206
- ```
207
-
208
- **[📖 Complete Guide: resources/routing-guide.md](resources/routing-guide.md)**
209
-
210
- ---
211
-
212
- ### ⏳ Loading & Error States
213
-
214
- **CRITICAL RULE: No Early Returns**
215
-
216
- ```typescript
217
- // ❌ NEVER - Causes layout shift
218
- if (isLoading) {
219
- return <LoadingSpinner />;
220
- }
221
-
222
- // ✅ ALWAYS - Consistent layout
223
- <SuspenseLoader>
224
- <Content />
225
- </SuspenseLoader>
226
- ```
227
-
228
- **Why:** Prevents Cumulative Layout Shift (CLS), better UX
229
-
230
- **Error Handling:**
231
- - Use `useMuiSnackbar` for user feedback
232
- - NEVER `react-toastify`
233
- - TanStack Query `onError` callbacks
234
-
235
- **[📖 Complete Guide: resources/loading-and-error-states.md](resources/loading-and-error-states.md)**
236
-
237
- ---
238
-
239
- ### ⚡ Performance
240
-
241
- **Optimization Patterns:**
242
- - `useMemo`: Expensive computations (filter, sort, map)
243
- - `useCallback`: Event handlers passed to children
244
- - `React.memo`: Expensive components
245
- - Debounced search (300-500ms)
246
- - Memory leak prevention (cleanup in useEffect)
247
-
248
- **[📖 Complete Guide: resources/performance.md](resources/performance.md)**
249
-
250
- ---
251
-
252
- ### 📘 TypeScript
253
-
254
- **Standards:**
255
- - Strict mode, no `any` type
256
- - Explicit return types on functions
257
- - Type imports: `import type { User } from '~types/user'`
258
- - Component prop interfaces with JSDoc
259
-
260
- **[📖 Complete Guide: resources/typescript-standards.md](resources/typescript-standards.md)**
261
-
262
- ---
263
-
264
- ### 🔧 Common Patterns
265
-
266
- **Covered Topics:**
267
- - React Hook Form with Zod validation
268
- - DataGrid wrapper contracts
269
- - Dialog component standards
270
- - `useAuth` hook for current user
271
- - Mutation patterns with cache invalidation
272
-
273
- **[📖 Complete Guide: resources/common-patterns.md](resources/common-patterns.md)**
274
-
275
- ---
276
-
277
- ### 📚 Complete Examples
278
-
279
- **Full working examples:**
280
- - Modern component with all patterns
281
- - Complete feature structure
282
- - API service layer
283
- - Route with lazy loading
284
- - Suspense + useSuspenseQuery
285
- - Form with validation
286
-
287
- **[📖 Complete Guide: resources/complete-examples.md](resources/complete-examples.md)**
288
-
289
- ---
290
-
291
- ## Navigation Guide
292
-
293
- | Need to... | Read this resource |
294
- |------------|-------------------|
295
- | Create a component | [component-patterns.md](resources/component-patterns.md) |
296
- | Fetch data | [data-fetching.md](resources/data-fetching.md) |
297
- | Organize files/folders | [file-organization.md](resources/file-organization.md) |
298
- | Style components | [styling-guide.md](resources/styling-guide.md) |
299
- | Set up routing | [routing-guide.md](resources/routing-guide.md) |
300
- | Handle loading/errors | [loading-and-error-states.md](resources/loading-and-error-states.md) |
301
- | Optimize performance | [performance.md](resources/performance.md) |
302
- | TypeScript types | [typescript-standards.md](resources/typescript-standards.md) |
303
- | Forms/Auth/DataGrid | [common-patterns.md](resources/common-patterns.md) |
304
- | See full examples | [complete-examples.md](resources/complete-examples.md) |
305
-
306
- ---
307
-
308
- ## Core Principles
309
-
310
- 1. **Lazy Load Everything Heavy**: Routes, DataGrid, charts, editors
311
- 2. **Suspense for Loading**: Use SuspenseLoader, not early returns
312
- 3. **useSuspenseQuery**: Primary data fetching pattern for new code
313
- 4. **Features are Organized**: api/, components/, hooks/, helpers/ subdirs
314
- 5. **Styles Based on Size**: <100 inline, >100 separate
315
- 6. **Import Aliases**: Use @/, ~types, ~components, ~features
316
- 7. **No Early Returns**: Prevents layout shift
317
- 8. **useMuiSnackbar**: For all user notifications
318
-
319
- ---
320
-
321
- ## Quick Reference: File Structure
322
-
323
- ```
324
- src/
325
- features/
326
- my-feature/
327
- api/
328
- myFeatureApi.ts # API service
329
- components/
330
- MyFeature.tsx # Main component
331
- SubComponent.tsx # Related components
332
- hooks/
333
- useMyFeature.ts # Custom hooks
334
- useSuspenseMyFeature.ts # Suspense hooks
335
- helpers/
336
- myFeatureHelpers.ts # Utilities
337
- types/
338
- index.ts # TypeScript types
339
- index.ts # Public exports
340
-
341
- components/
342
- SuspenseLoader/
343
- SuspenseLoader.tsx # Reusable loader
344
- CustomAppBar/
345
- CustomAppBar.tsx # Reusable app bar
346
-
347
- routes/
348
- my-route/
349
- index.tsx # Route component
350
- create/
351
- index.tsx # Nested route
352
- ```
353
-
354
- ---
355
-
356
- ## Modern Component Template (Quick Copy)
357
-
358
- ```typescript
359
- import React, { useState, useCallback } from 'react';
360
- import { Box, Paper } from '@mui/material';
361
- import { useSuspenseQuery } from '@tanstack/react-query';
362
- import { featureApi } from '../api/featureApi';
363
- import type { FeatureData } from '~types/feature';
364
-
365
- interface MyComponentProps {
366
- id: number;
367
- onAction?: () => void;
368
- }
369
-
370
- export const MyComponent: React.FC<MyComponentProps> = ({ id, onAction }) => {
371
- const [state, setState] = useState<string>('');
372
-
373
- const { data } = useSuspenseQuery({
374
- queryKey: ['feature', id],
375
- queryFn: () => featureApi.getFeature(id),
376
- });
377
-
378
- const handleAction = useCallback(() => {
379
- setState('updated');
380
- onAction?.();
381
- }, [onAction]);
382
-
383
- return (
384
- <Box sx={{ p: 2 }}>
385
- <Paper sx={{ p: 3 }}>
386
- {/* Content */}
387
- </Paper>
388
- </Box>
389
- );
390
- };
391
-
392
- export default MyComponent;
393
- ```
394
-
395
- For complete examples, see [resources/complete-examples.md](resources/complete-examples.md)
396
-
397
- ---
398
-
399
- ## Related Skills
400
-
401
- - **error-tracking**: Error tracking with Sentry (applies to frontend too)
402
- - **backend-dev-guidelines**: Backend API patterns that frontend consumes
403
-
404
- ---
405
-
406
- **Skill Status**: Modular structure with progressive loading for optimal context management