@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,782 @@
1
+ # Flutter — Expertise Module
2
+
3
+ > A Flutter specialist builds cross-platform mobile, web, and desktop applications using Dart and the Flutter SDK (currently Flutter 3.41 / Dart 3.11). The scope covers UI composition, state management, platform integration, performance tuning, testing, CI/CD, and deployment to iOS App Store, Google Play, web, and desktop targets.
4
+
5
+ ---
6
+
7
+ ## Core Patterns & Conventions
8
+
9
+ ### Project Structure
10
+
11
+ Use **feature-first** organization for apps beyond a single feature. Each feature owns its UI, state, data, and domain logic. Shared code lives in `core/` or `shared/`.
12
+
13
+ ```
14
+ lib/
15
+ core/ # shared utilities, theme, constants, extensions
16
+ network/ # dio client, interceptors, api_endpoints
17
+ theme/ # app_theme.dart, colors, typography
18
+ utils/ # formatters, validators, helpers
19
+ error/ # failure classes, error handler
20
+ features/
21
+ auth/
22
+ data/ # repositories_impl, data_sources, models (DTOs)
23
+ domain/ # entities, repositories (abstract), use_cases
24
+ presentation/ # screens, widgets, controllers/providers
25
+ home/
26
+ data/
27
+ domain/
28
+ presentation/
29
+ app.dart # MaterialApp / GoRouter setup
30
+ main.dart # entry point, dependency init
31
+ bootstrap.dart # environment config, provider scope
32
+ test/
33
+ features/
34
+ auth/
35
+ unit/
36
+ widget/
37
+ integration/
38
+ goldens/
39
+ ```
40
+
41
+ ### Naming Conventions (Effective Dart)
42
+
43
+ | Element | Convention | Example |
44
+ |------------------|--------------------|----------------------------------|
45
+ | Files/folders | `snake_case` | `user_profile_screen.dart` |
46
+ | Classes/enums | `UpperCamelCase` | `UserProfileScreen` |
47
+ | Variables/funcs | `lowerCamelCase` | `fetchUserData()` |
48
+ | Constants | `lowerCamelCase` | `const defaultPadding = 16.0` |
49
+ | Private members | `_prefixed` | `_internalState` |
50
+ | Boolean getters | `is/has/can` prefix| `isLoading`, `hasError` |
51
+
52
+ File naming: suffix with purpose — `*_screen.dart`, `*_widget.dart`, `*_repository.dart`, `*_provider.dart`, `*_model.dart`, `*_test.dart`.
53
+
54
+ ### Architecture Patterns
55
+
56
+ **MVVM + Clean Architecture** (Flutter team recommended as of 2025):
57
+
58
+ - **View (Widget):** Renders UI, delegates events to ViewModel/Controller. No business logic.
59
+ - **ViewModel / Controller:** Holds UI state, calls use cases, exposes state streams/notifiers.
60
+ - **Repository (abstract in domain, impl in data):** Single source of truth for data operations.
61
+ - **Data Sources:** Remote (API) and local (DB/cache) implementations.
62
+
63
+ The official Flutter architecture guide (`docs.flutter.dev/app-architecture`) endorses layered architecture with unidirectional data flow (UDF): state flows down from data layer through logic to UI; events flow up from UI through logic to data.
64
+
65
+ ### State Management
66
+
67
+ **Riverpod 3.x** (released September 2025) is the current recommended choice for most apps:
68
+
69
+ - Use `@riverpod` annotation with code generation (`riverpod_generator` + `build_runner`).
70
+ - Prefer `Notifier` / `AsyncNotifier` over legacy `StateNotifier`.
71
+ - Use `ref.watch()` in build methods, `ref.read()` in callbacks only.
72
+ - Use `ref.select()` to minimize rebuilds by watching specific fields.
73
+ - Keep providers small and focused — one responsibility per provider.
74
+
75
+ **BLoC 9.x** remains strong for enterprise apps requiring strict event-driven patterns with full traceability. Prefer `Cubit` for simpler cases, full `Bloc` when you need event logging and replay.
76
+
77
+ **Provider** is acceptable for small apps (<10k LOC) but is effectively superseded by Riverpod for new projects.
78
+
79
+ ### Routing & Navigation
80
+
81
+ **GoRouter** (official Flutter package) is the standard for declarative routing:
82
+
83
+ - Define routes declaratively with `GoRoute` and `ShellRoute`.
84
+ - Use `StatefulShellRoute` for persistent bottom navigation with maintained state.
85
+ - Deep linking works automatically — GoRouter parses URIs to corresponding routes.
86
+ - Use redirect guards for auth flows.
87
+ - Typed routes via `go_router_builder` for compile-time safety.
88
+
89
+ **AutoRoute** is preferred for large apps with complex nested flows and route guards when you want generated route classes and strong typing out of the box.
90
+
91
+ ### Data Flow
92
+
93
+ Follow unidirectional data flow (UDF):
94
+
95
+ 1. UI dispatches **events** (user taps, lifecycle).
96
+ 2. Controller/ViewModel processes events, calls **use cases**.
97
+ 3. Use cases interact with **repositories**.
98
+ 4. Repositories coordinate **data sources** (remote + local).
99
+ 5. State updates flow back to UI through reactive streams/notifiers.
100
+
101
+ ### Error Handling
102
+
103
+ - Define a sealed `Failure` class hierarchy (or use `freezed` unions) for typed errors.
104
+ - Use the `Result` pattern (or `Either` from `fpdart`) to return success/failure without exceptions in business logic.
105
+ - Reserve `try/catch` for infrastructure boundaries (network, platform channels).
106
+ - Centralize crash reporting with `FlutterError.onError` and `PlatformDispatcher.instance.onError` for uncaught async errors.
107
+ - Never silently swallow errors with empty `catch` blocks.
108
+
109
+ ### Logging & Observability
110
+
111
+ - Use the `logger` package for structured, leveled console output (debug/info/warning/error).
112
+ - In production, route logs through Sentry SDK 9.x or Firebase Crashlytics.
113
+ - Sentry's Flutter SDK correlates logs with crashes and performance traces automatically.
114
+ - Add context to logs: screen name, user ID, request ID — avoid bare `print()` statements.
115
+ - Use `BlocObserver` (if using BLoC) or Riverpod's `ProviderObserver` to log state transitions.
116
+
117
+ ---
118
+
119
+ ## Anti-Patterns & Pitfalls
120
+
121
+ ### 1. Overusing `setState()` for Everything
122
+ **Why it's a problem:** `setState()` rebuilds the entire widget subtree. In complex screens, this causes unnecessary rebuilds, jank, and makes state hard to share across widgets. **Instead:** Use Riverpod, BLoC, or another state management solution. Reserve `setState()` for truly local, ephemeral UI state (e.g., a toggle animation).
123
+
124
+ ### 2. God Widgets (Monolithic Build Methods)
125
+ **Why it's a problem:** A single widget with 300+ lines in `build()` is untestable, hard to read, and forces full rebuilds for any state change. **Instead:** Extract sub-widgets into separate classes. Each widget should have a single responsibility. Composition over inheritance.
126
+
127
+ ### 3. Not Disposing Controllers and Subscriptions
128
+ **Why it's a problem:** Undisposed `TextEditingController`, `AnimationController`, `StreamSubscription`, and `ScrollController` cause memory leaks that accumulate over navigation, leading to laggy UX and eventual OOM crashes. **Instead:** Always override `dispose()` in `State` classes. Use `ref.onDispose()` in Riverpod providers.
129
+
130
+ ### 4. Hardcoded Dimensions and Ignoring Responsiveness
131
+ **Why it's a problem:** UIs break on tablets, foldables, landscape mode, and varying text scale factors. **Instead:** Use `MediaQuery`, `LayoutBuilder`, `Flex` widgets, and relative sizing. Test on multiple screen sizes. Consider packages like `flutter_screenutil` or `responsive_framework`.
132
+
133
+ ### 5. Business Logic in Widgets
134
+ **Why it's a problem:** Mixing API calls, data transformation, and validation into widget code makes it untestable and tightly coupled. **Instead:** Move logic to controllers/view models/use cases. Widgets should only render state and dispatch events.
135
+
136
+ ### 6. Ignoring `const` Constructors
137
+ **Why it's a problem:** Without `const`, Flutter recreates widget instances on every rebuild even when nothing changed, wasting CPU cycles. **Instead:** Mark widgets and their constructors `const` whenever possible. Use `dart fix --apply` to auto-add missing `const`.
138
+
139
+ ### 7. Catching Errors Silently
140
+ **Why it's a problem:** `catch (e) {}` or `catch (e) { print(e); }` hides bugs in development and causes silent failures in production that are impossible to diagnose. **Instead:** Log errors with full stack traces to Sentry/Crashlytics. Use typed catches. Surface user-facing errors via snackbars or error screens.
141
+
142
+ ### 8. Over-Relying on Third-Party Packages
143
+ **Why it's a problem:** Every package is a dependency risk — abandoned packages, version conflicts, bloated app size. Using a package for trivial tasks (e.g., a package just for padding) adds unnecessary coupling. **Instead:** Evaluate necessity before adding. Check pub.dev scores, maintenance status, and last update date. Write simple utilities yourself.
144
+
145
+ ### 9. Not Using Keys Correctly
146
+ **Why it's a problem:** Without proper keys, Flutter's diffing algorithm cannot distinguish list items, causing incorrect state preservation during reorders, insertions, or deletions. **Instead:** Use `ValueKey` or `ObjectKey` on list items. Use `UniqueKey` only when you want to force recreation. Never use `Key(index.toString())` on reorderable lists.
147
+
148
+ ### 10. Blocking the UI Thread with Heavy Computation
149
+ **Why it's a problem:** Dart is single-threaded. JSON parsing of large payloads, image processing, or complex calculations on the main isolate cause dropped frames (jank). **Instead:** Use `compute()` or `Isolate.run()` for heavy work. For ongoing background work, use long-lived isolates.
150
+
151
+ ### 11. Nesting `FutureBuilder` / `StreamBuilder` Deeply
152
+ **Why it's a problem:** Deeply nested builders become unreadable, rebuild excessively, and make error/loading state handling inconsistent. **Instead:** Use Riverpod `AsyncNotifier` or BLoC to manage async state. Consume final state in a single widget.
153
+
154
+ ### 12. Ignoring Platform Differences
155
+ **Why it's a problem:** iOS and Android have different UX conventions (back gestures, scroll physics, haptics). Treating them identically frustrates users on both platforms. **Instead:** Use `Platform.isIOS` or adaptive widgets (`Switch.adaptive`, `Cupertino` widgets) where platform fidelity matters.
156
+
157
+ ### 13. Storing Sensitive Data in SharedPreferences
158
+ **Why it's a problem:** SharedPreferences is unencrypted plain text on both platforms. Tokens, passwords, and API keys are trivially extractable. **Instead:** Use `flutter_secure_storage` (Keychain on iOS, EncryptedSharedPreferences on Android).
159
+
160
+ ### 14. Not Handling Loading and Error States in Async UI
161
+ **Why it's a problem:** Showing nothing during loading or crashing on error creates a broken user experience. **Instead:** Always handle three states: loading, data, error. Use Riverpod's `.when()` or pattern matching on `AsyncValue`. Show shimmer/skeleton loaders, not just spinners.
162
+
163
+ ---
164
+
165
+ ## Testing Strategy
166
+
167
+ ### Testing Pyramid
168
+
169
+ | Layer | Speed | Quantity | Purpose |
170
+ |--------------------|---------|----------|----------------------------------------------|
171
+ | Unit tests | ~ms | Many | Business logic, use cases, repositories |
172
+ | Widget tests | ~100ms | Moderate | UI rendering, interaction, state transitions |
173
+ | Golden tests | ~200ms | Selective| Visual regression detection |
174
+ | Integration tests | ~seconds| Few | Full user flows on real/emulated devices |
175
+
176
+ ### Frameworks & Tools
177
+
178
+ - **flutter_test** — built-in, used for unit + widget tests.
179
+ - **mocktail** — preferred mocking library (no codegen, simpler than mockito).
180
+ - **bloc_test** — for testing BLoC/Cubit state transitions.
181
+ - **alchemist** — current standard for golden tests (replaced `golden_toolkit` which is discontinued).
182
+ - **patrol** — native-level integration testing with access to system dialogs, permissions, notifications.
183
+ - **integration_test** — official package for on-device integration tests.
184
+
185
+ ### What to Test
186
+
187
+ **Always test:**
188
+ - Business logic and use cases (unit).
189
+ - State management controllers/notifiers (unit).
190
+ - Repository data transformations (unit).
191
+ - Complex widget interactions — forms, lists, conditional rendering (widget).
192
+ - Critical user flows — login, checkout, onboarding (integration).
193
+ - Visually complex or branded components (golden).
194
+
195
+ **Skip or deprioritize:**
196
+ - Framework-provided widget behavior (e.g., testing that `Text` renders text).
197
+ - Trivial getters/setters.
198
+ - Third-party package internals.
199
+ - Platform-level rendering (covered by Flutter engine tests).
200
+
201
+ ### Mocking Patterns
202
+
203
+ ```dart
204
+ // Using mocktail
205
+ class MockUserRepository extends Mock implements UserRepository {}
206
+
207
+ void main() {
208
+ late MockUserRepository mockRepo;
209
+ late GetUserUseCase useCase;
210
+
211
+ setUp(() {
212
+ mockRepo = MockUserRepository();
213
+ useCase = GetUserUseCase(mockRepo);
214
+ });
215
+
216
+ test('returns user on success', () async {
217
+ when(() => mockRepo.getUser('123'))
218
+ .thenAnswer((_) async => User(id: '123', name: 'Ali'));
219
+
220
+ final result = await useCase.execute('123');
221
+
222
+ expect(result, isA<User>());
223
+ verify(() => mockRepo.getUser('123')).called(1);
224
+ });
225
+ }
226
+ ```
227
+
228
+ ### Test File Organization
229
+
230
+ Mirror the `lib/` structure under `test/`:
231
+ ```
232
+ test/
233
+ features/
234
+ auth/
235
+ data/
236
+ repositories/
237
+ auth_repository_impl_test.dart
238
+ domain/
239
+ use_cases/
240
+ login_use_case_test.dart
241
+ presentation/
242
+ screens/
243
+ login_screen_test.dart
244
+ controllers/
245
+ login_controller_test.dart
246
+ core/
247
+ network/
248
+ api_client_test.dart
249
+ integration/
250
+ auth_flow_test.dart
251
+ goldens/
252
+ login_screen_golden_test.dart
253
+ helpers/ # shared test utilities, fakes, fixtures
254
+ test_app.dart
255
+ mock_providers.dart
256
+ ```
257
+
258
+ ### Coverage Expectations
259
+
260
+ - **Core business logic:** 90%+ (use cases, repositories, controllers).
261
+ - **UI widgets:** 70%+ for interactive/complex widgets.
262
+ - **Overall project:** 80%+ is a reasonable target.
263
+ - Run coverage: `flutter test --coverage && genhtml coverage/lcov.info -o coverage/html`.
264
+ - Enforce in CI with `--min-coverage` thresholds via `very_good_cli` or custom scripts.
265
+
266
+ ---
267
+
268
+ ## Performance
269
+
270
+ ### Common Bottlenecks
271
+
272
+ 1. **Excessive rebuilds:** Widgets rebuilding when their inputs haven't changed. Use `const`, `select()`, and granular state splitting.
273
+ 2. **Shader compilation jank (legacy):** On Skia, first-time shader compilation caused frame drops. Impeller (default since Flutter 3.27 on iOS/Android API 29+) precompiles all shaders at engine build time, eliminating this class of jank entirely.
274
+ 3. **Large list rendering:** Using `Column` + `SingleChildScrollView` instead of `ListView.builder` materializes all children at once. Always use `ListView.builder` or `SliverList` for dynamic lists.
275
+ 4. **Unoptimized images:** Loading full-resolution images without caching or resizing. Use `cached_network_image`, specify `cacheWidth`/`cacheHeight`, and serve appropriately sized assets.
276
+ 5. **Main isolate heavy computation:** JSON parsing, encryption, or image manipulation on the UI thread causes jank.
277
+
278
+ ### Profiling Tools
279
+
280
+ - **Flutter DevTools Performance view:** Timeline, frame rendering chart, CPU profiler, memory profiler.
281
+ - **Performance overlay:** `MaterialApp(showPerformanceOverlay: true)` — shows GPU and UI thread frame times.
282
+ - **Widget rebuild tracker:** DevTools "Widget Rebuild Stats" to identify over-rebuilding widgets.
283
+ - **`dart:developer` Timeline:** Custom trace events for measuring specific code paths.
284
+
285
+ ### Optimization Patterns
286
+
287
+ - **`const` widgets:** Mark stateless widgets and their constructors `const` to enable canonical instance reuse.
288
+ - **`RepaintBoundary`:** Wrap expensive-to-paint subtrees to isolate their repaint from the rest of the tree.
289
+ - **`AutomaticKeepAliveClientMixin`:** Preserve state in `TabBarView` / `PageView` children without rebuilding.
290
+ - **`Isolate.run()` / `compute()`:** Offload CPU-heavy work (JSON decode >1MB, image processing) to background isolates.
291
+ - **Lazy loading:** Use `ListView.builder`, paginated APIs, and deferred widget initialization.
292
+ - **Image optimization:** Use WebP format, specify decode size, leverage `precacheImage()` for critical images.
293
+
294
+ ### Metrics & Thresholds
295
+
296
+ | Metric | Target |
297
+ |-------------------------|----------------|
298
+ | Frame render time | <16ms (60fps) or <8ms (120fps) |
299
+ | App startup (cold) | <2s to first meaningful paint |
300
+ | App size (APK) | <30MB base (varies by assets) |
301
+ | Memory (idle) | <150MB |
302
+ | Jank rate | <1% dropped frames |
303
+
304
+ ---
305
+
306
+ ## Security
307
+
308
+ ### Secure Storage
309
+
310
+ - **Never** store tokens, passwords, or secrets in `SharedPreferences` (unencrypted).
311
+ - Use `flutter_secure_storage` — backed by Keychain (iOS) and EncryptedSharedPreferences/AES (Android).
312
+ - For larger encrypted datasets, use `sqflite` with SQLCipher encryption via `sqflite_sqlcipher`.
313
+
314
+ ### Certificate Pinning
315
+
316
+ - Use `dio` with a custom `SecurityContext` or the `dio_http2_adapter` for pinning.
317
+ - Alternatively, `flutter_ssl_pinning` or `http_certificate_pinning` packages verify server certificates against embedded public keys.
318
+ - Always pin to the leaf or intermediate certificate, not the root CA.
319
+ - Implement pin rotation strategy — ship backup pins and update OTA.
320
+
321
+ ### Code Obfuscation
322
+
323
+ Build release binaries with obfuscation:
324
+ ```bash
325
+ flutter build apk --release --obfuscate --split-debug-info=build/debug-info
326
+ flutter build ipa --release --obfuscate --split-debug-info=build/debug-info
327
+ ```
328
+ Upload `debug-info/` symbols to Sentry/Crashlytics for deobfuscated crash reports.
329
+
330
+ ### Input Validation
331
+
332
+ - Validate all user input on the client AND server. Client-side validation is UX, not security.
333
+ - Sanitize inputs before rendering in `WebView` to prevent XSS.
334
+ - Use parameterized queries in local databases — never concatenate user input into SQL.
335
+
336
+ ### API Key Management
337
+
338
+ - Never hardcode API keys in Dart source — they are trivially extractable from APK/IPA.
339
+ - Use `--dart-define` or `--dart-define-from-file` to inject secrets at build time.
340
+ - For maximum security, proxy sensitive API calls through your backend.
341
+ - Use `.env` files with `envied` package (code-generated, obfuscated access) rather than `flutter_dotenv` (plain text in assets).
342
+
343
+ ### Additional Security Measures
344
+
345
+ - Enable **ProGuard/R8** on Android release builds for additional code shrinking and obfuscation.
346
+ - Implement **root/jailbreak detection** with `flutter_jailbreak_detection` for sensitive apps.
347
+ - Use **biometric authentication** via `local_auth` for sensitive operations.
348
+ - Implement **app attestation** (DeviceCheck on iOS, SafetyNet/Play Integrity on Android).
349
+
350
+ ---
351
+
352
+ ## Integration Patterns
353
+
354
+ ### REST API Integration
355
+
356
+ **Dio** is the standard HTTP client for Flutter:
357
+ - Configure base URL, timeouts, and interceptors (auth token injection, retry, logging) centrally.
358
+ - Use `retrofit` or `chopper` for type-safe, generated API clients from annotated abstract classes.
359
+ - Implement request/response interceptors for token refresh, error mapping, and analytics.
360
+ - Use `freezed` + `json_serializable` for immutable, generated data models (DTOs).
361
+
362
+ ### GraphQL
363
+
364
+ - **graphql_flutter** or **ferry** for type-safe GraphQL with code generation.
365
+ - Use `gql_build` for generating typed query/mutation classes from `.graphql` files.
366
+ - Leverage normalized caching for offline-first patterns.
367
+
368
+ ### gRPC
369
+
370
+ - Use `grpc` package with Protocol Buffers.
371
+ - Generate Dart client stubs from `.proto` files via `protoc` with `protoc_plugin`.
372
+ - Ideal for real-time bidirectional streaming and microservice communication.
373
+ - 2-10x faster serialization than JSON over REST.
374
+
375
+ ### Platform Channels
376
+
377
+ - Use **MethodChannel** for async Dart-to-native calls (e.g., accessing native SDKs).
378
+ - Use **EventChannel** for streaming native events to Dart (e.g., sensor data, Bluetooth).
379
+ - Use **BasicMessageChannel** for custom codecs.
380
+ - In Flutter 3.x, prefer **Pigeon** for type-safe, generated platform channel code — eliminates manual serialization.
381
+
382
+ ### FFI (Foreign Function Interface)
383
+
384
+ - `dart:ffi` for calling C/C++ libraries directly — no platform channel overhead.
385
+ - Use `ffigen` to auto-generate Dart bindings from C headers.
386
+ - Suitable for compute-heavy native libraries (image processing, crypto, ML inference).
387
+
388
+ ### Local Databases
389
+
390
+ | Database | Type | Best For | Web Support |
391
+ |-------------|------------|-----------------------------------|-------------|
392
+ | **Drift** | SQL (SQLite)| Relational data, complex queries, migrations | Yes |
393
+ | **Isar** | NoSQL | High-speed indexed queries, large datasets | Yes |
394
+ | **Hive** | Key-Value | Simple settings, small caches | Yes |
395
+ | **ObjectBox**| NoSQL | Object-oriented storage, edge sync | No |
396
+ | **sqflite** | SQL | Direct SQLite access, legacy projects | No |
397
+
398
+ ### Firebase Integration
399
+
400
+ - Use `firebase_core` + specific packages (`cloud_firestore`, `firebase_auth`, `firebase_storage`).
401
+ - Initialize with `Firebase.initializeApp()` before `runApp()`.
402
+ - Use `FlutterFire CLI` (`flutterfire configure`) to generate platform configs automatically.
403
+ - Prefer Firestore's offline persistence for offline-first apps.
404
+ - Use Firebase Remote Config for feature flags and A/B testing.
405
+
406
+ ---
407
+
408
+ ## DevOps & Deployment
409
+
410
+ ### Build Flavors / Environments
411
+
412
+ Define separate environments (dev, staging, production) using Dart defines:
413
+
414
+ ```bash
415
+ # Development
416
+ flutter run --dart-define-from-file=config/dev.json
417
+
418
+ # Production
419
+ flutter build apk --release --dart-define-from-file=config/prod.json
420
+ ```
421
+
422
+ On Android, configure `productFlavors` in `android/app/build.gradle`. On iOS, use Xcode schemes and xcconfig files. Use `flutter_flavorizr` to scaffold multi-flavor setup automatically.
423
+
424
+ ### CI/CD Pipelines
425
+
426
+ **GitHub Actions** (most common):
427
+ - Workflow: checkout -> setup Flutter -> `flutter pub get` -> `flutter analyze` -> `flutter test --coverage` -> `flutter build` -> deploy.
428
+ - Use `subosito/flutter-action` for Flutter setup.
429
+ - Cache `pub-cache` and build artifacts for faster runs.
430
+ - Separate workflows for PR validation vs. release builds.
431
+
432
+ **Codemagic** (Flutter-native CI/CD):
433
+ - Preconfigured Flutter workflows with automatic code signing.
434
+ - Built-in distribution to App Store Connect and Google Play.
435
+ - Supports `codemagic.yaml` for pipeline-as-code.
436
+
437
+ **Fastlane** (release automation):
438
+ - `fastlane match` for iOS certificate management.
439
+ - `fastlane deliver` / `fastlane supply` for store uploads.
440
+ - Integrates with both GitHub Actions and Codemagic.
441
+
442
+ ### App Signing
443
+
444
+ - **Android:** Generate keystore, configure `key.properties`, reference in `build.gradle`. Never commit keystores or signing credentials to version control.
445
+ - **iOS:** Use automatic signing in Xcode or `fastlane match` for team-shared certificates. Manage provisioning profiles via Apple Developer portal or Codemagic.
446
+
447
+ ### Environment Configuration
448
+
449
+ ```
450
+ config/
451
+ dev.json # {"API_URL": "https://dev.api.example.com", "LOG_LEVEL": "debug"}
452
+ staging.json
453
+ prod.json
454
+ ```
455
+
456
+ Access in code via `const apiUrl = String.fromEnvironment('API_URL')`.
457
+
458
+ ### Store Deployment
459
+
460
+ - **Android:** Generate signed AAB (not APK) for Play Store. Use `flutter build appbundle --release`.
461
+ - **iOS:** Build IPA via `flutter build ipa --release --export-options-plist=ExportOptions.plist`. Upload via Xcode, Transporter, or `fastlane deliver`.
462
+
463
+ ### Monitoring
464
+
465
+ - **Crashlytics:** `firebase_crashlytics` — real-time crash reporting, automatic breadcrumbs, custom keys.
466
+ - **Sentry SDK 9.x:** Session replay (GA for mobile), correlated logs + traces, feature flag context, performance monitoring. Preferred for non-Firebase stacks.
467
+ - **Firebase Performance Monitoring:** Network request timing, custom traces, screen rendering metrics.
468
+ - Configure `FlutterError.onError` and `PlatformDispatcher.instance.onError` to route all uncaught errors to your monitoring platform.
469
+
470
+ ---
471
+
472
+ ## Decision Trees
473
+
474
+ ### Which State Management?
475
+
476
+ ```
477
+ START: How large/complex is the app?
478
+ |
479
+ +-- Small app (<10k LOC, 1-3 devs, simple state)
480
+ | --> Provider or setState + InheritedWidget
481
+ |
482
+ +-- Medium app (10k-100k LOC, 2-6 devs)
483
+ | |
484
+ | +-- Team prefers reactive/declarative?
485
+ | | --> Riverpod 3.x (recommended default)
486
+ | |
487
+ | +-- Team has BLoC experience / needs strict event tracing?
488
+ | --> BLoC/Cubit
489
+ |
490
+ +-- Large enterprise app (100k+ LOC, 6+ devs, strict audit needs)
491
+ |
492
+ +-- Need event sourcing / full state replay / devtools tracing?
493
+ | --> BLoC (events provide full audit trail)
494
+ |
495
+ +-- Need modularity / code generation / testability?
496
+ --> Riverpod 3.x with generated providers
497
+ ```
498
+
499
+ ### Which Navigation Approach?
500
+
501
+ ```
502
+ START: What type of app?
503
+ |
504
+ +-- Simple app (5-10 screens, no deep linking needed)
505
+ | --> Navigator 2.0 with GoRouter
506
+ |
507
+ +-- Web app or PWA (URL-based routing critical)
508
+ | --> GoRouter (official, deep link support built-in)
509
+ |
510
+ +-- Large app with complex nested navigation
511
+ | |
512
+ | +-- Want generated route classes + strong typing?
513
+ | | --> AutoRoute
514
+ | |
515
+ | +-- Want official Flutter support + simplicity?
516
+ | --> GoRouter with StatefulShellRoute
517
+ |
518
+ +-- App with persistent bottom nav + independent stacks
519
+ --> GoRouter + StatefulShellRoute (maintains per-tab state)
520
+ ```
521
+
522
+ ### Which Local Storage Solution?
523
+
524
+ ```
525
+ START: What kind of data?
526
+ |
527
+ +-- Simple key-value (settings, flags, preferences)
528
+ | |
529
+ | +-- Sensitive data (tokens, credentials)?
530
+ | | --> flutter_secure_storage
531
+ | |
532
+ | +-- Non-sensitive data?
533
+ | --> SharedPreferences (trivial) or Hive (fast, typed)
534
+ |
535
+ +-- Structured / relational data
536
+ | |
537
+ | +-- Need complex queries, joins, migrations?
538
+ | | --> Drift (compile-time safe SQL, reactive)
539
+ | |
540
+ | +-- Need maximum read/write speed on large datasets?
541
+ | --> Isar (NoSQL, indexed queries, ~10x faster than Hive)
542
+ |
543
+ +-- Object-oriented data with sync requirements
544
+ | --> ObjectBox (built-in data sync, no web support)
545
+ |
546
+ +-- Web support required?
547
+ --> Drift or Isar or Hive (all support web)
548
+ ```
549
+
550
+ ---
551
+
552
+ ## Code Examples
553
+
554
+ ### 1. Riverpod AsyncNotifier with Code Generation
555
+
556
+ The modern, idiomatic way to manage async state in Riverpod 3.x:
557
+
558
+ ```dart
559
+ // user_controller.dart
560
+ import 'package:riverpod_annotation/riverpod_annotation.dart';
561
+
562
+ part 'user_controller.g.dart';
563
+
564
+ @riverpod
565
+ class UserController extends _$UserController {
566
+ @override
567
+ Future<User> build(String userId) async {
568
+ // Automatically handles loading/error/data states
569
+ final repo = ref.watch(userRepositoryProvider);
570
+ return repo.getUser(userId);
571
+ }
572
+
573
+ Future<void> updateName(String newName) async {
574
+ final repo = ref.read(userRepositoryProvider);
575
+ state = const AsyncLoading();
576
+ state = await AsyncValue.guard(
577
+ () => repo.updateUser(state.requireValue.copyWith(name: newName)),
578
+ );
579
+ }
580
+ }
581
+
582
+ // In the widget — pattern matching on AsyncValue
583
+ class UserScreen extends ConsumerWidget {
584
+ const UserScreen({required this.userId, super.key});
585
+ final String userId;
586
+
587
+ @override
588
+ Widget build(BuildContext context, WidgetRef ref) {
589
+ final userAsync = ref.watch(userControllerProvider(userId));
590
+ return switch (userAsync) {
591
+ AsyncData(:final value) => UserProfileView(user: value),
592
+ AsyncError(:final error) => ErrorView(message: '$error'),
593
+ _ => const Center(child: CircularProgressIndicator()),
594
+ };
595
+ }
596
+ }
597
+ ```
598
+
599
+ ### 2. Result Pattern for Error Handling
600
+
601
+ Avoid exceptions in business logic — use sealed types:
602
+
603
+ ```dart
604
+ // result.dart
605
+ sealed class Result<T> {
606
+ const Result();
607
+ }
608
+
609
+ final class Success<T> extends Result<T> {
610
+ const Success(this.value);
611
+ final T value;
612
+ }
613
+
614
+ final class Failure<T> extends Result<T> {
615
+ const Failure(this.error, [this.stackTrace]);
616
+ final AppException error;
617
+ final StackTrace? stackTrace;
618
+ }
619
+
620
+ // repository usage
621
+ class AuthRepositoryImpl implements AuthRepository {
622
+ @override
623
+ Future<Result<User>> login(String email, String password) async {
624
+ try {
625
+ final response = await _apiClient.post('/auth/login', data: {
626
+ 'email': email,
627
+ 'password': password,
628
+ });
629
+ return Success(UserModel.fromJson(response.data).toEntity());
630
+ } on DioException catch (e, st) {
631
+ return Failure(e.toAppException(), st);
632
+ }
633
+ }
634
+ }
635
+
636
+ // consuming in controller
637
+ final result = await ref.read(authRepositoryProvider).login(email, password);
638
+ switch (result) {
639
+ case Success(:final value):
640
+ state = AsyncData(value);
641
+ case Failure(:final error):
642
+ state = AsyncError(error, StackTrace.current);
643
+ }
644
+ ```
645
+
646
+ ### 3. GoRouter Setup with Auth Redirect
647
+
648
+ Declarative routing with authentication guards:
649
+
650
+ ```dart
651
+ final routerProvider = Provider<GoRouter>((ref) {
652
+ final authState = ref.watch(authStateProvider);
653
+
654
+ return GoRouter(
655
+ initialLocation: '/',
656
+ refreshListenable: authState,
657
+ redirect: (context, state) {
658
+ final isLoggedIn = authState.isAuthenticated;
659
+ final isAuthRoute = state.matchedLocation.startsWith('/auth');
660
+
661
+ if (!isLoggedIn && !isAuthRoute) return '/auth/login';
662
+ if (isLoggedIn && isAuthRoute) return '/';
663
+ return null; // no redirect
664
+ },
665
+ routes: [
666
+ GoRoute(
667
+ path: '/auth/login',
668
+ builder: (context, state) => const LoginScreen(),
669
+ ),
670
+ StatefulShellRoute.indexedStack(
671
+ builder: (context, state, navigationShell) =>
672
+ MainShell(navigationShell: navigationShell),
673
+ branches: [
674
+ StatefulShellBranch(routes: [
675
+ GoRoute(path: '/', builder: (_, __) => const HomeScreen()),
676
+ ]),
677
+ StatefulShellBranch(routes: [
678
+ GoRoute(path: '/profile', builder: (_, __) => const ProfileScreen()),
679
+ ]),
680
+ ],
681
+ ),
682
+ ],
683
+ );
684
+ });
685
+ ```
686
+
687
+ ### 4. Dio Client with Interceptors
688
+
689
+ Production-ready HTTP client setup:
690
+
691
+ ```dart
692
+ @riverpod
693
+ Dio dioClient(Ref ref) {
694
+ final dio = Dio(BaseOptions(
695
+ baseUrl: const String.fromEnvironment('API_URL'),
696
+ connectTimeout: const Duration(seconds: 10),
697
+ receiveTimeout: const Duration(seconds: 15),
698
+ headers: {'Content-Type': 'application/json'},
699
+ ));
700
+
701
+ dio.interceptors.addAll([
702
+ // Auth token injection
703
+ InterceptorsWrapper(
704
+ onRequest: (options, handler) async {
705
+ final token = await ref.read(secureStorageProvider).read(key: 'token');
706
+ if (token != null) {
707
+ options.headers['Authorization'] = 'Bearer $token';
708
+ }
709
+ handler.next(options);
710
+ },
711
+ onError: (error, handler) async {
712
+ if (error.response?.statusCode == 401) {
713
+ // Attempt token refresh, then retry
714
+ final refreshed = await ref.read(authControllerProvider.notifier).refreshToken();
715
+ if (refreshed) {
716
+ handler.resolve(await dio.fetch(error.requestOptions));
717
+ return;
718
+ }
719
+ }
720
+ handler.next(error);
721
+ },
722
+ ),
723
+ // Logging (debug only)
724
+ if (kDebugMode) LogInterceptor(requestBody: true, responseBody: true),
725
+ ]);
726
+
727
+ return dio;
728
+ }
729
+ ```
730
+
731
+ ### 5. Responsive Layout with LayoutBuilder
732
+
733
+ Adaptive UI without hardcoded breakpoints scattered through code:
734
+
735
+ ```dart
736
+ // breakpoints.dart
737
+ abstract final class Breakpoints {
738
+ static const double mobile = 600;
739
+ static const double tablet = 900;
740
+ static const double desktop = 1200;
741
+ }
742
+
743
+ // responsive_layout.dart
744
+ class ResponsiveLayout extends StatelessWidget {
745
+ const ResponsiveLayout({
746
+ required this.mobile,
747
+ this.tablet,
748
+ this.desktop,
749
+ super.key,
750
+ });
751
+
752
+ final Widget mobile;
753
+ final Widget? tablet;
754
+ final Widget? desktop;
755
+
756
+ @override
757
+ Widget build(BuildContext context) {
758
+ return LayoutBuilder(
759
+ builder: (context, constraints) {
760
+ if (constraints.maxWidth >= Breakpoints.desktop) {
761
+ return desktop ?? tablet ?? mobile;
762
+ }
763
+ if (constraints.maxWidth >= Breakpoints.tablet) {
764
+ return tablet ?? mobile;
765
+ }
766
+ return mobile;
767
+ },
768
+ );
769
+ }
770
+ }
771
+
772
+ // Usage
773
+ ResponsiveLayout(
774
+ mobile: const ProductListView(),
775
+ tablet: const ProductGridView(crossAxisCount: 2),
776
+ desktop: const ProductGridView(crossAxisCount: 4),
777
+ )
778
+ ```
779
+
780
+ ---
781
+
782
+ *Researched: 2026-03-07 | Sources: [Flutter Architecture Guide](https://docs.flutter.dev/app-architecture/guide), [Flutter Architecture Recommendations](https://docs.flutter.dev/app-architecture/recommendations), [Flutter State Management Comparison 2025](https://dev.to/bestaoui_aymen/state-management-in-flutter-riverpod-20-vs-bloc-vs-provider-1ogh), [Flutter 3.41 Release](https://blog.flutter.dev/whats-new-in-flutter-3-41-302ec140e632), [Impeller Rendering Engine 2026](https://dev.to/eira-wexford/how-impeller-is-transforming-flutter-ui-rendering-in-2026-3dpd), [DCM: 15 Common Flutter Mistakes](https://dcm.dev/blog/2025/03/24/fifteen-common-mistakes-flutter-dart-development/), [Flutter Testing Best Practices](https://dev.to/misterankit/the-comprehensive-guide-to-flutter-app-testing-best-practices-and-proven-strategies-51m8), [Golden Tests with Alchemist](https://vibe-studio.ai/insights/flutter-widget-testing-best-practices-golden-tests-and-screenshot-diffs), [Flutter Security Best Practices](https://hackernoon.com/10-best-practices-for-securing-your-flutter-mobile-app-in-2025), [Sentry Flutter SDK 9.0](https://blog.sentry.io/introducing-sentrys-flutter-sdk-9-0/), [GoRouter Navigation](https://docs.flutter.dev/ui/navigation), [Flutter Local Databases 2025](https://quashbugs.com/blog/hive-vs-drift-vs-floor-vs-isar-2025), [Riverpod 3.x Guide](https://codewithandrea.com/articles/flutter-state-management-riverpod/), [Flutter CI/CD with Codemagic](https://blog.codemagic.io/ci-cd-for-flutter-with-fastlane-codemagic/), [Flutter Performance DevTools](https://docs.flutter.dev/tools/devtools/performance), [State of Flutter 2026](https://devnewsletter.com/p/state-of-flutter-2026/)*