@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,983 @@
1
+ # Cross-Platform Mobile Design
2
+
3
+ > **Module Type:** Platform
4
+ > **Scope:** Design principles, patterns, and conventions for building mobile applications
5
+ > that run on both iOS and Android using cross-platform frameworks (Flutter, React Native, .NET MAUI).
6
+ > **Last Updated:** 2026-03-07
7
+
8
+ ---
9
+
10
+ ## Table of Contents
11
+
12
+ 1. [Platform Design Language](#1-platform-design-language)
13
+ 2. [Layout & Navigation Patterns](#2-layout--navigation-patterns)
14
+ 3. [Component Conventions](#3-component-conventions)
15
+ 4. [Typography & Spacing System](#4-typography--spacing-system)
16
+ 5. [Common Mistakes](#5-common-mistakes)
17
+ 6. [Checklist](#6-checklist)
18
+
19
+ ---
20
+
21
+ ## 1. Platform Design Language
22
+
23
+ ### 1.1 The Cross-Platform Design Challenge: Consistency vs Platform Fidelity
24
+
25
+ Cross-platform mobile design operates on a fundamental tension: users expect apps to
26
+ feel native to their platform, while teams want a unified brand identity and reduced
27
+ design/development overhead. This tension manifests in every decision from navigation
28
+ structure to button shape.
29
+
30
+ **Platform fidelity** means respecting the conventions users already know. iOS users
31
+ expect edge-swipe-to-go-back, bottom tab bars, and SF Pro typography. Android users
32
+ expect the system back gesture (now predictive back in Android 14+), Material Design
33
+ components, and Roboto typography. When an app violates these expectations, it creates
34
+ cognitive friction -- the app "feels wrong" even if the user cannot articulate why.
35
+
36
+ **Brand consistency** means that a user switching between iOS and Android recognizes the
37
+ same product: the same color palette, the same information architecture, the same
38
+ feature set. This does not require pixel-identical screens.
39
+
40
+ The resolution is a layered strategy:
41
+
42
+ | Layer | Approach | Example |
43
+ |---|---|---|
44
+ | Brand identity | Unified across platforms | Colors, logo, illustration style, tone |
45
+ | Information architecture | Unified across platforms | Same screens, same feature set, same flows |
46
+ | Interaction patterns | Adapted per platform | Back navigation, pull-to-refresh feel, gestures |
47
+ | System-level components | Native per platform | Alerts, date pickers, share sheets, keyboards |
48
+ | Custom components | Unified with minor tweaks | Cards, feeds, dashboards, charts |
49
+
50
+ > **Principle:** Share intent, adapt interaction. The user should accomplish the same
51
+ > tasks in the same number of steps on both platforms, but the micro-interactions should
52
+ > feel native.
53
+
54
+ ### 1.2 Framework Approaches
55
+
56
+ #### Flutter (Material + Cupertino)
57
+
58
+ Flutter renders its own pixels via the Skia/Impeller engine, meaning it does not use
59
+ native platform UI components by default. This gives Flutter apps pixel-perfect
60
+ consistency across platforms but requires deliberate effort to feel native.
61
+
62
+ Flutter provides two widget libraries:
63
+
64
+ - **Material widgets** -- Implement Material Design 3 guidelines. Default on Android.
65
+ - **Cupertino widgets** -- Implement Apple Human Interface Guidelines. Used on iOS.
66
+
67
+ Flutter also provides **adaptive constructors** on several widgets that automatically
68
+ switch between Material and Cupertino variants based on the running platform:
69
+
70
+ ```dart
71
+ // These automatically use Cupertino variants on iOS:
72
+ Switch.adaptive(value: _value, onChanged: _onChanged);
73
+ Slider.adaptive(value: _value, onChanged: _onChanged);
74
+ CircularProgressIndicator.adaptive();
75
+ ```
76
+
77
+ Additional automatic platform adaptations in Flutter include:
78
+
79
+ - **Typography:** Material package defaults to Roboto on Android and San Francisco on iOS.
80
+ - **Icons:** Overflow menu dots are horizontal on iOS, vertical on Android. Back arrows
81
+ are a simple chevron on iOS and have a stem on Android.
82
+ - **Scrolling physics:** iOS uses bouncing scroll physics; Android uses clamping physics.
83
+ - **Haptic feedback:** Text field long-press triggers a buzz on Android, not on iOS.
84
+ Picker scrolling triggers a light impact knock on iOS, not on Android.
85
+
86
+ > **Reference:** Flutter Automatic Platform Adaptations
87
+ > (https://docs.flutter.dev/ui/adaptive-responsive/platform-adaptations)
88
+
89
+ **Best practice for Flutter:** Use Material widgets as the base, then swap to Cupertino
90
+ for input, selection, and system-information widgets on iOS. Use adaptive constructors
91
+ where available. For navigation chrome (app bar, tab bar), consider platform-branching.
92
+
93
+ #### React Native (Platform-Adaptive)
94
+
95
+ React Native uses actual native platform views, so components inherently look and feel
96
+ native. The challenge is the inverse of Flutter: ensuring brand consistency when the
97
+ underlying components differ.
98
+
99
+ React Native provides two mechanisms for platform adaptation:
100
+
101
+ 1. **Platform module** -- Runtime detection and conditional rendering:
102
+
103
+ ```javascript
104
+ import { Platform } from 'react-native';
105
+
106
+ const styles = StyleSheet.create({
107
+ container: {
108
+ ...Platform.select({
109
+ ios: { shadowColor: '#000', shadowOffset: { width: 0, height: 2 } },
110
+ android: { elevation: 4 },
111
+ }),
112
+ },
113
+ });
114
+ ```
115
+
116
+ 2. **Platform-specific file extensions** -- Separate files that React Native resolves
117
+ automatically:
118
+
119
+ ```
120
+ Button.ios.js // iOS-specific implementation
121
+ Button.android.js // Android-specific implementation
122
+ Button.js // Shared fallback
123
+ ```
124
+
125
+ React Native also provides platform-specific components like `ActionSheetIOS`,
126
+ `ToastAndroid`, and `DrawerLayoutAndroid`.
127
+
128
+ > **Reference:** React Native Platform-Specific Code
129
+ > (https://reactnative.dev/docs/platform-specific-code)
130
+
131
+ **Best practice for React Native:** Create a shared component library with a unified API
132
+ surface, using platform-specific files or `Platform.select()` internally to render
133
+ appropriate native components.
134
+
135
+ #### .NET MAUI
136
+
137
+ .NET MAUI (Multi-platform App UI) uses a **Handler architecture** that maps
138
+ cross-platform controls to platform-native views. Handlers replaced the older
139
+ Xamarin.Forms renderer system, providing more modular, performant, and testable
140
+ control customization.
141
+
142
+ Each UI element delegates platform-specific behavior to a handler, which translates
143
+ MAUI controls into native views at runtime. Mappers handle property changes per
144
+ platform (background color, border styles, text sizes).
145
+
146
+ **Best practice for .NET MAUI:** Leverage the handler architecture for custom controls
147
+ that need platform-specific behavior. Use MAUI's built-in controls, which already
148
+ map to native components, for standard UI elements.
149
+
150
+ ### 1.3 "Write Once, Adapt Per Platform" vs "Lowest Common Denominator"
151
+
152
+ The **lowest common denominator** approach uses only features and patterns available
153
+ identically on both platforms. This produces apps that feel foreign on both platforms --
154
+ neither truly iOS nor truly Android. Avoid this.
155
+
156
+ The **write once, adapt per platform** approach shares:
157
+ - Business logic and state management (100% shared)
158
+ - Screen structure and layout (90-95% shared)
159
+ - Custom visual components like cards, charts, avatars (85-95% shared)
160
+
161
+ And adapts:
162
+ - Navigation chrome and back behavior (platform-specific)
163
+ - System-level UI (alerts, pickers, share sheets) (platform-native)
164
+ - Gestures and haptics (platform-convention)
165
+ - Typography rendering and font selection (platform-appropriate)
166
+
167
+ The adaptation layer is typically 5-15% of the total UI code. This overhead is
168
+ dramatically less expensive than maintaining two separate native codebases, while
169
+ producing an experience that respects both platforms.
170
+
171
+ ### 1.4 When to Use Platform-Specific vs Custom Unified Components
172
+
173
+ **Use platform-specific (native) components when:**
174
+ - The component is a system-level interaction (alerts, action sheets, date pickers)
175
+ - Users have strong muscle memory for the pattern (back navigation, pull-to-refresh)
176
+ - The OS provides accessibility features tied to the native component
177
+ - The component interacts with system UI (keyboards, notification permissions)
178
+
179
+ **Use custom unified components when:**
180
+ - The component represents your brand identity (cards, feed items, profile layouts)
181
+ - The component has no native equivalent (custom charts, onboarding flows)
182
+ - The interaction pattern is identical across platforms (scrolling a list, tapping a card)
183
+ - You need visual consistency for marketing or brand reasons
184
+
185
+ **Hybrid approach for common patterns:**
186
+ - Bottom tab bar: Use the same information architecture, but render with native
187
+ styling (Cupertino tab bar on iOS, Material NavigationBar on Android)
188
+ - Buttons: Custom styled for brand, but with platform-appropriate feedback
189
+ (iOS opacity fade, Android ripple effect)
190
+ - Text inputs: Custom styled container, but native keyboard and text selection behavior
191
+
192
+ ---
193
+
194
+ ## 2. Layout & Navigation Patterns
195
+
196
+ ### 2.1 Navigation Patterns That Work Cross-Platform
197
+
198
+ #### Bottom Tab Navigation (with Adaptation)
199
+
200
+ Bottom tabs are the single most portable navigation pattern. Both iOS and Android
201
+ have standardized bottom navigation:
202
+
203
+ - **iOS:** UITabBarController -- bottom tab bar with labels, up to 5 items.
204
+ With iOS 26 Liquid Glass, tab bars now shrink on scroll and expand when
205
+ scrolling back up.
206
+ - **Android:** Material NavigationBar -- bottom navigation with 3-5 destinations,
207
+ icons with optional labels.
208
+
209
+ Cross-platform implementation:
210
+
211
+ | Aspect | iOS Convention | Android Convention | Recommendation |
212
+ |---|---|---|---|
213
+ | Label visibility | Always visible | Icons only or icons+labels | Always show labels for accessibility |
214
+ | Active indicator | Tinted icon + label | Pill-shaped indicator behind icon | Follow platform convention |
215
+ | Tab count | 3-5 (More tab for overflow) | 3-5 (no overflow) | Limit to 4-5 max |
216
+ | Tab switching | Preserves scroll position | May reset view state | Preserve state on both |
217
+ | Badge style | Red circle with count | Small dot or count | Follow platform style |
218
+
219
+ #### Stack Navigation
220
+
221
+ Both platforms use a push/pop stack model for drilling into content. The chrome
222
+ differs but the concept is universal:
223
+
224
+ - **iOS:** UINavigationController with large titles, back chevron with previous
225
+ screen title, edge-swipe to go back.
226
+ - **Android:** TopAppBar with back arrow, system back gesture (predictive back
227
+ in Android 14+).
228
+
229
+ #### Patterns That Translate Well
230
+
231
+ - **Search:** Top search bar (both platforms use this pattern).
232
+ - **Pull-to-refresh:** Universal concept, though the visual indicator differs
233
+ (iOS uses a spinner, Material uses a circular progress indicator).
234
+ - **Infinite scroll / pagination:** Identical on both platforms.
235
+ - **Modal sheets:** Both platforms support bottom sheets and full-screen modals.
236
+ Half-sheet / drag-to-dismiss modals are now standard on both.
237
+
238
+ ### 2.2 Patterns That MUST Differ
239
+
240
+ #### Back Navigation
241
+
242
+ This is the single most critical difference between iOS and Android:
243
+
244
+ **iOS:**
245
+ - Edge swipe from the left edge of the screen navigates back.
246
+ - The navigation bar shows a back button (chevron + previous screen title).
247
+ - There is no system-level back affordance outside the app's own UI.
248
+ - Users expect the swipe gesture everywhere within a navigation stack.
249
+
250
+ **Android:**
251
+ - System back button/gesture handles back navigation globally.
252
+ - **Predictive back (Android 14+):** When the user swipes from the edge, Android
253
+ shows a preview of the destination before the gesture completes. The current
254
+ screen shrinks and shifts, revealing what is behind it.
255
+ - The app must declare support for predictive back via `enableOnBackInvokedCallback`.
256
+ - Back behavior may exit the app, pop a fragment, dismiss a modal, or close a drawer
257
+ depending on the back stack state.
258
+
259
+ > **Reference:** Android Predictive Back Design
260
+ > (https://developer.android.com/design/ui/mobile/guides/patterns/predictive-back)
261
+
262
+ **Cross-platform implementation:**
263
+ - On iOS: Implement interactive swipe-back with the navigation controller.
264
+ - On Android: Support predictive back animations. Do not intercept the system
265
+ back gesture unless absolutely necessary.
266
+ - In Flutter: Use `PopScope` (replacement for `WillPopScope`) and enable
267
+ predictive back via `android:enableOnBackInvokedCallback="true"` in the manifest.
268
+ - In React Native: Use `BackHandler` on Android; rely on navigation library's
269
+ gesture handler on iOS.
270
+
271
+ #### Pull-to-Refresh Behavior
272
+
273
+ While both platforms support pull-to-refresh, the visual treatment differs:
274
+
275
+ - **iOS:** A spinning activity indicator appears above the list content. The content
276
+ bounces past its top edge (rubber-band effect).
277
+ - **Android (Material):** A circular progress indicator descends from the top,
278
+ overlaying the content. The content does not bounce.
279
+
280
+ Use the platform's native refresh indicator. Do not force the iOS spinner onto
281
+ Android or vice versa.
282
+
283
+ #### Swipe Gestures on List Items
284
+
285
+ - **iOS:** Swipe-to-reveal actions is a core pattern (swipe left for delete, swipe
286
+ right for archive). Users expect full-swipe to perform the primary action.
287
+ - **Android:** Swipe gestures on list items are less standardized. Material Design
288
+ supports swipe-to-dismiss but it is less ingrained in user expectations.
289
+
290
+ #### Context Menus and Long-Press
291
+
292
+ - **iOS:** Long-press triggers context menus with a blur/scale preview animation.
293
+ 3D Touch / Haptic Touch provides "peek and pop" on supported devices.
294
+ - **Android:** Long-press triggers contextual action bars or popup menus. Material
295
+ Design uses a simpler popup menu without the preview animation.
296
+
297
+ ### 2.3 Screen Size Strategy Across iOS and Android Device Ranges
298
+
299
+ #### iOS Device Landscape
300
+
301
+ iOS has a relatively constrained set of screen sizes:
302
+
303
+ | Device Class | Screen Width (points) | Example |
304
+ |---|---|---|
305
+ | iPhone SE | 375 | iPhone SE 3rd gen |
306
+ | iPhone standard | 390-393 | iPhone 15, iPhone 16 |
307
+ | iPhone Pro Max | 430-440 | iPhone 16 Pro Max |
308
+ | iPad Mini | 744 | iPad Mini 6th gen |
309
+ | iPad | 820-1024 | iPad Air, iPad Pro |
310
+
311
+ #### Android Device Landscape
312
+
313
+ Android has enormous screen size variation:
314
+
315
+ | Device Class | Screen Width (dp) | Examples |
316
+ |---|---|---|
317
+ | Compact phone | 320-360 | Budget Android devices |
318
+ | Standard phone | 360-400 | Pixel 8, Samsung Galaxy S24 |
319
+ | Large phone | 400-480 | Samsung Galaxy S24 Ultra |
320
+ | Foldable (folded) | 280-400 | Galaxy Z Fold (cover) |
321
+ | Foldable (unfolded) | 600-840 | Galaxy Z Fold (inner) |
322
+ | Tablet | 600-1280 | Samsung Galaxy Tab, Pixel Tablet |
323
+
324
+ #### Cross-Platform Screen Strategy
325
+
326
+ 1. **Design for 360-393 dp/pt as the baseline.** This covers the majority of both
327
+ iOS and Android devices.
328
+ 2. **Test at 320dp minimum** to catch overflow on compact Android devices.
329
+ 3. **Use flexible layouts** (Flex/Row/Column with flex factors) rather than fixed
330
+ widths for all content areas.
331
+ 4. **Define breakpoints for layout shifts:**
332
+ - Compact: < 600dp -- Single column, bottom nav
333
+ - Medium: 600-840dp -- Two-column possible, rail nav or bottom nav
334
+ - Expanded: > 840dp -- Multi-column, navigation rail or drawer
335
+ 5. **Avoid designing only for the "hero" device.** A design that looks perfect on
336
+ iPhone 16 Pro Max may overflow on an Android device at 320dp.
337
+
338
+ ### 2.4 Safe Area Handling Across Platforms
339
+
340
+ Modern devices have non-rectangular screens with notches, Dynamic Island (iPhone),
341
+ hole-punch cameras (Android), rounded corners, and home indicators. Safe areas define
342
+ the region where content is fully visible and interactive.
343
+
344
+ #### iOS Safe Areas
345
+
346
+ iOS provides `safeAreaInsets` that account for:
347
+ - Status bar height (Dynamic Island, notch, or standard)
348
+ - Home indicator at the bottom (devices without a physical home button)
349
+ - Rounded corners
350
+ - Navigation bar and tab bar overlays (especially with iOS 26 Liquid Glass where
351
+ bars use translucent materials)
352
+
353
+ #### Android Safe Areas
354
+
355
+ Android provides:
356
+ - `WindowInsets` for system bars, display cutouts, and navigation bars
357
+ - Edge-to-edge display (default in Android 15+) where apps draw behind system bars
358
+ - `displayCutout` insets for notch and hole-punch cameras
359
+
360
+ #### Cross-Platform Implementation
361
+
362
+ **React Native:** Use `react-native-safe-area-context` (not the built-in `SafeAreaView`
363
+ which is iOS-only and limited). The library provides `SafeAreaView` component and
364
+ `useSafeAreaInsets()` hook that work on both platforms:
365
+
366
+ ```javascript
367
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
368
+
369
+ function MyScreen() {
370
+ const insets = useSafeAreaInsets();
371
+ return (
372
+ <View style={{
373
+ paddingTop: insets.top,
374
+ paddingBottom: insets.bottom,
375
+ paddingLeft: insets.left,
376
+ paddingRight: insets.right,
377
+ }}>
378
+ {/* Content */}
379
+ </View>
380
+ );
381
+ }
382
+ ```
383
+
384
+ > **Reference:** React Navigation Safe Areas
385
+ > (https://reactnavigation.org/docs/handling-safe-area/)
386
+
387
+ **Flutter:** Use `SafeArea` widget or `MediaQuery.of(context).padding` to access
388
+ safe area insets. Flutter handles safe areas automatically in `Scaffold` with
389
+ `AppBar` and `BottomNavigationBar`.
390
+
391
+ ```dart
392
+ SafeArea(
393
+ child: Scaffold(
394
+ // Scaffold already handles safe areas for its app bar and bottom bar
395
+ body: MyContent(),
396
+ ),
397
+ )
398
+ ```
399
+
400
+ **Key rules:**
401
+ - Always test in landscape orientation -- safe areas change significantly.
402
+ - Never hardcode status bar or notch heights. Always use system-provided insets.
403
+ - Account for the home indicator area on both platforms (bottom inset).
404
+ - On Android with edge-to-edge, draw decorative content (backgrounds, images)
405
+ behind system bars but keep interactive content within safe areas.
406
+
407
+ ---
408
+
409
+ ## 3. Component Conventions
410
+
411
+ ### 3.1 Components That Should Look the Same Everywhere
412
+
413
+ These components represent your brand and have no strong platform convention requiring
414
+ differentiation:
415
+
416
+ **Cards and content containers:**
417
+ Cards with rounded corners, shadows/elevation, and content layout are universal.
418
+ Neither platform has a strongly opinionated native card component, so your custom
419
+ card design works everywhere.
420
+
421
+ **List items and feeds:**
422
+ The structure of list items (leading icon, title, subtitle, trailing action) is
423
+ consistent across platforms. Style them with your brand typography and colors.
424
+
425
+ **Avatars and profile elements:**
426
+ User avatars, profile headers, and social elements have no platform convention.
427
+
428
+ **Charts and data visualization:**
429
+ Custom visualizations should be identical for brand consistency and data integrity.
430
+
431
+ **Onboarding and empty states:**
432
+ Illustrations, empty state messages, and onboarding carousels are brand-specific.
433
+
434
+ **Custom action buttons:**
435
+ Primary CTA buttons (e.g., "Add to Cart", "Book Now") should maintain brand identity.
436
+ However, adapt the touch feedback: opacity reduction on iOS, ripple on Android.
437
+
438
+ **Media content:**
439
+ Image galleries, video players (custom chrome), and audio players.
440
+
441
+ ### 3.2 Components That MUST Be Platform-Native
442
+
443
+ Using custom implementations of these components creates the most jarring
444
+ cross-platform violations:
445
+
446
+ #### Alerts and Dialogs
447
+
448
+ | Aspect | iOS (Cupertino) | Android (Material) |
449
+ |---|---|---|
450
+ | Shape | Rounded rectangle, centered | Rounded rectangle, centered |
451
+ | Title | Bold, centered | Bold, left-aligned (MD3) |
452
+ | Actions | Side-by-side buttons, bold for primary | Stacked or side-by-side text buttons |
453
+ | Destructive action | Red text | Follows Material color system |
454
+ | Style | Translucent blur background | Elevated surface with scrim |
455
+
456
+ **Never** show a Material-styled dialog on iOS or a Cupertino-styled alert on Android.
457
+ Users interact with system alerts across all apps; non-native alerts feel like malware.
458
+
459
+ - In Flutter: Use `showCupertinoDialog` on iOS and `showDialog` with `AlertDialog`
460
+ on Android.
461
+ - In React Native: Use the `Alert` API which automatically uses native alerts on both
462
+ platforms.
463
+
464
+ #### Action Sheets / Bottom Sheets
465
+
466
+ - **iOS:** `UIActionSheet` / `CupertinoActionSheet` -- slides up from the bottom with
467
+ a cancel button separated by a gap. Translucent blurred background.
468
+ - **Android:** Material Bottom Sheet -- slides up, attached to bottom edge. Can be
469
+ modal or persistent. No separated cancel button.
470
+
471
+ #### Date and Time Pickers
472
+
473
+ This is one of the most visible platform differences:
474
+
475
+ - **iOS:** Inline wheel picker or compact picker that expands. Integrated into the
476
+ content flow. Users scroll wheels to select values.
477
+ - **Android:** Material Date Picker -- modal dialog with a calendar grid for dates,
478
+ clock face for time. Users tap to select.
479
+
480
+ **Never** show an iOS-style wheel picker on Android or a calendar grid dialog on iOS.
481
+ These components are deeply ingrained in user muscle memory.
482
+
483
+ - In Flutter: Use `showDatePicker` (Material) vs `showCupertinoDatePicker` based on
484
+ platform.
485
+ - In React Native: Use `@react-native-community/datetimepicker` which renders native
486
+ pickers on both platforms.
487
+
488
+ #### Keyboards and Text Input
489
+
490
+ Keyboard appearance is entirely OS-controlled and cannot be customized. However, you
491
+ must configure the correct keyboard type, return key, and autocorrection behavior:
492
+
493
+ - Use `keyboardType` appropriate to the field (email, phone, number, URL).
494
+ - Set `textContentType` (iOS) and `autoComplete` (Android) for autofill support.
495
+ - Configure the return key label (`done`, `next`, `search`, `go`).
496
+
497
+ #### Share Sheets
498
+
499
+ Always invoke the native share sheet (`UIActivityViewController` on iOS,
500
+ `Intent.ACTION_SEND` on Android). Never build a custom share UI.
501
+
502
+ #### Permissions Dialogs
503
+
504
+ Always use system-provided permission dialogs. Custom pre-permission dialogs
505
+ ("priming screens") can be used before triggering the system dialog, but the actual
506
+ permission request must be native.
507
+
508
+ ### 3.3 Gesture Differences
509
+
510
+ #### iOS Edge-Swipe Back vs Android Predictive Back
511
+
512
+ | Aspect | iOS | Android |
513
+ |---|---|---|
514
+ | Trigger | Swipe from left screen edge | Swipe from left or right screen edge |
515
+ | Visual feedback | Current screen slides right, previous screen slides in from left | Current screen shrinks and shifts, revealing destination |
516
+ | Cancelable | Yes, user can stop mid-gesture | Yes, user can stop mid-gesture |
517
+ | Scope | Within app navigation stack only | System-wide, may exit app |
518
+ | Implementation | Automatic with UINavigationController | Requires `enableOnBackInvokedCallback` |
519
+
520
+ #### Tap Feedback
521
+
522
+ - **iOS:** Buttons reduce opacity on press (typically to 0.6-0.7). No ripple effect.
523
+ Highlighted state is subtle.
524
+ - **Android:** Material ripple effect radiates from the touch point. The ripple is
525
+ an expected part of the interaction feedback.
526
+
527
+ Cross-platform frameworks should use the appropriate feedback:
528
+ - In Flutter: Material `InkWell` provides ripple; use `CupertinoButton` for iOS
529
+ opacity feedback or create a custom wrapper that switches.
530
+ - In React Native: Use `TouchableOpacity` on iOS and `TouchableNativeFeedback`
531
+ (or `Pressable` with platform-specific `android_ripple`) on Android.
532
+
533
+ #### Scroll Behavior
534
+
535
+ - **iOS:** Rubber-band / bounce effect at scroll boundaries. Momentum-based scrolling
536
+ with deceleration.
537
+ - **Android:** Edge glow (overscroll glow) effect at scroll boundaries. Predictable
538
+ stop on finger lift with Material 3 stretch overscroll.
539
+
540
+ Flutter automatically applies the correct scroll physics per platform.
541
+ React Native's `ScrollView` also adapts bounce behavior per platform.
542
+
543
+ ### 3.4 Platform-Specific Affordances to Preserve
544
+
545
+ These small details significantly impact perceived native quality:
546
+
547
+ **iOS affordances:**
548
+ - Large title navigation bars that collapse on scroll
549
+ - Haptic feedback on selection changes (picker wheels, toggles)
550
+ - Translucent navigation and tab bars with blur (especially with Liquid Glass in iOS 26)
551
+ - Dynamic Type support for system font scaling
552
+ - The "rubber-band" overscroll effect
553
+
554
+ **Android affordances:**
555
+ - Floating Action Button (FAB) for primary actions in appropriate contexts
556
+ - Snackbar for transient messages (instead of iOS-style toast)
557
+ - Material You dynamic color theming (using wallpaper-extracted colors)
558
+ - Predictive back gesture animations
559
+ - Edge-to-edge rendering behind system bars
560
+
561
+ ---
562
+
563
+ ## 4. Typography & Spacing System
564
+
565
+ ### 4.1 Shared Spacing System
566
+
567
+ The **8dp/pt grid** is the universal foundation for cross-platform spacing. Both
568
+ Material Design and Apple HIG align to multiples of 8 for component sizing, margins,
569
+ and padding. Some systems use a 4dp sub-grid for fine adjustments.
570
+
571
+ > **Reference:** Material Design 3 Spacing
572
+ > (https://m3.material.io/foundations/layout/understanding-layout/spacing)
573
+
574
+ #### Core Spacing Scale
575
+
576
+ Define a shared spacing scale used on both platforms:
577
+
578
+ ```
579
+ spacing-0: 0dp
580
+ spacing-0.5: 2dp (4dp sub-grid: micro adjustments)
581
+ spacing-1: 4dp (4dp sub-grid: icon padding, inline spacing)
582
+ spacing-2: 8dp (base unit: minimum component padding)
583
+ spacing-3: 12dp (intermediate: compact list item padding)
584
+ spacing-4: 16dp (standard content margin, card padding)
585
+ spacing-5: 20dp (comfortable component spacing)
586
+ spacing-6: 24dp (section spacing, generous padding)
587
+ spacing-8: 32dp (large section breaks)
588
+ spacing-10: 40dp (screen-level margins on tablets)
589
+ spacing-12: 48dp (touch target minimum height)
590
+ spacing-16: 64dp (major section dividers)
591
+ ```
592
+
593
+ **Touch targets:**
594
+ - iOS minimum: 44x44 pt (Apple HIG)
595
+ - Android minimum: 48x48 dp (Material Design)
596
+ - **Cross-platform recommendation:** Use 48dp minimum to satisfy both, with at least
597
+ 8dp spacing between adjacent targets.
598
+
599
+ #### Screen Margins
600
+
601
+ - **Compact screens (phones):** 16dp horizontal margin is standard on both platforms.
602
+ - **Medium screens (large phones, small tablets):** 24dp margins.
603
+ - **Expanded screens (tablets):** 24-40dp margins, or use a max-width content container.
604
+
605
+ ### 4.2 Font Strategy
606
+
607
+ Three viable approaches, each with tradeoffs:
608
+
609
+ #### Option A: System Fonts (Recommended for Most Apps)
610
+
611
+ Use the system font on each platform: **SF Pro** on iOS, **Roboto** on Android.
612
+
613
+ | Pros | Cons |
614
+ |---|---|
615
+ | Feels maximally native | Slightly different visual identity per platform |
616
+ | Zero bundle size overhead | Text metrics differ slightly (may affect layouts) |
617
+ | Automatic support for Dynamic Type (iOS) and font scaling (Android) | Cannot use for web without licensing concerns (SF Pro) |
618
+ | OS-level rendering optimizations | |
619
+ | SF Pro supports Liquid Glass vibrancy on iOS 26 | |
620
+
621
+ Flutter automatically uses the correct system font when using the Material or
622
+ Cupertino packages. React Native uses system fonts by default.
623
+
624
+ #### Option B: Custom Brand Font (for Strong Brand Identity)
625
+
626
+ Use a single custom font (e.g., **Inter**, **IBM Plex Sans**, **Geist**) on both
627
+ platforms.
628
+
629
+ | Pros | Cons |
630
+ |---|---|
631
+ | Identical visual identity everywhere | Adds to app bundle size (100-400KB for variable font) |
632
+ | Consistent text metrics = consistent layouts | Does not benefit from OS-level font optimizations |
633
+ | Works across mobile, web, and desktop | May feel slightly foreign on both platforms |
634
+ | Variable fonts reduce weight count | Must handle Dynamic Type / font scaling manually |
635
+
636
+ If choosing a custom font, prefer **variable fonts** (e.g., Inter Variable, Roboto Flex)
637
+ over multiple static weights. A single variable font file replaces 6-10 weight files,
638
+ reducing bundle size by up to 80%.
639
+
640
+ > The Inter font family is designed specifically for computer screens with tall x-height
641
+ > for readability, and covers Latin, Cyrillic, and Greek scripts. It is widely used as
642
+ > a cross-platform bridge font.
643
+
644
+ #### Option C: Hybrid (Platform Fonts for Body, Brand Font for Headlines)
645
+
646
+ Use SF Pro / Roboto for body text (readability, native feel) and a brand font for
647
+ headlines and display text (identity). This is a good compromise but adds complexity.
648
+
649
+ **Recommendation:** For most applications, Option A (system fonts) is the best default.
650
+ Choose Option B only when brand identity is a top priority and you are willing to
651
+ invest in testing font scaling, accessibility, and layout consistency. Option C
652
+ is appropriate for apps with strong typographic brand identities (media, fashion,
653
+ luxury).
654
+
655
+ ### 4.3 Type Scale That Works Cross-Platform
656
+
657
+ Define a shared semantic type scale that maps to appropriate sizes on each platform.
658
+ Use semantic names (not pixel values) in your design system:
659
+
660
+ ```
661
+ display-large: 34sp/pt -- Hero text, landing screens
662
+ display-medium: 28sp/pt -- Major section headers
663
+ headline-large: 24sp/pt -- Screen titles
664
+ headline-medium: 20sp/pt -- Section titles
665
+ title-large: 18sp/pt -- Card titles, dialog titles
666
+ title-medium: 16sp/pt -- Subsection titles
667
+ body-large: 16sp/pt -- Primary body text
668
+ body-medium: 14sp/pt -- Secondary body text
669
+ body-small: 12sp/pt -- Captions, helper text
670
+ label-large: 14sp/pt -- Button text, tab labels
671
+ label-medium: 12sp/pt -- Small labels, badges
672
+ label-small: 11sp/pt -- Micro labels, timestamps
673
+ ```
674
+
675
+ This scale aligns with Material Design 3's type scale while also working within
676
+ Apple HIG's recommended sizing ranges.
677
+
678
+ **Line heights** should follow the 4dp sub-grid:
679
+
680
+ ```
681
+ display-large: 40dp line-height (34 + ~6 leading)
682
+ headline-large: 32dp line-height (24 + 8 leading)
683
+ body-large: 24dp line-height (16 + 8 leading)
684
+ body-medium: 20dp line-height (14 + 6 leading)
685
+ body-small: 16dp line-height (12 + 4 leading)
686
+ ```
687
+
688
+ **Font weight mapping:**
689
+
690
+ | Semantic Weight | Value | iOS (SF Pro) | Android (Roboto) |
691
+ |---|---|---|---|
692
+ | Regular | 400 | Regular | Regular |
693
+ | Medium | 500 | Medium | Medium |
694
+ | Semibold | 600 | Semibold | (use Medium or Bold) |
695
+ | Bold | 700 | Bold | Bold |
696
+
697
+ Note: Roboto does not have a native Semibold weight. If your type scale uses Semibold,
698
+ map it to Medium (500) on Android or use Roboto's variable font axis for precise
699
+ weight matching.
700
+
701
+ #### Accessibility: Dynamic Type and Font Scaling
702
+
703
+ Both platforms support user-controlled font scaling:
704
+
705
+ - **iOS Dynamic Type:** Seven accessibility sizes from xSmall to xxxLarge, plus five
706
+ additional Accessibility sizes. Apps using system fonts with `UIFontTextStyle`
707
+ get this automatically.
708
+ - **Android Font Scale:** System-wide font size multiplier (default 1.0, up to 2.0).
709
+ Apps using `sp` units scale automatically.
710
+
711
+ **Cross-platform rules:**
712
+ 1. Always use scalable units (sp on Android, Dynamic Type on iOS).
713
+ 2. Test at 200% font scale on both platforms.
714
+ 3. Do not cap font scaling for body text (this is an accessibility violation).
715
+ 4. Constrain scaling for decorative or display text only if it breaks layout.
716
+ 5. Ensure containers expand vertically to accommodate larger text.
717
+ 6. Test that scaled text does not overlap or get clipped.
718
+
719
+ ---
720
+
721
+ ## 5. Common Mistakes
722
+
723
+ ### 5.1 Using iOS Design Language on Android (or Vice Versa)
724
+
725
+ **The mistake:** Shipping an iOS-designed app directly to Android (or the reverse)
726
+ without platform adaptation.
727
+
728
+ **How it manifests:**
729
+ - iOS-style segmented controls on Android (Android has tabs or chips)
730
+ - Cupertino-style date picker wheels on Android (Android uses calendar/clock dialogs)
731
+ - Material-style FAB on iOS (iOS does not use FABs as a primary pattern)
732
+ - Material-style navigation drawer on iOS (iOS uses bottom tabs)
733
+ - Back arrows with stems (Android style) appearing on iOS
734
+ - iOS-style alert dialogs with side-by-side buttons on Android
735
+
736
+ **Why it matters:** Users interact with dozens of apps daily. When your app uses the
737
+ wrong platform's conventions, it creates an uncanny valley effect. Users subconsciously
738
+ perceive the app as low-quality, untrustworthy, or difficult to use.
739
+
740
+ **Fix:** Audit every system-level interaction component against both Apple HIG and
741
+ Material Design 3 guidelines. Use platform-adaptive components provided by your
742
+ framework.
743
+
744
+ ### 5.2 Ignoring Platform Conventions for "Consistency"
745
+
746
+ **The mistake:** Forcing pixel-identical UI on both platforms in the name of brand
747
+ consistency, overriding native behaviors.
748
+
749
+ **How it manifests:**
750
+ - Custom back button that ignores the system back gesture on Android
751
+ - Custom scroll behavior that does not bounce on iOS
752
+ - Custom text selection handles that do not match the platform
753
+ - Custom keyboard accessories that break native autofill
754
+ - Identical alert dialogs on both platforms using a custom component
755
+ - Same pull-to-refresh animation on both platforms
756
+
757
+ **Why it matters:** Functional consistency (same features, same flows) matters to
758
+ users. Visual consistency at the component level does not. Users do not compare your
759
+ iOS and Android apps side by side. They compare your Android app to every other Android
760
+ app on their phone.
761
+
762
+ **Fix:** Consistency should live at the brand level (colors, imagery, tone, IA) and
763
+ the feature level (same capabilities). Component-level rendering should follow
764
+ platform conventions.
765
+
766
+ ### 5.3 Not Testing on Both Platforms
767
+
768
+ **The mistake:** Developing primarily on one platform (often iOS, because designers
769
+ tend to use Macs) and treating the other as an afterthought.
770
+
771
+ **How it manifests:**
772
+ - Text overflow issues on Android where screen widths are smaller (320dp)
773
+ - Navigation bugs when using the Android system back button
774
+ - Status bar content invisible against colored backgrounds on one platform
775
+ - Safe area issues on devices with different notch shapes
776
+ - Font rendering differences causing layout shifts
777
+ - Keyboard behavior differences causing input fields to be obscured
778
+
779
+ **Testing requirements:**
780
+ - Test on at least one iOS device and one Android device (physical devices preferred)
781
+ - Test on the smallest supported screen width (320dp Android, 375pt iOS)
782
+ - Test on the largest screen (tablet if supported)
783
+ - Test with font scaling at maximum (200%)
784
+ - Test with system dark mode on both platforms
785
+ - Test with screen reader (VoiceOver on iOS, TalkBack on Android)
786
+ - Test with right-to-left (RTL) language if your app supports localization
787
+
788
+ ### 5.4 Performance-Impacting Design Choices
789
+
790
+ **The mistake:** Designing visual effects that are expensive to render in cross-platform
791
+ frameworks, particularly on lower-end Android devices.
792
+
793
+ **Specific anti-patterns:**
794
+
795
+ | Design Choice | Performance Impact | Alternative |
796
+ |---|---|---|
797
+ | Heavy box shadows with large blur radius | Forces CPU-based compositing | Use `elevation` on Android, subtle shadows on iOS |
798
+ | Gaussian blur backgrounds | Expensive real-time computation | Use solid color with opacity, or pre-rendered blurred images |
799
+ | Complex gradient animations | Continuous GPU draw calls | Use static gradients, animate opacity instead |
800
+ | Multiple overlapping transparent layers | Overdraw multiplies rendering cost | Flatten visual hierarchy, reduce layer count |
801
+ | Large unoptimized images in lists | Memory pressure, janky scrolling | Resize images server-side, use progressive loading |
802
+ | Animated SVGs during scroll | Competes with scroll rendering | Pause animations during scroll, use raster for complex graphics |
803
+ | Excessive use of `ClipRRect` (Flutter) | Forces saveLayer, expensive | Use `decoration` with `borderRadius` instead |
804
+
805
+ **Performance budgets:**
806
+ - Target 60 FPS (16.67ms per frame) on both platforms
807
+ - On Flutter: Use Impeller rendering engine (default on iOS, available on Android)
808
+ for hardware-accelerated shaders and consistent frame pacing
809
+ - On React Native: Use the New Architecture (Fabric renderer + TurboModules) for
810
+ reduced bridge overhead on animations
811
+ - Test on mid-range Android devices (not just flagship phones). A design that runs
812
+ smoothly on a Pixel 8 may stutter on a budget device with 3GB RAM
813
+
814
+ ### 5.5 Ignoring Design Tokens for Cross-Platform Consistency
815
+
816
+ **The mistake:** Defining colors, spacing, and typography values directly in platform
817
+ code without a shared design token system.
818
+
819
+ **How it manifests:**
820
+ - "Slightly different shades of blue" on iOS and Android
821
+ - Inconsistent padding and margins between platforms
822
+ - Typography weights that do not match across platforms
823
+ - Dark mode colors defined independently and diverging over time
824
+
825
+ **Fix:** Use a design token system. The W3C Design Tokens specification reached v1.0
826
+ stability in October 2025. Tools like Tokens Studio (Figma plugin) and Style Dictionary
827
+ can export tokens to Swift, Kotlin, Dart, and JavaScript from a single source of truth.
828
+
829
+ Token structure example:
830
+ ```json
831
+ {
832
+ "color": {
833
+ "primary": { "$value": "#1a73e8", "$type": "color" },
834
+ "surface": { "$value": "#ffffff", "$type": "color" },
835
+ "on-surface": { "$value": "#1c1b1f", "$type": "color" }
836
+ },
837
+ "spacing": {
838
+ "sm": { "$value": "8", "$type": "dimension" },
839
+ "md": { "$value": "16", "$type": "dimension" },
840
+ "lg": { "$value": "24", "$type": "dimension" }
841
+ },
842
+ "typography": {
843
+ "body": {
844
+ "fontSize": { "$value": "16", "$type": "dimension" },
845
+ "lineHeight": { "$value": "24", "$type": "dimension" },
846
+ "fontWeight": { "$value": "400", "$type": "number" }
847
+ }
848
+ }
849
+ }
850
+ ```
851
+
852
+ ### 5.6 Neglecting Platform-Specific Accessibility
853
+
854
+ **The mistake:** Implementing accessibility generically without accounting for
855
+ platform-specific assistive technology behaviors.
856
+
857
+ **How it manifests:**
858
+ - Semantic labels that work with VoiceOver but not TalkBack (or vice versa)
859
+ - Custom components missing `accessibilityRole` mappings per platform
860
+ - Ignoring iOS `accessibilityTraits` or Android `contentDescription` conventions
861
+ - Not testing with platform-specific switch control or voice control
862
+
863
+ **Fix:** Test with the native screen reader on each platform. Use the framework's
864
+ accessibility APIs that map to native accessibility trees.
865
+
866
+ ---
867
+
868
+ ## 6. Checklist
869
+
870
+ ### Cross-Platform Design Verification Checklist
871
+
872
+ Use this checklist before shipping any cross-platform mobile release. Every item should
873
+ be verified on both iOS and Android.
874
+
875
+ #### Platform Fidelity
876
+
877
+ - [ ] **Navigation pattern matches platform convention.** iOS uses bottom tab bar
878
+ with Cupertino styling. Android uses Material NavigationBar or navigation rail.
879
+ - [ ] **Back navigation works natively.** iOS supports edge-swipe back. Android
880
+ supports system back gesture with predictive back animation.
881
+ - [ ] **Alerts and dialogs use native components.** iOS shows Cupertino alerts.
882
+ Android shows Material dialogs. No custom alert UI for system-level interactions.
883
+ - [ ] **Date and time pickers use native components.** iOS shows wheel/compact picker.
884
+ Android shows Material calendar/clock dialog.
885
+ - [ ] **Share sheet invokes the native OS share UI** on both platforms.
886
+ - [ ] **Tap feedback matches platform.** iOS uses opacity change. Android uses
887
+ Material ripple effect.
888
+ - [ ] **Scroll physics match platform.** iOS bounces at boundaries. Android shows
889
+ edge glow or stretch overscroll.
890
+
891
+ #### Layout and Responsiveness
892
+
893
+ - [ ] **Tested at minimum screen width.** 320dp on Android, 375pt on iOS. No text
894
+ overflow, no clipped components, no horizontal scroll on single-column layouts.
895
+ - [ ] **Safe areas handled correctly.** Content does not render behind notches,
896
+ Dynamic Island, home indicators, or system bars. Tested in both portrait and
897
+ landscape orientations.
898
+ - [ ] **Keyboard behavior verified.** Input fields are not obscured by the keyboard
899
+ on either platform. Scroll-to-field behavior works. Return key is configured
900
+ correctly.
901
+
902
+ #### Typography and Accessibility
903
+
904
+ - [ ] **Font scaling tested at 200%.** Body text scales correctly. Containers expand
905
+ to accommodate larger text. No text truncation on critical information.
906
+ - [ ] **Screen reader audit completed.** All interactive elements have meaningful labels.
907
+ Tested with VoiceOver (iOS) and TalkBack (Android). Reading order is logical.
908
+ - [ ] **Touch targets meet minimum size.** At least 44pt on iOS, 48dp on Android.
909
+ At least 8dp spacing between adjacent targets.
910
+ - [ ] **Color contrast meets WCAG AA.** 4.5:1 for body text, 3:1 for large text,
911
+ on both light and dark themes.
912
+
913
+ #### Visual Consistency and Brand
914
+
915
+ - [ ] **Brand colors, imagery, and iconography are consistent** across platforms.
916
+ Verified against design tokens or shared style guide.
917
+ - [ ] **Dark mode implemented and tested** on both platforms. System dark mode
918
+ toggle is respected. All screens verified in both themes.
919
+ - [ ] **Design tokens are the single source of truth.** Colors, spacing, and typography
920
+ are not hardcoded per-platform. A shared token system generates platform values.
921
+
922
+ #### Performance
923
+
924
+ - [ ] **60 FPS maintained during scrolling and animations** on mid-range Android device
925
+ (not just flagship hardware). Flutter DevTools or React Native Performance Monitor
926
+ used to verify.
927
+ - [ ] **No excessive overdraw or GPU saturation** from layered transparent elements,
928
+ blur effects, or complex shadows on mid-range devices.
929
+ - [ ] **Images are appropriately sized and cached.** List views with images scroll
930
+ smoothly without memory spikes.
931
+
932
+ #### Testing Coverage
933
+
934
+ - [ ] **Tested on physical devices** -- at least one iOS device and one Android device.
935
+ Emulators/simulators alone are insufficient for gesture, haptic, and performance
936
+ verification.
937
+ - [ ] **Tested with RTL language** (if localization is supported). Layout mirrors
938
+ correctly. Text alignment and icon direction are appropriate.
939
+
940
+ ---
941
+
942
+ ## References
943
+
944
+ ### Official Platform Guidelines
945
+
946
+ - **Apple Human Interface Guidelines:** https://developer.apple.com/design/human-interface-guidelines/
947
+ - **Material Design 3:** https://m3.material.io/
948
+ - **Apple Liquid Glass (iOS 26):** https://developer.apple.com/design/new-design-gallery/
949
+
950
+ ### Framework Documentation
951
+
952
+ - **Flutter Platform Adaptations:** https://docs.flutter.dev/ui/adaptive-responsive/platform-adaptations
953
+ - **Flutter Adaptive Best Practices:** https://docs.flutter.dev/ui/adaptive-responsive/best-practices
954
+ - **Flutter Cupertino Widgets:** https://docs.flutter.dev/ui/widgets/cupertino
955
+ - **React Native Platform-Specific Code:** https://reactnative.dev/docs/platform-specific-code
956
+ - **Android Predictive Back:** https://developer.android.com/design/ui/mobile/guides/patterns/predictive-back
957
+ - **Android Predictive Back Implementation:** https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture
958
+ - **Flutter Predictive Back Integration:** https://docs.flutter.dev/platform-integration/android/predictive-back
959
+
960
+ ### Layout and Navigation
961
+
962
+ - **Material Design 3 Layout Spacing:** https://m3.material.io/foundations/layout/understanding-layout/spacing
963
+ - **React Navigation Safe Areas:** https://reactnavigation.org/docs/handling-safe-area/
964
+ - **Expo Safe Areas:** https://docs.expo.dev/develop/user-interface/safe-areas/
965
+ - **NNGroup Mobile Navigation Patterns:** https://www.nngroup.com/articles/mobile-navigation-patterns/
966
+
967
+ ### Design Tokens
968
+
969
+ - **W3C Design Tokens Specification:** https://www.w3.org/community/design-tokens/
970
+ - **Tokens Studio:** https://tokens.studio/
971
+
972
+ ### Typography
973
+
974
+ - **Material Design Typography:** https://m1.material.io/style/typography.html
975
+ - **8-Point Grid System:** https://spec.fm/specifics/8-pt-grid
976
+ - **Inter Font Family:** https://rsms.me/inter/
977
+
978
+ ### Cross-Platform Analysis
979
+
980
+ - **Toptal: Avoiding Bad Practices in iOS and Android Design:** https://www.toptal.com/developers/android/android-and-ios-app-design-tips
981
+ - **UXPin: Cross-Platform Experience Guide:** https://www.uxpin.com/studio/blog/cross-platform-experience/
982
+ - **InfoQ: iOS and Android Design Guidelines for React Native:** https://www.infoq.com/articles/ios-android-react-native-design-patterns/
983
+ - **iTitans: Design Tokens for Cross-Platform Consistency:** https://ititans.com/blog/cross-platform-mobile-ui-with-design-tokens/