@wazir-dev/cli 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 (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. package/workflows/verify.md +37 -0
@@ -0,0 +1,808 @@
1
+ # React -- Expertise Module
2
+
3
+ > A React specialist designs, builds, and maintains interactive user interfaces using React 19+ and its ecosystem.
4
+ > Scope spans component architecture, state management, server/client rendering strategies, performance optimization,
5
+ > testing, security, and deployment across SPAs, SSR frameworks (Next.js, Remix), and React Native.
6
+
7
+ ---
8
+
9
+ ## Core Patterns & Conventions
10
+
11
+ ### Project Structure
12
+
13
+ Use **feature-based co-location** over type-based folders. Group by domain, not by file type.
14
+
15
+ ```
16
+ src/
17
+ features/
18
+ auth/
19
+ components/ # LoginForm.tsx, AuthGuard.tsx
20
+ hooks/ # useAuth.ts
21
+ api/ # auth.queries.ts (TanStack Query)
22
+ schemas/ # auth.schema.ts (Zod)
23
+ __tests__/ # LoginForm.test.tsx
24
+ index.ts # public barrel export
25
+ dashboard/
26
+ components/
27
+ hooks/
28
+ api/
29
+ index.ts
30
+ shared/
31
+ components/ # Button.tsx, Modal.tsx (design system primitives)
32
+ hooks/ # useDebounce.ts, useMediaQuery.ts
33
+ lib/ # utils, constants, type helpers
34
+ providers/ # ThemeProvider, QueryProvider
35
+ app/ # entry point, routing, global layout
36
+ ```
37
+
38
+ Rules:
39
+ - Maximum 2-3 levels of folder nesting. Deep hierarchies create unwieldy import paths.
40
+ - Use **barrel exports** (`index.ts`) per feature to define the public API.
41
+ - Co-locate tests, styles, and stories with the component they belong to.
42
+ - Use `kebab-case` for file/folder names (avoids OS case-sensitivity bugs); `PascalCase` for component names in code.
43
+
44
+ ### Naming Conventions & Code Style
45
+
46
+ | Item | Convention | Example |
47
+ |---|---|---|
48
+ | Components | PascalCase | `UserProfile.tsx` |
49
+ | Hooks | camelCase, `use` prefix | `useAuth.ts` |
50
+ | Utilities | camelCase | `formatCurrency.ts` |
51
+ | Constants | SCREAMING_SNAKE | `MAX_RETRY_COUNT` |
52
+ | Types/Interfaces | PascalCase, no `I` prefix | `type UserProfile = {...}` |
53
+ | Files/folders | kebab-case | `user-profile/` |
54
+
55
+ Tooling baseline:
56
+ - **ESLint** with `eslint-plugin-react-hooks` (enforce Rules of Hooks) + `eslint-plugin-jsx-a11y`.
57
+ - **Prettier** for formatting (single config, no debates).
58
+ - **TypeScript** in strict mode (`"strict": true`). No `any` -- use `unknown` + type narrowing.
59
+ - **Biome** (v1.9+) as an alternative all-in-one linter/formatter replacing ESLint + Prettier.
60
+
61
+ ### Architecture Patterns
62
+
63
+ **Component Composition** -- prefer composition over prop drilling:
64
+ ```tsx
65
+ <Card>
66
+ <Card.Header title="Dashboard" />
67
+ <Card.Body>{children}</Card.Body>
68
+ <Card.Footer actions={<Button>Save</Button>} />
69
+ </Card>
70
+ ```
71
+
72
+ **Compound Components** -- share implicit state via Context between related components (e.g., `<Tabs>`, `<Tab>`, `<TabPanel>`).
73
+
74
+ **Render Props & Headless Components** -- separate logic from presentation. Libraries like Radix UI, Headless UI, and TanStack Table use this pattern. Prefer custom hooks over render props for new code.
75
+
76
+ **Container/Presentational split** -- in React 19+, Server Components naturally become "containers" (data fetching, auth) while Client Components handle interactivity.
77
+
78
+ ### State Management
79
+
80
+ **Decision hierarchy** (start simple, escalate only when needed):
81
+
82
+ 1. **Local state** -- `useState` / `useReducer` for single-component state.
83
+ 2. **Lifted state** -- share between siblings by lifting to nearest common parent.
84
+ 3. **Server state** -- **TanStack Query v5** (or SWR) for all API data. Handles caching, background refetch, optimistic updates, pagination. Covers ~80% of "global state" needs.
85
+ 4. **URL state** -- search params, filters, pagination belong in the URL via `useSearchParams` or TanStack Router's type-safe search params.
86
+ 5. **Client global state** -- only when you have truly global, synchronous, client-only state (theme, sidebar open, user preferences):
87
+ - **Zustand** (v5) -- minimal API, ~1KB, works outside React. Best default choice.
88
+ - **Jotai** (v2) -- atomic model, fine-grained reactivity. Best for complex derived state.
89
+ - **Redux Toolkit** -- only for large teams already invested in Redux. Avoid for new projects unless mandated.
90
+ 6. **React Context** -- fine for low-frequency updates (theme, locale). Avoid for high-frequency state (causes full subtree re-renders).
91
+
92
+ ### Routing (2025-2026)
93
+
94
+ | Router | Best For | Key Feature |
95
+ |---|---|---|
96
+ | **Next.js App Router** (v15+) | Full-stack apps, SSR/SSG/ISR | File-based routing, Server Components, server actions |
97
+ | **React Router v7** | SPAs or framework mode (Remix successor) | Loaders/actions, nested routes, framework mode for SSR |
98
+ | **TanStack Router** (v1) | Type-safe SPAs, Vite-based apps | 100% type-safe routes + search params, built-in data loading |
99
+
100
+ React Router v7 in **framework mode** is effectively Remix v3. In library mode, it remains a traditional SPA router. TanStack Router leads in TypeScript type safety -- routes, params, and search params are fully inferred.
101
+
102
+ ### Data Flow: Server Components, Server Actions, Suspense
103
+
104
+ **React Server Components (RSC)** -- components that run only on the server. They can directly access databases, read files, call internal services. They ship zero JavaScript to the client.
105
+
106
+ - Default in Next.js App Router: every component is a Server Component unless marked `"use client"`.
107
+ - Use `"use client"` only for interactive components (event handlers, hooks, browser APIs).
108
+ - Server Components can render Client Components (not vice versa -- pass Client Components as `children` or props).
109
+
110
+ **Server Actions** -- async functions marked with `"use server"` that run on the server but are callable from client forms/events. Replace API routes for mutations.
111
+
112
+ **Suspense** -- wrap async components in `<Suspense fallback={<Skeleton />}>` to show loading states declaratively. Nest Suspense boundaries for granular loading (don't wrap the entire page in one boundary).
113
+
114
+ ### Error Handling
115
+
116
+ **Error Boundaries** -- class components (or `react-error-boundary` library) that catch render-time errors in their subtree and display fallback UI.
117
+
118
+ ```tsx
119
+ import { ErrorBoundary } from "react-error-boundary";
120
+
121
+ <ErrorBoundary
122
+ fallback={<ErrorFallback />}
123
+ onReset={() => queryClient.invalidateQueries()}
124
+ >
125
+ <Dashboard />
126
+ </ErrorBoundary>
127
+ ```
128
+
129
+ Strategy:
130
+ - Place Error Boundaries at **layout boundaries** (page, section, widget level) -- not around every component.
131
+ - Error Boundaries do NOT catch: event handler errors, async errors (setTimeout, Promises outside Suspense), or server-side errors.
132
+ - In Server Components (Next.js): use `error.tsx` files for route-level error handling. Use try/catch in server actions.
133
+ - For event handlers: use try/catch and report to error tracking (Sentry).
134
+ - For async operations with `use()`: errors propagate to the nearest Error Boundary automatically.
135
+
136
+ ### Logging & Observability
137
+
138
+ - **Client-side**: Sentry (error tracking + performance), LogRocket or FullStory (session replay).
139
+ - **Server-side** (RSC / server actions): structured logging with `pino` or `winston`. Correlate with request IDs.
140
+ - **Core Web Vitals**: use `web-vitals` library or Next.js built-in analytics. Track LCP, INP, CLS.
141
+ - **Custom metrics**: track key user flows (time to interactive form, checkout completion rate).
142
+
143
+ ---
144
+
145
+ ## Anti-Patterns & Pitfalls
146
+
147
+ ### 1. Derived State in useEffect
148
+ **Problem**: Storing a value in state that can be computed from existing props or state, then "syncing" it with useEffect. Causes unnecessary re-renders, sync bugs, and stale data.
149
+ **Fix**: Compute derived values inline during render: `const fullName = firstName + ' ' + lastName;`
150
+
151
+ ### 2. Using useEffect for User Events
152
+ **Problem**: Firing side effects from user actions (button clicks, form submissions) inside useEffect by toggling a flag state. This is convoluted and error-prone.
153
+ **Fix**: Call the side effect directly in the event handler. useEffect is for synchronizing with external systems, not responding to user interactions.
154
+
155
+ ### 3. Props in State (Stale Closure)
156
+ **Problem**: Copying props into useState (`const [value, setValue] = useState(props.value)`). The state never updates when props change, creating stale data.
157
+ **Fix**: Use the prop directly, or if you need a local draft, use a `key` prop to reset the component: `<Editor key={item.id} initialValue={item.value} />`.
158
+
159
+ ### 4. Overusing Context for High-Frequency State
160
+ **Problem**: Putting rapidly changing state (mouse position, input text, animation frames) in React Context. Every consumer re-renders on every change.
161
+ **Fix**: Use Zustand, Jotai, or `useSyncExternalStore` for high-frequency state. Reserve Context for low-frequency values (theme, locale, auth).
162
+
163
+ ### 5. Array Index as Key
164
+ **Problem**: Using `index` as the `key` prop in lists. When items are reordered, inserted, or deleted, React reuses the wrong DOM nodes, causing state bugs and visual glitches.
165
+ **Fix**: Use a stable, unique identifier from your data (`item.id`).
166
+
167
+ ### 6. Giant Monolith Components
168
+ **Problem**: Components exceeding 200-300 lines that handle data fetching, business logic, and rendering. Hard to test, reuse, or understand.
169
+ **Fix**: Extract custom hooks for logic, break UI into smaller composed components. One component = one responsibility.
170
+
171
+ ### 7. Premature Optimization (Manual Memoization)
172
+ **Problem**: Wrapping everything in `useMemo`, `useCallback`, and `React.memo` without measuring. Adds complexity and memory overhead.
173
+ **Fix**: With React 19 Compiler (stable since October 2025), memoization is automatic. Remove manual `useMemo`/`useCallback` in Compiler-enabled projects. Without the Compiler, profile first with React DevTools before memoizing.
174
+
175
+ ### 8. Fetching Data in useEffect
176
+ **Problem**: Using `useEffect` + `useState` for data fetching leads to waterfalls, race conditions, no caching, no deduplication, and missing loading/error states.
177
+ **Fix**: Use TanStack Query, SWR, or server-side data fetching (RSC, loaders). These handle caching, deduplication, background refresh, and error/loading states.
178
+
179
+ ### 9. Prop Drilling Through Many Layers
180
+ **Problem**: Passing props through 4+ intermediate components that don't use them, creating tight coupling and maintenance burden.
181
+ **Fix**: Use component composition (`children` pattern), Context for truly global data, or Zustand for shared client state.
182
+
183
+ ### 10. Direct DOM Mutation
184
+ **Problem**: Directly modifying the DOM via refs or document selectors. Bypasses React's virtual DOM and can cause XSS, stale UI, or crashes.
185
+ **Fix**: Let React own the DOM. Use state to drive rendering. Only use refs for measuring, focusing, or integrating non-React libraries.
186
+
187
+ ### 11. Not Handling Loading and Error States
188
+ **Problem**: Showing nothing (blank screen) or crashing when data is loading or an API call fails.
189
+ **Fix**: Always handle loading, error, and empty states. Use Suspense + Error Boundaries for declarative handling.
190
+
191
+ ### 12. Ignoring Accessibility
192
+ **Problem**: Using `<div onClick>` instead of `<button>`, missing labels, no keyboard navigation. Excludes users and fails audits.
193
+ **Fix**: Use semantic HTML elements. Add `aria-*` attributes. Test with axe-core and keyboard navigation. Use `eslint-plugin-jsx-a11y`.
194
+
195
+ ### 13. Leaking Secrets to the Client Bundle
196
+ **Problem**: Using server secrets (API keys, database URLs) in client components. They end up in the JavaScript bundle, visible to anyone.
197
+ **Fix**: Only use `NEXT_PUBLIC_` / `VITE_` prefixed vars on the client. Keep secrets in server-only code (Server Components, API routes, server actions).
198
+
199
+ ### 14. Unnecessary "use client" Directives
200
+ **Problem**: Marking entire pages as Client Components when only a small interactive part needs it. Ships unnecessary JavaScript.
201
+ **Fix**: Push `"use client"` to the smallest leaf component that needs interactivity. Keep data fetching and layout in Server Components.
202
+
203
+ ---
204
+
205
+ ## Testing Strategy
206
+
207
+ ### Testing Pyramid for React
208
+
209
+ ```
210
+ / E2E (Playwright) \ 3-5 critical user journeys
211
+ / Integration Tests \ Component interactions, API integration
212
+ / Component Tests (RTL) \ User-facing behavior
213
+ / Unit Tests (Vitest) \ Pure functions, hooks, utilities
214
+ ```
215
+
216
+ ### Component Testing -- React Testing Library + Vitest
217
+
218
+ React Testing Library (RTL) is the standard. It enforces testing **user behavior**, not implementation details.
219
+
220
+ ```tsx
221
+ // UserGreeting.test.tsx
222
+ import { render, screen } from "@testing-library/react";
223
+ import userEvent from "@testing-library/user-event";
224
+ import { UserGreeting } from "./UserGreeting";
225
+
226
+ test("displays greeting after user enters name", async () => {
227
+ const user = userEvent.setup();
228
+ render(<UserGreeting />);
229
+
230
+ await user.type(screen.getByRole("textbox", { name: /name/i }), "Alice");
231
+ await user.click(screen.getByRole("button", { name: /greet/i }));
232
+
233
+ expect(screen.getByText(/hello, alice/i)).toBeInTheDocument();
234
+ });
235
+ ```
236
+
237
+ **What to test**: user-visible behavior, accessibility (roles, labels), error states, loading states.
238
+ **What NOT to test**: internal state values, implementation details (number of re-renders, hook calls), CSS class names.
239
+
240
+ ### Test Runner: Vitest (v2+)
241
+
242
+ Vitest is the modern default for React projects using Vite. 10-20x faster than Jest on large codebases. Native ESM, TypeScript, and JSX support.
243
+
244
+ For Jest-based codebases: Jest 30 (mid-2025) improved performance and TypeScript 5.4+ support. Migration is optional but recommended for new projects.
245
+
246
+ ### E2E Testing -- Playwright
247
+
248
+ Playwright is the recommended E2E framework. Run 3-5 critical user journeys (signup, checkout, core workflow).
249
+
250
+ ```ts
251
+ // checkout.spec.ts
252
+ test("user can complete checkout", async ({ page }) => {
253
+ await page.goto("/products");
254
+ await page.getByRole("button", { name: "Add to cart" }).first().click();
255
+ await page.getByRole("link", { name: "Cart" }).click();
256
+ await page.getByRole("button", { name: "Checkout" }).click();
257
+ await expect(page.getByText("Order confirmed")).toBeVisible();
258
+ });
259
+ ```
260
+
261
+ ### Mocking Patterns
262
+
263
+ - **API mocking**: Use **MSW (Mock Service Worker)** v2 to intercept network requests at the service worker level. Works in both tests and browser dev. Avoids mocking fetch/axios internals.
264
+ - **Module mocking**: Use `vi.mock()` (Vitest) sparingly -- prefer dependency injection or MSW.
265
+ - **Time/Date mocking**: `vi.useFakeTimers()` for timer-dependent logic.
266
+
267
+ ### Visual Regression
268
+
269
+ Use **Chromatic** (Storybook) or **Playwright visual comparisons** for catching unintended UI changes. Especially valuable for design system components.
270
+
271
+ ---
272
+
273
+ ## Performance Considerations
274
+
275
+ ### React 19 Compiler (Stable since October 2025)
276
+
277
+ The React Compiler analyzes your code at build time and automatically applies memoization where safe. This eliminates the need for manual `useMemo`, `useCallback`, and `React.memo` in most cases.
278
+
279
+ - Enable in Next.js 15+: `reactCompiler: true` in `next.config.ts`.
280
+ - Enable in Vite: via `babel-plugin-react-compiler`.
281
+ - The Compiler does NOT fix logic errors (derived state in useEffect, props in state). It only optimizes re-renders.
282
+
283
+ ### Code Splitting & Lazy Loading
284
+
285
+ ```tsx
286
+ import { lazy, Suspense } from "react";
287
+
288
+ const AdminPanel = lazy(() => import("./features/admin/AdminPanel"));
289
+
290
+ function App() {
291
+ return (
292
+ <Suspense fallback={<PageSkeleton />}>
293
+ <AdminPanel />
294
+ </Suspense>
295
+ );
296
+ }
297
+ ```
298
+
299
+ - Split by **route** (automatic in Next.js and React Router).
300
+ - Split heavy components (charts, editors, maps) that aren't needed on initial load.
301
+ - Use `React.lazy` + `Suspense` for client-side code splitting.
302
+ - For Next.js: use `next/dynamic` with `{ ssr: false }` for client-only heavy components.
303
+
304
+ ### Virtualization for Large Lists
305
+
306
+ For lists with 1000+ items, use **TanStack Virtual** (formerly react-virtual) or `react-window`. Only renders visible items in the viewport.
307
+
308
+ ### Bundle Size Optimization
309
+
310
+ - Analyze with `npx vite-bundle-visualizer` or `@next/bundle-analyzer`.
311
+ - Tree-shake: use ES modules, avoid barrel files that import everything.
312
+ - Replace heavy libraries: `date-fns` over `moment`, `clsx` over `classnames`.
313
+ - Set target budget: <200KB JavaScript (compressed) for initial load.
314
+
315
+ ### Core Web Vitals Targets
316
+
317
+ | Metric | Good | Needs Improvement | Poor |
318
+ |---|---|---|---|
319
+ | **LCP** (Largest Contentful Paint) | < 2.5s | 2.5-4.0s | > 4.0s |
320
+ | **INP** (Interaction to Next Paint) | < 200ms | 200-500ms | > 500ms |
321
+ | **CLS** (Cumulative Layout Shift) | < 0.1 | 0.1-0.25 | > 0.25 |
322
+ | **FCP** (First Contentful Paint) | < 1.8s | 1.8-3.0s | > 3.0s |
323
+
324
+ Strategies: prioritize Server Components (zero JS), optimize images (`next/image`, AVIF/WebP), preload critical fonts, minimize layout shifts with explicit dimensions.
325
+
326
+ ---
327
+
328
+ ## Security Considerations
329
+
330
+ ### XSS Prevention
331
+
332
+ React auto-escapes JSX expressions by default. The primary XSS risk vectors are:
333
+
334
+ - **Rendering unsanitized HTML**: Always sanitize user-provided HTML with `DOMPurify` before injecting raw HTML content into the page.
335
+ - **URL injection**: Validate URLs before rendering in `href`/`src` -- reject `javascript:` protocol schemes.
336
+ - **DOM manipulation via refs**: Avoid setting raw HTML content through DOM references; let React manage the DOM.
337
+ - **Content Security Policy**: Use a strict CSP header to prevent inline script execution.
338
+
339
+ ### CSRF Protection
340
+
341
+ - Use anti-CSRF tokens for all state-changing requests (server actions handle this automatically in Next.js).
342
+ - Set `SameSite=Strict` or `SameSite=Lax` on cookies.
343
+ - Validate `Origin` and `Referer` headers on the server.
344
+
345
+ ### Authentication Patterns
346
+
347
+ | Solution | Type | Best For |
348
+ |---|---|---|
349
+ | **Auth.js v5** (NextAuth) | Open source, self-hosted | Full control, no vendor lock-in, custom DB |
350
+ | **Clerk** | Managed service | Fast setup (5 min), pre-built UI, MFA out of box |
351
+ | **Better Auth** | Open source, self-hosted | TypeScript-first, modern API, growing ecosystem |
352
+ | **Supabase Auth** | Managed (with DB) | Already using Supabase for backend |
353
+
354
+ Best practices:
355
+ - Store tokens in `httpOnly` cookies, not localStorage.
356
+ - Implement RBAC (role-based access control) on the server, not just the client.
357
+ - Use short-lived access tokens + refresh token rotation.
358
+
359
+ ### Environment Variables & Secrets
360
+
361
+ - Client-exposed vars: `NEXT_PUBLIC_*` (Next.js) or `VITE_*` (Vite). These are embedded in the bundle.
362
+ - Server-only secrets: no prefix. Access only in Server Components, API routes, server actions.
363
+ - Never commit `.env` files. Use `.env.example` as a template.
364
+ - In CI/CD: use platform secrets (Vercel Environment Variables, GitHub Secrets).
365
+
366
+ ---
367
+
368
+ ## Integration Patterns
369
+
370
+ ### API Integration
371
+
372
+ **TanStack Query v5** is the standard for server state:
373
+
374
+ ```tsx
375
+ // features/users/api/users.queries.ts
376
+ import { queryOptions, useSuspenseQuery } from "@tanstack/react-query";
377
+
378
+ export const usersQueryOptions = queryOptions({
379
+ queryKey: ["users"],
380
+ queryFn: () => fetch("/api/users").then((r) => r.json()),
381
+ staleTime: 5 * 60 * 1000, // 5 minutes
382
+ });
383
+
384
+ // features/users/components/UserList.tsx
385
+ export function UserList() {
386
+ const { data: users } = useSuspenseQuery(usersQueryOptions);
387
+ return <ul>{users.map((u) => <li key={u.id}>{u.name}</li>)}</ul>;
388
+ }
389
+ ```
390
+
391
+ For Next.js App Router: prefer **server-side data fetching** in Server Components with `fetch()` (automatic request deduplication and caching). Use TanStack Query only for client-side interactivity (polling, optimistic updates, infinite scroll).
392
+
393
+ **Server Actions** for mutations:
394
+ ```tsx
395
+ // app/actions/user.ts
396
+ "use server";
397
+ import { revalidatePath } from "next/cache";
398
+
399
+ export async function updateUser(formData: FormData) {
400
+ const name = formData.get("name") as string;
401
+ await db.user.update({ where: { id: userId }, data: { name } });
402
+ revalidatePath("/profile");
403
+ }
404
+ ```
405
+
406
+ ### Form Handling
407
+
408
+ **React Hook Form + Zod** is the dominant combination:
409
+
410
+ ```tsx
411
+ import { useForm } from "react-hook-form";
412
+ import { zodResolver } from "@hookform/resolvers/zod";
413
+ import { z } from "zod";
414
+
415
+ const schema = z.object({
416
+ email: z.string().email("Invalid email"),
417
+ password: z.string().min(8, "At least 8 characters"),
418
+ });
419
+
420
+ type FormData = z.infer<typeof schema>;
421
+
422
+ export function LoginForm() {
423
+ const { register, handleSubmit, formState: { errors } } = useForm<FormData>({
424
+ resolver: zodResolver(schema),
425
+ });
426
+
427
+ return (
428
+ <form onSubmit={handleSubmit((data) => loginAction(data))}>
429
+ <input {...register("email")} />
430
+ {errors.email && <span>{errors.email.message}</span>}
431
+ <input type="password" {...register("password")} />
432
+ {errors.password && <span>{errors.password.message}</span>}
433
+ <button type="submit">Log in</button>
434
+ </form>
435
+ );
436
+ }
437
+ ```
438
+
439
+ For server-first forms (Next.js): **Conform** integrates natively with server actions and provides progressive enhancement (forms work without JavaScript).
440
+
441
+ ### CMS & Headless Integration
442
+
443
+ Use headless CMS (Sanity, Contentful, Strapi) with:
444
+ - Server Components for fetching CMS data at the server level (no client JS).
445
+ - ISR or on-demand revalidation (`revalidateTag`) for content updates without full rebuilds.
446
+ - Draft mode / preview for content editors.
447
+
448
+ ### Real-Time Patterns
449
+
450
+ - **WebSockets**: use `socket.io-client` or native WebSocket API. Wrap in a custom hook, manage connection lifecycle.
451
+ - **Server-Sent Events (SSE)**: simpler than WebSockets for one-way server-to-client streams (notifications, live feeds).
452
+ - **TanStack Query `refetchInterval`**: polling as a simpler alternative for near-real-time needs.
453
+ - For Next.js: consider Vercel's `ai` SDK for streaming LLM responses via RSC.
454
+
455
+ ---
456
+
457
+ ## DevOps & Deployment
458
+
459
+ ### Build Tools
460
+
461
+ | Tool | Use Case | Notes |
462
+ |---|---|---|
463
+ | **Vite 6+** | SPAs, library development | Fast HMR, Rollup-based production builds |
464
+ | **Next.js 15+** | Full-stack apps | Turbopack (stable dev, beta prod in 15.5), built-in SSR/SSG |
465
+ | **React Router v7** (framework mode) | Full-stack, Shopify ecosystem | Vite-powered, progressive enhancement |
466
+
467
+ ### Docker Pattern (Multi-Stage Build)
468
+
469
+ ```dockerfile
470
+ # Stage 1: Build
471
+ FROM node:22-alpine AS builder
472
+ WORKDIR /app
473
+ COPY package*.json ./
474
+ RUN npm ci --ignore-scripts
475
+ COPY . .
476
+ RUN npm run build
477
+
478
+ # Stage 2: Serve
479
+ FROM nginx:stable-alpine
480
+ COPY --from=builder /app/dist /usr/share/nginx/html
481
+ COPY nginx.conf /etc/nginx/conf.d/default.conf
482
+ EXPOSE 80
483
+ CMD ["nginx", "-g", "daemon off;"]
484
+ ```
485
+
486
+ For Next.js: use the official `output: "standalone"` option in `next.config.ts` for a minimal Docker image without nginx.
487
+
488
+ ### CI/CD & Preview Deployments
489
+
490
+ - **Vercel / Netlify**: zero-config deployments with automatic preview URLs per PR.
491
+ - **GitHub Actions** baseline:
492
+ 1. `npm ci` -- install dependencies (cached).
493
+ 2. `npm run lint` -- ESLint + TypeScript check.
494
+ 3. `npm run test` -- Vitest unit/integration tests.
495
+ 4. `npm run build` -- verify production build succeeds.
496
+ 5. `npx playwright test` -- E2E tests (on preview deployment URL).
497
+ - Run Lighthouse CI in CI/CD to catch Core Web Vitals regressions.
498
+
499
+ ### Environment Configuration
500
+
501
+ - Use `.env.local` (gitignored) for local development.
502
+ - Platform-level secrets for staging/production (Vercel Environment Variables, AWS SSM, Doppler).
503
+ - Validate env vars at build time with `@t3-oss/env-nextjs` or Zod schema.
504
+
505
+ ### Monitoring
506
+
507
+ | Tool | Purpose |
508
+ |---|---|
509
+ | **Sentry** | Error tracking, performance monitoring, session replay |
510
+ | **LogRocket** | Session replay, state inspection |
511
+ | **Vercel Analytics** | Core Web Vitals, real user monitoring |
512
+ | **Checkly** | Synthetic monitoring (Playwright-based) |
513
+ | **Grafana / Datadog** | Infrastructure + application metrics |
514
+
515
+ Sentry integration: install `@sentry/nextjs` or `@sentry/react`, configure source maps upload in CI, set up release tracking.
516
+
517
+ ---
518
+
519
+ ## Decision Trees
520
+
521
+ ### 1. Which Meta-Framework?
522
+
523
+ ```
524
+ Need SSR, SSG, or SEO?
525
+ |
526
+ +-- Yes --> Do you need a full-stack framework?
527
+ | |
528
+ | +-- Yes --> Is your team already on Shopify/Remix?
529
+ | | |
530
+ | | +-- Yes --> React Router v7 (framework mode)
531
+ | | +-- No --> Next.js 15+ (default choice)
532
+ | |
533
+ | +-- No --> Static site? --> Astro (with React islands)
534
+ |
535
+ +-- No --> Building an SPA (dashboard, admin, internal tool)?
536
+ |
537
+ +-- Yes --> Need strong type-safe routing?
538
+ | |
539
+ | +-- Yes --> Vite + TanStack Router
540
+ | +-- No --> Vite + React Router v7 (library mode)
541
+ |
542
+ +-- No --> Evaluate if React is the right tool
543
+ ```
544
+
545
+ ### 2. Which State Management?
546
+
547
+ ```
548
+ What kind of state?
549
+ |
550
+ +-- Server data (API responses, DB queries)
551
+ | --> TanStack Query v5 (always)
552
+ |
553
+ +-- URL state (filters, pagination, search)
554
+ | --> useSearchParams / TanStack Router search params
555
+ |
556
+ +-- Form state (inputs, validation)
557
+ | --> React Hook Form + Zod
558
+ |
559
+ +-- Client global state (theme, sidebar, user prefs)
560
+ | |
561
+ | +-- Simple (2-3 values, low frequency)
562
+ | | --> React Context
563
+ | |
564
+ | +-- Medium complexity
565
+ | | --> Zustand (default choice)
566
+ | |
567
+ | +-- Complex derived/atomic state
568
+ | | --> Jotai
569
+ | |
570
+ | +-- Large team, existing Redux codebase
571
+ | --> Redux Toolkit (maintain, don't start new)
572
+ |
573
+ +-- Local component state
574
+ --> useState / useReducer
575
+ ```
576
+
577
+ ### 3. SSR vs CSR vs SSG?
578
+
579
+ ```
580
+ Does the page need SEO?
581
+ |
582
+ +-- No --> Is it highly interactive (real-time, SPA)?
583
+ | |
584
+ | +-- Yes --> CSR (Vite SPA)
585
+ | +-- No --> SSG (prerender at build time)
586
+ |
587
+ +-- Yes --> Does content change per request (user-specific)?
588
+ |
589
+ +-- Yes --> Does it change every request?
590
+ | |
591
+ | +-- Yes --> SSR (streaming with Suspense)
592
+ | +-- No --> ISR (revalidate on interval or on-demand)
593
+ |
594
+ +-- No --> Is content updated frequently?
595
+ |
596
+ +-- Yes --> ISR (revalidate every N seconds)
597
+ +-- No --> SSG (build-time generation)
598
+
599
+ Modern default: Use Server Components (Next.js App Router). Components are
600
+ server-rendered by default. Add "use client" only for interactive leaves.
601
+ Most apps combine multiple strategies per route using component-level decisions.
602
+ ```
603
+
604
+ ---
605
+
606
+ ## Code Examples
607
+
608
+ ### 1. Data Fetching with use() and Suspense (React 19)
609
+
610
+ ```tsx
611
+ // Server Component -- fetches data, no client JS
612
+ import { Suspense } from "react";
613
+
614
+ async function getUser(id: string) {
615
+ const res = await fetch(`https://api.example.com/users/${id}`);
616
+ if (!res.ok) throw new Error("Failed to fetch user");
617
+ return res.json();
618
+ }
619
+
620
+ export default async function UserPage({ params }: { params: { id: string } }) {
621
+ const userPromise = getUser(params.id);
622
+
623
+ return (
624
+ <Suspense fallback={<UserSkeleton />}>
625
+ <UserProfile userPromise={userPromise} />
626
+ </Suspense>
627
+ );
628
+ }
629
+
630
+ // Client Component -- reads the promise with use()
631
+ "use client";
632
+ import { use } from "react";
633
+
634
+ function UserProfile({ userPromise }: { userPromise: Promise<User> }) {
635
+ const user = use(userPromise); // suspends until resolved
636
+
637
+ return (
638
+ <div>
639
+ <h1>{user.name}</h1>
640
+ <p>{user.email}</p>
641
+ </div>
642
+ );
643
+ }
644
+ ```
645
+
646
+ ### 2. Form with useActionState and Server Action (React 19)
647
+
648
+ ```tsx
649
+ // app/actions/signup.ts
650
+ "use server";
651
+ import { z } from "zod";
652
+
653
+ const SignupSchema = z.object({
654
+ email: z.string().email(),
655
+ password: z.string().min(8),
656
+ });
657
+
658
+ export async function signup(prevState: any, formData: FormData) {
659
+ const result = SignupSchema.safeParse(Object.fromEntries(formData));
660
+ if (!result.success) {
661
+ return { error: result.error.flatten().fieldErrors };
662
+ }
663
+ await db.user.create({ data: result.data });
664
+ return { success: true };
665
+ }
666
+
667
+ // app/signup/page.tsx
668
+ "use client";
669
+ import { useActionState } from "react";
670
+ import { signup } from "../actions/signup";
671
+
672
+ export default function SignupPage() {
673
+ const [state, formAction, isPending] = useActionState(signup, null);
674
+
675
+ return (
676
+ <form action={formAction}>
677
+ <input name="email" type="email" required />
678
+ {state?.error?.email && <p>{state.error.email}</p>}
679
+
680
+ <input name="password" type="password" required />
681
+ {state?.error?.password && <p>{state.error.password}</p>}
682
+
683
+ <button type="submit" disabled={isPending}>
684
+ {isPending ? "Signing up..." : "Sign Up"}
685
+ </button>
686
+ {state?.success && <p>Account created.</p>}
687
+ </form>
688
+ );
689
+ }
690
+ ```
691
+
692
+ ### 3. Zustand Store with TanStack Query (Client State + Server State)
693
+
694
+ ```tsx
695
+ // stores/ui.store.ts
696
+ import { create } from "zustand";
697
+
698
+ interface UIStore {
699
+ sidebarOpen: boolean;
700
+ toggleSidebar: () => void;
701
+ }
702
+
703
+ export const useUIStore = create<UIStore>((set) => ({
704
+ sidebarOpen: true,
705
+ toggleSidebar: () => set((s) => ({ sidebarOpen: !s.sidebarOpen })),
706
+ }));
707
+
708
+ // features/projects/api/projects.queries.ts
709
+ import { queryOptions } from "@tanstack/react-query";
710
+
711
+ export const projectsQueryOptions = (teamId: string) =>
712
+ queryOptions({
713
+ queryKey: ["projects", teamId],
714
+ queryFn: () =>
715
+ fetch(`/api/teams/${teamId}/projects`).then((r) => r.json()),
716
+ staleTime: 10 * 60 * 1000,
717
+ });
718
+
719
+ // features/projects/components/ProjectList.tsx
720
+ "use client";
721
+ import { useSuspenseQuery } from "@tanstack/react-query";
722
+ import { projectsQueryOptions } from "../api/projects.queries";
723
+ import { useUIStore } from "@/stores/ui.store";
724
+
725
+ export function ProjectList({ teamId }: { teamId: string }) {
726
+ const { data: projects } = useSuspenseQuery(projectsQueryOptions(teamId));
727
+ const sidebarOpen = useUIStore((s) => s.sidebarOpen);
728
+
729
+ return (
730
+ <div className={sidebarOpen ? "ml-64" : "ml-0"}>
731
+ {projects.map((p) => (
732
+ <ProjectCard key={p.id} project={p} />
733
+ ))}
734
+ </div>
735
+ );
736
+ }
737
+ ```
738
+
739
+ ### 4. Type-Safe Routing with TanStack Router
740
+
741
+ ```tsx
742
+ // routes/users.$userId.tsx
743
+ import { createFileRoute } from "@tanstack/react-router";
744
+ import { z } from "zod";
745
+
746
+ const userSearchSchema = z.object({
747
+ tab: z.enum(["profile", "settings", "activity"]).optional().default("profile"),
748
+ page: z.number().optional().default(1),
749
+ });
750
+
751
+ export const Route = createFileRoute("/users/$userId")({
752
+ validateSearch: userSearchSchema,
753
+ loader: ({ params }) => fetchUser(params.userId), // fully typed
754
+ component: UserPage,
755
+ });
756
+
757
+ function UserPage() {
758
+ const { userId } = Route.useParams(); // typed: string
759
+ const { tab, page } = Route.useSearch(); // typed: { tab, page }
760
+ const user = Route.useLoaderData(); // typed: User
761
+
762
+ return <UserDetail user={user} activeTab={tab} page={page} />;
763
+ }
764
+ ```
765
+
766
+ ### 5. Error Boundary with Recovery
767
+
768
+ ```tsx
769
+ "use client";
770
+ import { ErrorBoundary } from "react-error-boundary";
771
+ import { useQueryClient } from "@tanstack/react-query";
772
+
773
+ function ErrorFallback({ error, resetErrorBoundary }: {
774
+ error: Error;
775
+ resetErrorBoundary: () => void;
776
+ }) {
777
+ return (
778
+ <div role="alert">
779
+ <h2>Something went wrong</h2>
780
+ <pre>{error.message}</pre>
781
+ <button onClick={resetErrorBoundary}>Try again</button>
782
+ </div>
783
+ );
784
+ }
785
+
786
+ export function DashboardErrorBoundary({
787
+ children,
788
+ }: {
789
+ children: React.ReactNode;
790
+ }) {
791
+ const queryClient = useQueryClient();
792
+
793
+ return (
794
+ <ErrorBoundary
795
+ FallbackComponent={ErrorFallback}
796
+ onReset={() => {
797
+ queryClient.invalidateQueries({ queryKey: ["dashboard"] });
798
+ }}
799
+ >
800
+ {children}
801
+ </ErrorBoundary>
802
+ );
803
+ }
804
+ ```
805
+
806
+ ---
807
+
808
+ *Researched: 2026-03-07 | Sources: [React v19 Blog](https://react.dev/blog/2024/12/05/react-19), [React 19.2 Release](https://react.dev/blog/2025/10/01/react-19-2), [React Folder Structure -- Robin Wieruch](https://www.robinwieruch.de/react-folder-structure/), [React State Management 2025 -- developerway.com](https://www.developerway.com/posts/react-state-management-2025), [React Stack Patterns 2026 -- patterns.dev](https://www.patterns.dev/react/react-2026/), [TanStack Router vs React Router -- ekino](https://medium.com/ekino-france/tanstack-router-vs-react-router-v7-32dddc4fcd58), [Vite vs Next.js 2026 -- designrevision.com](https://designrevision.com/blog/vite-vs-nextjs), [Next.js vs Remix 2025 -- strapi.io](https://strapi.io/blog/next-js-vs-remix-2025-developer-framework-comparison-guide), [React Security Best Practices -- Corgea](https://corgea.com/Learn/react-security-best-practices-2025), [React Security 2026 -- glorywebs.com](https://www.glorywebs.com/blog/react-security-practices), [Testing in 2026 -- nucamp.co](https://www.nucamp.co/blog/testing-in-2026-jest-react-testing-library-and-full-stack-testing-strategies), [React Performance Best Practices -- alexbobes.com](https://alexbobes.com/programming/best-practices-for-optimizing-your-react-application/), [React Compiler 2025 -- Medium](https://medium.com/@ankushchavan0411/react-compiler-in-2025-how-it-will-change-performance-optimization-9bc08b8c05e5), [15 React Anti-Patterns -- jsdev.space](https://jsdev.space/react-anti-patterns-2025/), [CSR vs SSR vs SSG vs ISR 2026 -- hashbyt.com](https://hashbyt.com/blog/csr-vs-ssr-vs-ssg-vs-isr), [NextAuth vs Clerk vs Auth.js -- Medium](https://chhimpashubham.medium.com/nextauth-js-vs-clerk-vs-auth-js-which-is-best-for-your-next-js-app-in-2025-fc715c2ccbfd), [React Hook Form + Zod -- freecodecamp.org](https://www.freecodecamp.org/news/react-form-validation-zod-react-hook-form/), [Docker Multi-Stage React Build -- docker.com](https://www.docker.com/blog/how-to-dockerize-react-app/), [Sentry Vercel Integration](https://docs.sentry.io/organization/integrations/deployment/vercel/)*