@caoscompanybr/merlin 3.5.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 (762) hide show
  1. package/.claude/CLAUDE.md +216 -0
  2. package/.claude/hooks/README-license-gate.md +45 -0
  3. package/.claude/hooks/auto-summarize.js +47 -0
  4. package/.claude/hooks/context-monitor.js +60 -0
  5. package/.claude/hooks/doc-sync.js +111 -0
  6. package/.claude/hooks/license-gate.cjs +59 -0
  7. package/.claude/hooks/session-reset.js +27 -0
  8. package/.claude/hooks/thoughts-indexer.js +80 -0
  9. package/.claude/rules/merlin-constitution.md +27 -0
  10. package/.merlin-core/commands/README.md +19 -0
  11. package/.merlin-core/commands/founder-mode.md +51 -0
  12. package/.merlin-core/commands/git/commit.md +35 -0
  13. package/.merlin-core/commands/git/describe-pr.md +43 -0
  14. package/.merlin-core/commands/git/safe-commit.md +182 -0
  15. package/.merlin-core/commands/implementation/implement-plan.md +129 -0
  16. package/.merlin-core/commands/implementation/oneshot.md +63 -0
  17. package/.merlin-core/commands/implementation/tdd.md +152 -0
  18. package/.merlin-core/commands/planning/create-plan.md +184 -0
  19. package/.merlin-core/commands/planning/iterate-plan.md +45 -0
  20. package/.merlin-core/commands/planning/validate-plan.md +48 -0
  21. package/.merlin-core/commands/research/analyze-issue.md +155 -0
  22. package/.merlin-core/commands/research/research-codebase.md +157 -0
  23. package/.merlin-core/commands/review/adversarial-review.md +112 -0
  24. package/.merlin-core/commands/review/check.md +91 -0
  25. package/.merlin-core/commands/review/debug.md +135 -0
  26. package/.merlin-core/commands/review/doubts.md +178 -0
  27. package/.merlin-core/commands/review/engineering-audit.md +87 -0
  28. package/.merlin-core/commands/review/local-review.md +48 -0
  29. package/.merlin-core/commands/review/verify-goals.md +83 -0
  30. package/.merlin-core/commands/session/capture-feedback.md +74 -0
  31. package/.merlin-core/commands/session/capture-learning.md +155 -0
  32. package/.merlin-core/commands/session/check-objectives.md +85 -0
  33. package/.merlin-core/commands/session/conclude.md +125 -0
  34. package/.merlin-core/commands/session/create-handoff.md +88 -0
  35. package/.merlin-core/commands/session/create-objective.md +111 -0
  36. package/.merlin-core/commands/session/create-process.md +105 -0
  37. package/.merlin-core/commands/session/create-reminder.md +86 -0
  38. package/.merlin-core/commands/session/fast-start.md +261 -0
  39. package/.merlin-core/commands/session/recall-learnings.md +79 -0
  40. package/.merlin-core/commands/session/recall-processes.md +74 -0
  41. package/.merlin-core/commands/session/resume-handoff.md +51 -0
  42. package/.merlin-core/commands/session/run-process.md +53 -0
  43. package/.merlin-core/commands/special/beauty.md +89 -0
  44. package/.merlin-core/commands/special/common-ground.md +114 -0
  45. package/.merlin-core/commands/special/elicit.md +98 -0
  46. package/.merlin-core/commands/special/party.md +66 -0
  47. package/.merlin-core/commands/special/scrape.md +78 -0
  48. package/.merlin-core/commands/special/skill-audit.md +128 -0
  49. package/.merlin-core/commands/special/start-here.md +132 -0
  50. package/.merlin-core/constitution.md +442 -0
  51. package/.merlin-core/core/README.md +19 -0
  52. package/.merlin-core/core/alkimia/README.md +20 -0
  53. package/.merlin-core/core/alkimia/context/context-tracker.js +209 -0
  54. package/.merlin-core/core/alkimia/domain/domain-loader.js +215 -0
  55. package/.merlin-core/core/alkimia/engine.js +284 -0
  56. package/.merlin-core/core/alkimia/layers/l0-constitution.js +47 -0
  57. package/.merlin-core/core/alkimia/layers/l1-global.js +58 -0
  58. package/.merlin-core/core/alkimia/layers/l2-agent.js +58 -0
  59. package/.merlin-core/core/alkimia/layers/l3-workflow.js +54 -0
  60. package/.merlin-core/core/alkimia/layers/l4-task.js +45 -0
  61. package/.merlin-core/core/alkimia/layers/l5-squad.js +161 -0
  62. package/.merlin-core/core/alkimia/layers/l6-skill.js +520 -0
  63. package/.merlin-core/core/alkimia/layers/l7-star-command.js +87 -0
  64. package/.merlin-core/core/alkimia/layers/layer-processor.js +78 -0
  65. package/.merlin-core/core/alkimia/mandate.js +46 -0
  66. package/.merlin-core/core/alkimia/memory/doc-sync.js +201 -0
  67. package/.merlin-core/core/alkimia/memory/document-sharder.js +272 -0
  68. package/.merlin-core/core/alkimia/memory/git-history-retriever.js +225 -0
  69. package/.merlin-core/core/alkimia/memory/memory-bridge.js +97 -0
  70. package/.merlin-core/core/alkimia/memory/session-analyzer.js +400 -0
  71. package/.merlin-core/core/alkimia/memory/thoughts-indexer.js +477 -0
  72. package/.merlin-core/core/alkimia/memory/thoughts-provider.js +603 -0
  73. package/.merlin-core/core/alkimia/output/formatter.js +464 -0
  74. package/.merlin-core/core/alkimia/security/content-sanitizer.js +140 -0
  75. package/.merlin-core/core/alkimia/skill-importer.js +440 -0
  76. package/.merlin-core/core/alkimia/squads/default/.synapse/manifest +17 -0
  77. package/.merlin-core/core/alkimia/utils/frontmatter.js +321 -0
  78. package/.merlin-core/core/alkimia/utils/tokens.js +24 -0
  79. package/.merlin-core/core/approval/README.md +16 -0
  80. package/.merlin-core/core/approval/approval-engine.js +380 -0
  81. package/.merlin-core/core/approval/channels/cli-channel.js +50 -0
  82. package/.merlin-core/core/config/README.md +17 -0
  83. package/.merlin-core/core/config/config-cache.js +182 -0
  84. package/.merlin-core/core/config/config-loader.js +279 -0
  85. package/.merlin-core/core/config/config-resolver.js +411 -0
  86. package/.merlin-core/core/config/env-interpolator.js +123 -0
  87. package/.merlin-core/core/config/merge-utils.js +102 -0
  88. package/.merlin-core/core/config/schemas/core-config.schema.json +41 -0
  89. package/.merlin-core/core/config/schemas/framework-config.schema.json +24 -0
  90. package/.merlin-core/core/config/schemas/local-config.schema.json +23 -0
  91. package/.merlin-core/core/config/schemas/project-config.schema.json +189 -0
  92. package/.merlin-core/core/docs-consistency.js +140 -0
  93. package/.merlin-core/core/events/event-bus.js +344 -0
  94. package/.merlin-core/core/events/hook-handler.js +419 -0
  95. package/.merlin-core/core/execution/README.md +17 -0
  96. package/.merlin-core/core/execution/attempt-journal.js +380 -0
  97. package/.merlin-core/core/execution/autonomous-build-loop.js +637 -0
  98. package/.merlin-core/core/execution/build-orchestrator.js +296 -0
  99. package/.merlin-core/core/execution/build-state-manager.js +196 -0
  100. package/.merlin-core/core/execution/context-injector.js +204 -0
  101. package/.merlin-core/core/execution/cron-engine.js +247 -0
  102. package/.merlin-core/core/execution/cron-expression.js +148 -0
  103. package/.merlin-core/core/execution/env-preflight.js +423 -0
  104. package/.merlin-core/core/execution/guardrail-engine.js +745 -0
  105. package/.merlin-core/core/execution/heartbeat-engine.js +198 -0
  106. package/.merlin-core/core/execution/model-router.js +282 -0
  107. package/.merlin-core/core/execution/parallel-executor.js +378 -0
  108. package/.merlin-core/core/execution/parallel-monitor.js +201 -0
  109. package/.merlin-core/core/execution/party-session.js +311 -0
  110. package/.merlin-core/core/execution/rate-limit-manager.js +152 -0
  111. package/.merlin-core/core/execution/result-aggregator.js +215 -0
  112. package/.merlin-core/core/execution/semantic-merge-engine.js +320 -0
  113. package/.merlin-core/core/execution/subagent-dispatcher.js +721 -0
  114. package/.merlin-core/core/execution/success-verifier.js +227 -0
  115. package/.merlin-core/core/execution/task-metadata.js +105 -0
  116. package/.merlin-core/core/execution/team-executor.js +195 -0
  117. package/.merlin-core/core/execution/two-tier-editor.js +290 -0
  118. package/.merlin-core/core/execution/version-snapshot.js +294 -0
  119. package/.merlin-core/core/execution/wave-executor.js +224 -0
  120. package/.merlin-core/core/health-check/health-engine.js +415 -0
  121. package/.merlin-core/core/licensing/activation.js +281 -0
  122. package/.merlin-core/core/licensing/crc.js +103 -0
  123. package/.merlin-core/core/licensing/entitlement.js +99 -0
  124. package/.merlin-core/core/licensing/fingerprint.js +104 -0
  125. package/.merlin-core/core/licensing/gate.js +133 -0
  126. package/.merlin-core/core/licensing/hmac.js +42 -0
  127. package/.merlin-core/core/licensing/key.js +144 -0
  128. package/.merlin-core/core/licensing/license.js +212 -0
  129. package/.merlin-core/core/mcp/README.md +16 -0
  130. package/.merlin-core/core/mcp/browser-capability.js +191 -0
  131. package/.merlin-core/core/mcp/capability-mapper.js +92 -0
  132. package/.merlin-core/core/mcp/mcp-connector.js +278 -0
  133. package/.merlin-core/core/mcp/mcp-registry.js +101 -0
  134. package/.merlin-core/core/orchestration/README.md +17 -0
  135. package/.merlin-core/core/orchestration/agent-invoker.js +456 -0
  136. package/.merlin-core/core/orchestration/condition-evaluator.js +250 -0
  137. package/.merlin-core/core/orchestration/decision-tree.js +192 -0
  138. package/.merlin-core/core/orchestration/executor-assignment.js +372 -0
  139. package/.merlin-core/core/orchestration/gate-evaluator.js +653 -0
  140. package/.merlin-core/core/orchestration/intent-classifier.js +579 -0
  141. package/.merlin-core/core/orchestration/lock-manager.js +308 -0
  142. package/.merlin-core/core/orchestration/master-orchestrator.js +363 -0
  143. package/.merlin-core/core/orchestration/phase-tool-masks.js +194 -0
  144. package/.merlin-core/core/orchestration/recovery-handler.js +402 -0
  145. package/.merlin-core/core/orchestration/reflect-checkpoint.js +431 -0
  146. package/.merlin-core/core/orchestration/session-state.js +430 -0
  147. package/.merlin-core/core/orchestration/skill-dispatcher.js +255 -0
  148. package/.merlin-core/core/orchestration/step-loader.js +226 -0
  149. package/.merlin-core/core/orchestration/workflow-executor.js +864 -0
  150. package/.merlin-core/core/process/executor.js +231 -0
  151. package/.merlin-core/core/process/process-file.js +50 -0
  152. package/.merlin-core/core/process/secret-scan.js +86 -0
  153. package/.merlin-core/core/process/signature.js +77 -0
  154. package/.merlin-core/core/quality-gates/README.md +17 -0
  155. package/.merlin-core/core/quality-gates/layer1-precommit.js +110 -0
  156. package/.merlin-core/core/quality-gates/layer2-pr-automation.js +116 -0
  157. package/.merlin-core/core/quality-gates/layer3-human-review.js +133 -0
  158. package/.merlin-core/core/registry/service-registry.js +140 -0
  159. package/.merlin-core/core-config.yaml +159 -0
  160. package/.merlin-core/development/README.md +17 -0
  161. package/.merlin-core/development/agents/README.md +16 -0
  162. package/.merlin-core/development/agents/analyst.md +214 -0
  163. package/.merlin-core/development/agents/architect.md +166 -0
  164. package/.merlin-core/development/agents/data-engineer.md +154 -0
  165. package/.merlin-core/development/agents/dev.md +203 -0
  166. package/.merlin-core/development/agents/devops.md +236 -0
  167. package/.merlin-core/development/agents/grimorio.md +125 -0
  168. package/.merlin-core/development/agents/merlin-master.md +173 -0
  169. package/.merlin-core/development/agents/meta.md +190 -0
  170. package/.merlin-core/development/agents/pm.md +145 -0
  171. package/.merlin-core/development/agents/po.md +172 -0
  172. package/.merlin-core/development/agents/qa.md +275 -0
  173. package/.merlin-core/development/agents/researcher.md +218 -0
  174. package/.merlin-core/development/agents/scout.md +179 -0
  175. package/.merlin-core/development/agents/sm.md +148 -0
  176. package/.merlin-core/development/agents/ux.md +169 -0
  177. package/.merlin-core/development/agents/web-researcher.md +203 -0
  178. package/.merlin-core/development/checklists/adversarial-review-checklist.md +70 -0
  179. package/.merlin-core/development/checklists/operations-ci-checklist.md +40 -0
  180. package/.merlin-core/development/checklists/operations-deploy-checklist.md +54 -0
  181. package/.merlin-core/development/checklists/operations-publish-checklist.md +47 -0
  182. package/.merlin-core/development/checklists/source-verification-checklist.md +38 -0
  183. package/.merlin-core/development/templates/HEARTBEAT-template.md +46 -0
  184. package/.merlin-core/development/templates/ears-requirements-template.md +93 -0
  185. package/.merlin-core/development/templates/handoff-template.md +50 -0
  186. package/.merlin-core/development/templates/prd-template.md +62 -0
  187. package/.merlin-core/development/templates/research-template.md +53 -0
  188. package/.merlin-core/development/templates/spec-template.md +84 -0
  189. package/.merlin-core/development/workflows/brownfield-discovery.yaml +166 -0
  190. package/.merlin-core/development/workflows/brownfield-service.yaml +52 -0
  191. package/.merlin-core/development/workflows/development-cycle.yaml +57 -0
  192. package/.merlin-core/development/workflows/epic-orchestration.yaml +47 -0
  193. package/.merlin-core/development/workflows/folloni-funnel.yaml +177 -0
  194. package/.merlin-core/development/workflows/greenfield-fullstack.yaml +167 -0
  195. package/.merlin-core/development/workflows/greenfield-service.yaml +56 -0
  196. package/.merlin-core/development/workflows/qa-loop.yaml +115 -0
  197. package/.merlin-core/development/workflows/spec-pipeline.yaml +185 -0
  198. package/.merlin-core/development/workflows/steps/folloni-01-research.yaml +35 -0
  199. package/.merlin-core/development/workflows/steps/folloni-02-architecture.yaml +41 -0
  200. package/.merlin-core/development/workflows/steps/folloni-03-implementation.yaml +52 -0
  201. package/.merlin-core/development/workflows/story-development-cycle.yaml +67 -0
  202. package/.merlin-core/docs/GUIDE.md +413 -0
  203. package/.merlin-core/docs/merlin-commands-guide-pt.md +183 -0
  204. package/.merlin-core/framework-config.yaml +148 -0
  205. package/.merlin-core/hooks/README.md +16 -0
  206. package/.merlin-core/hooks/precompact-memory-flush.js +69 -0
  207. package/.merlin-core/hooks/pretooluse-remote-approve.js +113 -0
  208. package/.merlin-core/hooks/spikes/spike-b-hook.js +70 -0
  209. package/.merlin-core/hooks/spikes/spike-b-stub.js +70 -0
  210. package/.merlin-core/index.js +91 -0
  211. package/.merlin-core/local-config.yaml.template +31 -0
  212. package/.merlin-core/mcp-servers/lsp-bridge/index.js +397 -0
  213. package/.merlin-core/modules/scraping/module.json +23 -0
  214. package/.merlin-core/project-config.yaml +89 -0
  215. package/.merlin-core/schemas/README.md +18 -0
  216. package/.merlin-core/schemas/agent-hook-schema.json +152 -0
  217. package/.merlin-core/schemas/agent-schema.json +31 -0
  218. package/.merlin-core/schemas/command-schema.json +18 -0
  219. package/.merlin-core/schemas/feedback-schema.json +36 -0
  220. package/.merlin-core/schemas/handoff-schema.json +19 -0
  221. package/.merlin-core/schemas/learning-schema.json +51 -0
  222. package/.merlin-core/schemas/module.schema.json +124 -0
  223. package/.merlin-core/schemas/must-haves-schema.json +95 -0
  224. package/.merlin-core/schemas/objective-schema.json +23 -0
  225. package/.merlin-core/schemas/plan-schema.json +20 -0
  226. package/.merlin-core/schemas/process-schema.json +82 -0
  227. package/.merlin-core/schemas/reminder-schema.json +20 -0
  228. package/.merlin-core/schemas/skill-eval-schema.json +92 -0
  229. package/.merlin-core/schemas/skill-schema.json +77 -0
  230. package/.merlin-core/schemas/workflow-schema.json +38 -0
  231. package/.merlin-core/skills/README.md +16 -0
  232. package/.merlin-core/skills/domain/azure-cloud/SKILL.md +211 -0
  233. package/.merlin-core/skills/domain/azure-cloud/references/appinsights-instrumentation.md +63 -0
  234. package/.merlin-core/skills/domain/azure-cloud/references/azure-compliance.md +99 -0
  235. package/.merlin-core/skills/domain/azure-cloud/references/azure-cost-optimization.md +419 -0
  236. package/.merlin-core/skills/domain/azure-cloud/references/azure-deploy.md +82 -0
  237. package/.merlin-core/skills/domain/azure-cloud/references/azure-diagnostics.md +130 -0
  238. package/.merlin-core/skills/domain/azure-cloud/references/azure-prepare.md +134 -0
  239. package/.merlin-core/skills/domain/azure-cloud/references/azure-quotas.md +290 -0
  240. package/.merlin-core/skills/domain/azure-cloud/references/azure-rbac.md +11 -0
  241. package/.merlin-core/skills/domain/azure-cloud/references/azure-resource-lookup.md +97 -0
  242. package/.merlin-core/skills/domain/azure-cloud/references/azure-resource-visualizer.md +178 -0
  243. package/.merlin-core/skills/domain/azure-cloud/references/azure-storage.md +91 -0
  244. package/.merlin-core/skills/domain/azure-cloud/references/azure-validate.md +58 -0
  245. package/.merlin-core/skills/domain/azure-cloud/references/entra-app-registration.md +192 -0
  246. package/.merlin-core/skills/domain/browser-automation/SKILL.md +311 -0
  247. package/.merlin-core/skills/domain/browser-automation/references/agent-browser-skill.md +632 -0
  248. package/.merlin-core/skills/domain/browser-automation/references/authentication.md +308 -0
  249. package/.merlin-core/skills/domain/browser-automation/references/commands.md +266 -0
  250. package/.merlin-core/skills/domain/browser-automation/references/profiling.md +120 -0
  251. package/.merlin-core/skills/domain/browser-automation/references/proxy-support.md +194 -0
  252. package/.merlin-core/skills/domain/browser-automation/references/session-management.md +194 -0
  253. package/.merlin-core/skills/domain/browser-automation/references/snapshot-refs.md +196 -0
  254. package/.merlin-core/skills/domain/browser-automation/references/video-recording.md +173 -0
  255. package/.merlin-core/skills/domain/browser-automation/templates/authenticated-session.sh +105 -0
  256. package/.merlin-core/skills/domain/browser-automation/templates/capture-workflow.sh +69 -0
  257. package/.merlin-core/skills/domain/browser-automation/templates/form-automation.sh +62 -0
  258. package/.merlin-core/skills/domain/digital-marketing/SKILL.md +292 -0
  259. package/.merlin-core/skills/domain/digital-marketing/references/content-strategy.md +320 -0
  260. package/.merlin-core/skills/domain/digital-marketing/references/copy-formats.md +298 -0
  261. package/.merlin-core/skills/domain/digital-marketing/references/copy-methodology.md +180 -0
  262. package/.merlin-core/skills/domain/digital-marketing/references/email-sequences.md +135 -0
  263. package/.merlin-core/skills/domain/digital-marketing/references/launch-strategy.md +213 -0
  264. package/.merlin-core/skills/domain/digital-marketing/references/pricing-strategy.md +160 -0
  265. package/.merlin-core/skills/domain/digital-marketing/references/programmatic-seo.md +237 -0
  266. package/.merlin-core/skills/domain/digital-marketing/references/revops-lifecycle.md +170 -0
  267. package/.merlin-core/skills/domain/digital-marketing/references/revops-operations.md +167 -0
  268. package/.merlin-core/skills/domain/digital-marketing/references/schema-markup.md +190 -0
  269. package/.merlin-core/skills/domain/digital-marketing/references/strategy-frameworks.md +324 -0
  270. package/.merlin-core/skills/domain/digital-marketing/references/traffic-management.md +350 -0
  271. package/.merlin-core/skills/domain/expo-native-ui/SKILL.md +348 -0
  272. package/.merlin-core/skills/domain/expo-native-ui/references/animations.md +220 -0
  273. package/.merlin-core/skills/domain/expo-native-ui/references/api-routes.md +361 -0
  274. package/.merlin-core/skills/domain/expo-native-ui/references/cicd-workflows.md +84 -0
  275. package/.merlin-core/skills/domain/expo-native-ui/references/controls.md +266 -0
  276. package/.merlin-core/skills/domain/expo-native-ui/references/data-fetching.md +553 -0
  277. package/.merlin-core/skills/domain/expo-native-ui/references/deployment-stores.md +1353 -0
  278. package/.merlin-core/skills/domain/expo-native-ui/references/deployment.md +183 -0
  279. package/.merlin-core/skills/domain/expo-native-ui/references/dev-client.md +166 -0
  280. package/.merlin-core/skills/domain/expo-native-ui/references/dom-components.md +410 -0
  281. package/.merlin-core/skills/domain/expo-native-ui/references/form-sheet.md +253 -0
  282. package/.merlin-core/skills/domain/expo-native-ui/references/gradients.md +117 -0
  283. package/.merlin-core/skills/domain/expo-native-ui/references/icons.md +218 -0
  284. package/.merlin-core/skills/domain/expo-native-ui/references/media.md +245 -0
  285. package/.merlin-core/skills/domain/expo-native-ui/references/platform-native.md +75 -0
  286. package/.merlin-core/skills/domain/expo-native-ui/references/route-structure.md +229 -0
  287. package/.merlin-core/skills/domain/expo-native-ui/references/search.md +249 -0
  288. package/.merlin-core/skills/domain/expo-native-ui/references/storage.md +121 -0
  289. package/.merlin-core/skills/domain/expo-native-ui/references/tabs.md +433 -0
  290. package/.merlin-core/skills/domain/expo-native-ui/references/tailwind-native.md +473 -0
  291. package/.merlin-core/skills/domain/expo-native-ui/references/toolbar-and-headers.md +284 -0
  292. package/.merlin-core/skills/domain/expo-native-ui/references/upgrading-guides.md +674 -0
  293. package/.merlin-core/skills/domain/expo-native-ui/references/upgrading.md +127 -0
  294. package/.merlin-core/skills/domain/expo-native-ui/references/visual-effects.md +199 -0
  295. package/.merlin-core/skills/domain/expo-native-ui/references/webgpu-three.md +605 -0
  296. package/.merlin-core/skills/domain/expo-native-ui/references/zoom-transitions.md +161 -0
  297. package/.merlin-core/skills/domain/marketing-ops/SKILL.md +117 -0
  298. package/.merlin-core/skills/domain/marketing-ops/references/_index.md +78 -0
  299. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative/references/generative-tools.md +19 -0
  300. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative/references/platform-specs.md +19 -0
  301. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ad-creative.md +251 -0
  302. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/ad-copy-templates.md +19 -0
  303. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/audience-targeting.md +19 -0
  304. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/conversion-tracking.md +19 -0
  305. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads/references/platform-setup-checklists.md +19 -0
  306. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ads.md +322 -0
  307. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/content-patterns.md +19 -0
  308. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/content-types.md +19 -0
  309. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo/references/platform-ranking-factors.md +19 -0
  310. package/.merlin-core/skills/domain/marketing-ops/references/acquire/ai-seo.md +388 -0
  311. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/apple-specs.md +19 -0
  312. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/benchmarks.md +19 -0
  313. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/google-play-specs.md +19 -0
  314. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/report-template.md +19 -0
  315. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso/references/scoring-criteria.md +19 -0
  316. package/.merlin-core/skills/domain/marketing-ops/references/acquire/aso.md +316 -0
  317. package/.merlin-core/skills/domain/marketing-ops/references/acquire/co-marketing.md +305 -0
  318. package/.merlin-core/skills/domain/marketing-ops/references/acquire/community-marketing.md +169 -0
  319. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling/references/templates.md +19 -0
  320. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling/references/tool-reference.md +19 -0
  321. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitor-profiling.md +442 -0
  322. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors/references/content-architecture.md +19 -0
  323. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors/references/templates.md +19 -0
  324. package/.merlin-core/skills/domain/marketing-ops/references/acquire/competitors.md +281 -0
  325. package/.merlin-core/skills/domain/marketing-ops/references/acquire/content-strategy.md +16 -0
  326. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/directory-list.md +19 -0
  327. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/positioning-variations.md +19 -0
  328. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions/references/submission-tracker-template.md +19 -0
  329. package/.merlin-core/skills/domain/marketing-ops/references/acquire/directory-submissions.md +396 -0
  330. package/.merlin-core/skills/domain/marketing-ops/references/acquire/free-tools/references/tool-types.md +19 -0
  331. package/.merlin-core/skills/domain/marketing-ops/references/acquire/free-tools.md +196 -0
  332. package/.merlin-core/skills/domain/marketing-ops/references/acquire/image/references/ai-image-prompting.md +19 -0
  333. package/.merlin-core/skills/domain/marketing-ops/references/acquire/image.md +352 -0
  334. package/.merlin-core/skills/domain/marketing-ops/references/acquire/launch.md +18 -0
  335. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets/references/benchmarks.md +19 -0
  336. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets/references/format-guide.md +19 -0
  337. package/.merlin-core/skills/domain/marketing-ops/references/acquire/lead-magnets.md +333 -0
  338. package/.merlin-core/skills/domain/marketing-ops/references/acquire/programmatic-seo.md +16 -0
  339. package/.merlin-core/skills/domain/marketing-ops/references/acquire/schema.md +16 -0
  340. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit/references/ai-writing-detection.md +19 -0
  341. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit/references/international-seo.md +19 -0
  342. package/.merlin-core/skills/domain/marketing-ops/references/acquire/seo-audit.md +546 -0
  343. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/mermaid-templates.md +19 -0
  344. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/navigation-patterns.md +19 -0
  345. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture/references/site-type-templates.md +19 -0
  346. package/.merlin-core/skills/domain/marketing-ops/references/acquire/site-architecture.md +371 -0
  347. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/platform-limits.md +19 -0
  348. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/platforms.md +19 -0
  349. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/post-templates.md +19 -0
  350. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/reverse-engineering.md +19 -0
  351. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social/references/short-form-video.md +19 -0
  352. package/.merlin-core/skills/domain/marketing-ops/references/acquire/social.md +431 -0
  353. package/.merlin-core/skills/domain/marketing-ops/references/acquire/video/references/ai-video-prompting.md +19 -0
  354. package/.merlin-core/skills/domain/marketing-ops/references/acquire/video.md +353 -0
  355. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing/references/sample-size-guide.md +19 -0
  356. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing/references/test-templates.md +19 -0
  357. package/.merlin-core/skills/domain/marketing-ops/references/activate/ab-testing.md +379 -0
  358. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/event-library.md +19 -0
  359. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/ga4-implementation.md +19 -0
  360. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics/references/gtm-implementation.md +19 -0
  361. package/.merlin-core/skills/domain/marketing-ops/references/activate/analytics.md +323 -0
  362. package/.merlin-core/skills/domain/marketing-ops/references/activate/copy-editing.md +18 -0
  363. package/.merlin-core/skills/domain/marketing-ops/references/activate/copywriting.md +18 -0
  364. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro/references/experiments.md +19 -0
  365. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro/references/form.md +19 -0
  366. package/.merlin-core/skills/domain/marketing-ops/references/activate/cro.md +211 -0
  367. package/.merlin-core/skills/domain/marketing-ops/references/activate/emails.md +18 -0
  368. package/.merlin-core/skills/domain/marketing-ops/references/activate/paywalls/references/experiments.md +19 -0
  369. package/.merlin-core/skills/domain/marketing-ops/references/activate/paywalls.md +255 -0
  370. package/.merlin-core/skills/domain/marketing-ops/references/activate/popups.md +518 -0
  371. package/.merlin-core/skills/domain/marketing-ops/references/activate/pricing.md +18 -0
  372. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/deck-frameworks.md +19 -0
  373. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/demo-scripts.md +19 -0
  374. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/objection-library.md +19 -0
  375. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement/references/one-pager-templates.md +19 -0
  376. package/.merlin-core/skills/domain/marketing-ops/references/activate/sales-enablement.md +371 -0
  377. package/.merlin-core/skills/domain/marketing-ops/references/activate/signup.md +406 -0
  378. package/.merlin-core/skills/domain/marketing-ops/references/expand/co-marketing.md +18 -0
  379. package/.merlin-core/skills/domain/marketing-ops/references/expand/community-marketing.md +18 -0
  380. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals/references/affiliate-programs.md +19 -0
  381. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals/references/program-examples.md +19 -0
  382. package/.merlin-core/skills/domain/marketing-ops/references/expand/referrals.md +278 -0
  383. package/.merlin-core/skills/domain/marketing-ops/references/foundation/customer-research/references/source-guides.md +425 -0
  384. package/.merlin-core/skills/domain/marketing-ops/references/foundation/customer-research.md +284 -0
  385. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-ideas/references/ideas-by-category.md +216 -0
  386. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-ideas.md +188 -0
  387. package/.merlin-core/skills/domain/marketing-ops/references/foundation/marketing-psychology.md +532 -0
  388. package/.merlin-core/skills/domain/marketing-ops/references/foundation/product-marketing.md +276 -0
  389. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention/references/cancel-flow-patterns.md +19 -0
  390. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention/references/dunning-playbook.md +19 -0
  391. package/.merlin-core/skills/domain/marketing-ops/references/retain/churn-prevention.md +442 -0
  392. package/.merlin-core/skills/domain/marketing-ops/references/retain/onboarding/references/experiments.md +19 -0
  393. package/.merlin-core/skills/domain/marketing-ops/references/retain/onboarding.md +243 -0
  394. package/.merlin-core/skills/domain/marketing-ops/references/retain/revops-lifecycle.md +18 -0
  395. package/.merlin-core/skills/domain/marketing-ops/references/retain/revops-operations.md +18 -0
  396. package/.merlin-core/skills/domain/n8n-automation/SKILL.md +149 -0
  397. package/.merlin-core/skills/domain/n8n-automation/references/code-javascript.md +3744 -0
  398. package/.merlin-core/skills/domain/n8n-automation/references/code-python.md +3293 -0
  399. package/.merlin-core/skills/domain/n8n-automation/references/expression-syntax.md +1662 -0
  400. package/.merlin-core/skills/domain/n8n-automation/references/mcp-tools-expert.md +2111 -0
  401. package/.merlin-core/skills/domain/n8n-automation/references/node-configuration.md +2523 -0
  402. package/.merlin-core/skills/domain/n8n-automation/references/validation-expert.md +2491 -0
  403. package/.merlin-core/skills/domain/n8n-automation/references/workflow-patterns.md +4624 -0
  404. package/.merlin-core/skills/domain/ops-manual/SKILL.md +225 -0
  405. package/.merlin-core/skills/domain/ops-manual/references/elicitation-questions.md +141 -0
  406. package/.merlin-core/skills/domain/ops-manual/references/external-skills-registry.md +63 -0
  407. package/.merlin-core/skills/domain/ops-manual/references/operations-template.yaml +132 -0
  408. package/.merlin-core/skills/domain/remotion-best-practices/SKILL.md +99 -0
  409. package/.merlin-core/skills/domain/remotion-best-practices/rules/3d.md +86 -0
  410. package/.merlin-core/skills/domain/remotion-best-practices/rules/animations.md +27 -0
  411. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  412. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  413. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  414. package/.merlin-core/skills/domain/remotion-best-practices/rules/assets.md +78 -0
  415. package/.merlin-core/skills/domain/remotion-best-practices/rules/audio.md +172 -0
  416. package/.merlin-core/skills/domain/remotion-best-practices/rules/calculate-metadata.md +131 -0
  417. package/.merlin-core/skills/domain/remotion-best-practices/rules/can-decode.md +75 -0
  418. package/.merlin-core/skills/domain/remotion-best-practices/rules/charts.md +68 -0
  419. package/.merlin-core/skills/domain/remotion-best-practices/rules/compositions.md +154 -0
  420. package/.merlin-core/skills/domain/remotion-best-practices/rules/display-captions.md +126 -0
  421. package/.merlin-core/skills/domain/remotion-best-practices/rules/extract-frames.md +229 -0
  422. package/.merlin-core/skills/domain/remotion-best-practices/rules/fonts.md +152 -0
  423. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-audio-duration.md +58 -0
  424. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  425. package/.merlin-core/skills/domain/remotion-best-practices/rules/get-video-duration.md +58 -0
  426. package/.merlin-core/skills/domain/remotion-best-practices/rules/gifs.md +144 -0
  427. package/.merlin-core/skills/domain/remotion-best-practices/rules/images.md +134 -0
  428. package/.merlin-core/skills/domain/remotion-best-practices/rules/import-srt-captions.md +67 -0
  429. package/.merlin-core/skills/domain/remotion-best-practices/rules/lottie.md +70 -0
  430. package/.merlin-core/skills/domain/remotion-best-practices/rules/maps.md +414 -0
  431. package/.merlin-core/skills/domain/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  432. package/.merlin-core/skills/domain/remotion-best-practices/rules/measuring-text.md +143 -0
  433. package/.merlin-core/skills/domain/remotion-best-practices/rules/parameters.md +109 -0
  434. package/.merlin-core/skills/domain/remotion-best-practices/rules/sequencing.md +118 -0
  435. package/.merlin-core/skills/domain/remotion-best-practices/rules/tailwind.md +11 -0
  436. package/.merlin-core/skills/domain/remotion-best-practices/rules/text-animations.md +20 -0
  437. package/.merlin-core/skills/domain/remotion-best-practices/rules/timing.md +179 -0
  438. package/.merlin-core/skills/domain/remotion-best-practices/rules/transcribe-captions.md +19 -0
  439. package/.merlin-core/skills/domain/remotion-best-practices/rules/transitions.md +137 -0
  440. package/.merlin-core/skills/domain/remotion-best-practices/rules/transparent-videos.md +106 -0
  441. package/.merlin-core/skills/domain/remotion-best-practices/rules/trimming.md +51 -0
  442. package/.merlin-core/skills/domain/remotion-best-practices/rules/videos.md +171 -0
  443. package/.merlin-core/skills/domain/resend-email/SKILL.md +377 -0
  444. package/.merlin-core/skills/general/adversarial-review/SKILL.md +144 -0
  445. package/.merlin-core/skills/general/api-design/SKILL.md +513 -0
  446. package/.merlin-core/skills/general/apify-scrape/SKILL.md +137 -0
  447. package/.merlin-core/skills/general/apify-scrape/scripts/apify-scrape.sh +68 -0
  448. package/.merlin-core/skills/general/backup/SKILL.md +87 -0
  449. package/.merlin-core/skills/general/blkskrn/SKILL.md +392 -0
  450. package/.merlin-core/skills/general/blkskrn/references/animation-patterns.md +521 -0
  451. package/.merlin-core/skills/general/blkskrn/references/design-system.md +637 -0
  452. package/.merlin-core/skills/general/blkskrn/references/html-templates.md +440 -0
  453. package/.merlin-core/skills/general/blkskrn/references/presenter-template.md +45 -0
  454. package/.merlin-core/skills/general/blkskrn/references/slide-types.md +424 -0
  455. package/.merlin-core/skills/general/blkskrn/scripts/canvas-manager.js +502 -0
  456. package/.merlin-core/skills/general/blkskrn/scripts/presenter.js +90 -0
  457. package/.merlin-core/skills/general/blkskrn/templates/presenter.html +273 -0
  458. package/.merlin-core/skills/general/blkskrn/templates/slide-base.html +277 -0
  459. package/.merlin-core/skills/general/blkskrn/templates/viewer.html +165 -0
  460. package/.merlin-core/skills/general/browser-takeover/SKILL.md +53 -0
  461. package/.merlin-core/skills/general/claude-api/SKILL.md +90 -0
  462. package/.merlin-core/skills/general/code-javascript/SKILL.md +268 -0
  463. package/.merlin-core/skills/general/code-python/SKILL.md +424 -0
  464. package/.merlin-core/skills/general/code-style/SKILL.md +97 -0
  465. package/.merlin-core/skills/general/code-typescript/SKILL.md +361 -0
  466. package/.merlin-core/skills/general/cold-email/SKILL.md +164 -0
  467. package/.merlin-core/skills/general/cold-email/references/benchmarks.md +18 -0
  468. package/.merlin-core/skills/general/cold-email/references/follow-up-sequences.md +18 -0
  469. package/.merlin-core/skills/general/cold-email/references/frameworks.md +18 -0
  470. package/.merlin-core/skills/general/cold-email/references/personalization.md +18 -0
  471. package/.merlin-core/skills/general/cold-email/references/subject-lines.md +18 -0
  472. package/.merlin-core/skills/general/container-security/SKILL.md +462 -0
  473. package/.merlin-core/skills/general/context-management/SKILL.md +79 -0
  474. package/.merlin-core/skills/general/copy-editing/SKILL.md +501 -0
  475. package/.merlin-core/skills/general/copy-editing/references/checklist.md +18 -0
  476. package/.merlin-core/skills/general/copy-editing/references/content-refresh.md +18 -0
  477. package/.merlin-core/skills/general/copy-editing/references/plain-english-alternatives.md +18 -0
  478. package/.merlin-core/skills/general/copywriting/SKILL.md +294 -0
  479. package/.merlin-core/skills/general/copywriting/references/copy-frameworks.md +392 -0
  480. package/.merlin-core/skills/general/copywriting/references/natural-transitions.md +276 -0
  481. package/.merlin-core/skills/general/database/SKILL.md +561 -0
  482. package/.merlin-core/skills/general/database/references/postgres-concurrency.md +182 -0
  483. package/.merlin-core/skills/general/database/references/postgres-connections.md +97 -0
  484. package/.merlin-core/skills/general/database/references/postgres-data-patterns.md +159 -0
  485. package/.merlin-core/skills/general/database/references/postgres-monitoring.md +136 -0
  486. package/.merlin-core/skills/general/database/references/postgres-rls.md +140 -0
  487. package/.merlin-core/skills/general/database-provision/SKILL.md +56 -0
  488. package/.merlin-core/skills/general/deploy/SKILL.md +65 -0
  489. package/.merlin-core/skills/general/design-inspiration/SKILL.md +146 -0
  490. package/.merlin-core/skills/general/design-palette/SKILL.md +99 -0
  491. package/.merlin-core/skills/general/design-palette/references/full-palettes.md +144 -0
  492. package/.merlin-core/skills/general/design-system/SKILL.md +94 -0
  493. package/.merlin-core/skills/general/design-typography/SKILL.md +115 -0
  494. package/.merlin-core/skills/general/design-typography/references/full-pairings.md +144 -0
  495. package/.merlin-core/skills/general/design-ux-patterns/SKILL.md +155 -0
  496. package/.merlin-core/skills/general/design-ux-patterns/references/charts-data-guidelines.md +197 -0
  497. package/.merlin-core/skills/general/design-ux-patterns/references/landing-patterns.md +199 -0
  498. package/.merlin-core/skills/general/design-ux-patterns/references/professional-ui-checklist.md +56 -0
  499. package/.merlin-core/skills/general/design-ux-patterns/references/style-catalog.md +89 -0
  500. package/.merlin-core/skills/general/design-ux-patterns/references/ux-guidelines.md +837 -0
  501. package/.merlin-core/skills/general/discover-cloud/SKILL.md +108 -0
  502. package/.merlin-core/skills/general/doc-sync/SKILL.md +52 -0
  503. package/.merlin-core/skills/general/document-sharding/SKILL.md +53 -0
  504. package/.merlin-core/skills/general/docx/SKILL.md +418 -0
  505. package/.merlin-core/skills/general/docx/references/windows-setup.md +27 -0
  506. package/.merlin-core/skills/general/docx/scripts/__init__.py +1 -0
  507. package/.merlin-core/skills/general/docx/scripts/accept_changes.py +135 -0
  508. package/.merlin-core/skills/general/docx/scripts/comment.py +318 -0
  509. package/.merlin-core/skills/general/docx/scripts/office/__init__.py +0 -0
  510. package/.merlin-core/skills/general/docx/scripts/office/helpers/__init__.py +0 -0
  511. package/.merlin-core/skills/general/docx/scripts/office/helpers/merge_runs.py +199 -0
  512. package/.merlin-core/skills/general/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  513. package/.merlin-core/skills/general/docx/scripts/office/pack.py +159 -0
  514. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  515. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  516. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  517. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  518. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  519. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  520. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  521. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  522. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  523. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  524. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  525. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  526. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  527. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  528. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  529. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  530. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  531. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  532. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  533. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  534. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  535. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  536. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  537. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  538. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  539. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  540. package/.merlin-core/skills/general/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  541. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  542. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  543. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  544. package/.merlin-core/skills/general/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  545. package/.merlin-core/skills/general/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  546. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  547. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  548. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  549. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  550. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  551. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  552. package/.merlin-core/skills/general/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  553. package/.merlin-core/skills/general/docx/scripts/office/soffice.py +183 -0
  554. package/.merlin-core/skills/general/docx/scripts/office/unpack.py +132 -0
  555. package/.merlin-core/skills/general/docx/scripts/office/validate.py +111 -0
  556. package/.merlin-core/skills/general/docx/scripts/office/validators/__init__.py +15 -0
  557. package/.merlin-core/skills/general/docx/scripts/office/validators/base.py +847 -0
  558. package/.merlin-core/skills/general/docx/scripts/office/validators/docx.py +446 -0
  559. package/.merlin-core/skills/general/docx/scripts/office/validators/pptx.py +275 -0
  560. package/.merlin-core/skills/general/docx/scripts/office/validators/redlining.py +247 -0
  561. package/.merlin-core/skills/general/docx/scripts/templates/comments.xml +3 -0
  562. package/.merlin-core/skills/general/docx/scripts/templates/commentsExtended.xml +3 -0
  563. package/.merlin-core/skills/general/docx/scripts/templates/commentsExtensible.xml +3 -0
  564. package/.merlin-core/skills/general/docx/scripts/templates/commentsIds.xml +3 -0
  565. package/.merlin-core/skills/general/docx/scripts/templates/people.xml +3 -0
  566. package/.merlin-core/skills/general/elicitation/SKILL.md +188 -0
  567. package/.merlin-core/skills/general/engineering-audit/SKILL.md +122 -0
  568. package/.merlin-core/skills/general/find-and-edit/SKILL.md +102 -0
  569. package/.merlin-core/skills/general/first-party-docs/SKILL.md +51 -0
  570. package/.merlin-core/skills/general/frontend-design/SKILL.md +204 -0
  571. package/.merlin-core/skills/general/guardrails/SKILL.md +144 -0
  572. package/.merlin-core/skills/general/image-gen/SKILL.md +49 -0
  573. package/.merlin-core/skills/general/learning-capture/SKILL.md +192 -0
  574. package/.merlin-core/skills/general/lgpd-compliance-audit/SKILL.md +448 -0
  575. package/.merlin-core/skills/general/load-testing/SKILL.md +114 -0
  576. package/.merlin-core/skills/general/load-testing/docker/Dockerfile.dashboard +21 -0
  577. package/.merlin-core/skills/general/load-testing/docker/docker-compose.locust.yml +39 -0
  578. package/.merlin-core/skills/general/load-testing/requirements.txt +1 -0
  579. package/.merlin-core/skills/general/load-testing/scripts/compare_baseline.py +172 -0
  580. package/.merlin-core/skills/general/load-testing/scripts/run_local.py +245 -0
  581. package/.merlin-core/skills/general/load-testing/templates/load_shape_stepped.py +35 -0
  582. package/.merlin-core/skills/general/load-testing/templates/locustfile_dashboard.py +47 -0
  583. package/.merlin-core/skills/general/load-testing/templates/threshold_hook.py +36 -0
  584. package/.merlin-core/skills/general/mage-beauty/SKILL.md +89 -0
  585. package/.merlin-core/skills/general/mage-beauty/references/anti-patterns.md +148 -0
  586. package/.merlin-core/skills/general/mage-beauty/references/color-and-contrast.md +87 -0
  587. package/.merlin-core/skills/general/mage-beauty/references/interaction-design.md +99 -0
  588. package/.merlin-core/skills/general/mage-beauty/references/motion-design.md +90 -0
  589. package/.merlin-core/skills/general/mage-beauty/references/remotion-bridge.md +187 -0
  590. package/.merlin-core/skills/general/mage-beauty/references/responsive-and-multi-format.md +98 -0
  591. package/.merlin-core/skills/general/mage-beauty/references/spatial-design.md +88 -0
  592. package/.merlin-core/skills/general/mage-beauty/references/typography.md +60 -0
  593. package/.merlin-core/skills/general/mage-beauty/references/verb-adapt.md +102 -0
  594. package/.merlin-core/skills/general/mage-beauty/references/verb-animate.md +97 -0
  595. package/.merlin-core/skills/general/mage-beauty/references/verb-audit.md +99 -0
  596. package/.merlin-core/skills/general/mage-beauty/references/verb-bolder.md +94 -0
  597. package/.merlin-core/skills/general/mage-beauty/references/verb-cinematic.md +128 -0
  598. package/.merlin-core/skills/general/mage-beauty/references/verb-clarify.md +107 -0
  599. package/.merlin-core/skills/general/mage-beauty/references/verb-colorize.md +106 -0
  600. package/.merlin-core/skills/general/mage-beauty/references/verb-critique.md +88 -0
  601. package/.merlin-core/skills/general/mage-beauty/references/verb-delight.md +98 -0
  602. package/.merlin-core/skills/general/mage-beauty/references/verb-distill.md +97 -0
  603. package/.merlin-core/skills/general/mage-beauty/references/verb-harden.md +79 -0
  604. package/.merlin-core/skills/general/mage-beauty/references/verb-layout.md +104 -0
  605. package/.merlin-core/skills/general/mage-beauty/references/verb-onboard.md +98 -0
  606. package/.merlin-core/skills/general/mage-beauty/references/verb-optimize.md +124 -0
  607. package/.merlin-core/skills/general/mage-beauty/references/verb-overdrive.md +105 -0
  608. package/.merlin-core/skills/general/mage-beauty/references/verb-polish.md +91 -0
  609. package/.merlin-core/skills/general/mage-beauty/references/verb-quieter.md +95 -0
  610. package/.merlin-core/skills/general/mage-beauty/references/verb-rebrand.md +127 -0
  611. package/.merlin-core/skills/general/mage-beauty/references/verb-shape.md +160 -0
  612. package/.merlin-core/skills/general/mage-beauty/references/verb-typeset.md +109 -0
  613. package/.merlin-core/skills/general/mage-beauty/references/voice-and-microcopy.md +137 -0
  614. package/.merlin-core/skills/general/mcp-builder/SKILL.md +92 -0
  615. package/.merlin-core/skills/general/network-debug/SKILL.md +51 -0
  616. package/.merlin-core/skills/general/next-best-practices/SKILL.md +177 -0
  617. package/.merlin-core/skills/general/next-best-practices/references/async-patterns.md +87 -0
  618. package/.merlin-core/skills/general/next-best-practices/references/bundling.md +182 -0
  619. package/.merlin-core/skills/general/next-best-practices/references/data-patterns.md +306 -0
  620. package/.merlin-core/skills/general/next-best-practices/references/debug-tricks.md +125 -0
  621. package/.merlin-core/skills/general/next-best-practices/references/directives.md +74 -0
  622. package/.merlin-core/skills/general/next-best-practices/references/error-handling.md +232 -0
  623. package/.merlin-core/skills/general/next-best-practices/references/file-conventions.md +141 -0
  624. package/.merlin-core/skills/general/next-best-practices/references/font.md +257 -0
  625. package/.merlin-core/skills/general/next-best-practices/references/functions.md +108 -0
  626. package/.merlin-core/skills/general/next-best-practices/references/hydration-error.md +88 -0
  627. package/.merlin-core/skills/general/next-best-practices/references/image.md +179 -0
  628. package/.merlin-core/skills/general/next-best-practices/references/metadata.md +296 -0
  629. package/.merlin-core/skills/general/next-best-practices/references/parallel-routes.md +298 -0
  630. package/.merlin-core/skills/general/next-best-practices/references/route-handlers.md +146 -0
  631. package/.merlin-core/skills/general/next-best-practices/references/rsc-boundaries.md +164 -0
  632. package/.merlin-core/skills/general/next-best-practices/references/runtime-selection.md +40 -0
  633. package/.merlin-core/skills/general/next-best-practices/references/scripts.md +141 -0
  634. package/.merlin-core/skills/general/next-best-practices/references/self-hosting.md +384 -0
  635. package/.merlin-core/skills/general/next-best-practices/references/suspense-boundaries.md +67 -0
  636. package/.merlin-core/skills/general/next-steps/SKILL.md +43 -0
  637. package/.merlin-core/skills/general/party-mode/SKILL.md +57 -0
  638. package/.merlin-core/skills/general/pdf/SKILL.md +298 -0
  639. package/.merlin-core/skills/general/pdf/references/forms.md +312 -0
  640. package/.merlin-core/skills/general/pdf/references/reference.md +640 -0
  641. package/.merlin-core/skills/general/pdf/references/windows-setup.md +40 -0
  642. package/.merlin-core/skills/general/pdf/scripts/check_bounding_boxes.py +65 -0
  643. package/.merlin-core/skills/general/pdf/scripts/check_fillable_fields.py +11 -0
  644. package/.merlin-core/skills/general/pdf/scripts/convert_pdf_to_images.py +33 -0
  645. package/.merlin-core/skills/general/pdf/scripts/create_validation_image.py +37 -0
  646. package/.merlin-core/skills/general/pdf/scripts/extract_form_field_info.py +122 -0
  647. package/.merlin-core/skills/general/pdf/scripts/extract_form_structure.py +115 -0
  648. package/.merlin-core/skills/general/pdf/scripts/fill_fillable_fields.py +98 -0
  649. package/.merlin-core/skills/general/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  650. package/.merlin-core/skills/general/pptx/SKILL.md +133 -0
  651. package/.merlin-core/skills/general/pptx/references/editing.md +213 -0
  652. package/.merlin-core/skills/general/pptx/references/pptxgenjs.md +581 -0
  653. package/.merlin-core/skills/general/pptx/references/windows-setup.md +27 -0
  654. package/.merlin-core/skills/general/pptx/scripts/__init__.py +0 -0
  655. package/.merlin-core/skills/general/pptx/scripts/add_slide.py +195 -0
  656. package/.merlin-core/skills/general/pptx/scripts/clean.py +286 -0
  657. package/.merlin-core/skills/general/pptx/scripts/thumbnail.py +289 -0
  658. package/.merlin-core/skills/general/property-testing/SKILL.md +214 -0
  659. package/.merlin-core/skills/general/purge-leaked-secret/SKILL.md +383 -0
  660. package/.merlin-core/skills/general/reflection/SKILL.md +100 -0
  661. package/.merlin-core/skills/general/secret-safe-commit/SKILL.md +246 -0
  662. package/.merlin-core/skills/general/secret-safe-commit/templates/.gitleaks.toml +91 -0
  663. package/.merlin-core/skills/general/secret-safe-commit/templates/.pre-commit-config.yaml +57 -0
  664. package/.merlin-core/skills/general/secret-safe-commit/templates/secret-scan.yml +48 -0
  665. package/.merlin-core/skills/general/semantic-search/SKILL.md +79 -0
  666. package/.merlin-core/skills/general/skill-creator/SKILL.md +342 -0
  667. package/.merlin-core/skills/general/skill-creator/agents/analyzer.md +283 -0
  668. package/.merlin-core/skills/general/skill-creator/agents/comparator.md +211 -0
  669. package/.merlin-core/skills/general/skill-creator/agents/grader.md +227 -0
  670. package/.merlin-core/skills/general/skill-creator/assets/eval_review.html +146 -0
  671. package/.merlin-core/skills/general/skill-creator/eval-viewer/generate_review.py +471 -0
  672. package/.merlin-core/skills/general/skill-creator/eval-viewer/viewer.html +1325 -0
  673. package/.merlin-core/skills/general/skill-creator/references/schemas.md +439 -0
  674. package/.merlin-core/skills/general/skill-creator/scripts/__init__.py +0 -0
  675. package/.merlin-core/skills/general/skill-creator/scripts/aggregate_benchmark.py +401 -0
  676. package/.merlin-core/skills/general/skill-creator/scripts/generate_report.py +326 -0
  677. package/.merlin-core/skills/general/skill-creator/scripts/improve_description.py +247 -0
  678. package/.merlin-core/skills/general/skill-creator/scripts/package_skill.py +136 -0
  679. package/.merlin-core/skills/general/skill-creator/scripts/quick_validate.py +103 -0
  680. package/.merlin-core/skills/general/skill-creator/scripts/run_eval.py +310 -0
  681. package/.merlin-core/skills/general/skill-creator/scripts/run_loop.py +328 -0
  682. package/.merlin-core/skills/general/skill-creator/scripts/utils.py +47 -0
  683. package/.merlin-core/skills/general/start-here/SKILL.md +63 -0
  684. package/.merlin-core/skills/general/start-here/recipes.json +758 -0
  685. package/.merlin-core/skills/general/start-here/recipes.schema.json +57 -0
  686. package/.merlin-core/skills/general/static-analysis/SKILL.md +151 -0
  687. package/.merlin-core/skills/general/tailwind-design-system/SKILL.md +201 -0
  688. package/.merlin-core/skills/general/tailwind-design-system/references/advanced-v4.md +152 -0
  689. package/.merlin-core/skills/general/tailwind-design-system/references/component-patterns.md +353 -0
  690. package/.merlin-core/skills/general/teach-method/SKILL.md +86 -0
  691. package/.merlin-core/skills/general/team-execution/SKILL.md +67 -0
  692. package/.merlin-core/skills/general/testing/SKILL.md +412 -0
  693. package/.merlin-core/skills/general/token-economy/SKILL.md +55 -0
  694. package/.merlin-core/skills/general/vps-security-hardening/SKILL.md +406 -0
  695. package/.merlin-core/skills/general/web-quality/SKILL.md +180 -0
  696. package/.merlin-core/skills/general/webapp-testing/SKILL.md +153 -0
  697. package/.merlin-core/skills/general/webapp-testing/scripts/screenshot_compare.py +72 -0
  698. package/.merlin-core/skills/general/webapp-testing/scripts/with_server.py +103 -0
  699. package/.merlin-core/skills/general/xlsx/SKILL.md +167 -0
  700. package/.merlin-core/skills/general/xlsx/references/nodejs-sheetjs-styled-reports.md +141 -0
  701. package/.merlin-core/skills/general/xlsx/references/windows-setup.md +17 -0
  702. package/.merlin-core/skills/general/xlsx/scripts/recalc.py +184 -0
  703. package/.merlin-core/skills/general/xlsx/scripts/styled-report.js +130 -0
  704. package/.merlin-core/skills/general/yolo-mode/SKILL.md +60 -0
  705. package/.merlin-core/skills/general/youtube-transcript/SKILL.md +177 -0
  706. package/.merlin-core/skills/general/youtube-transcript/scripts/fetch_transcript.py +188 -0
  707. package/.merlin-core/skills/general/youtube-transcript/scripts/gladia_transcribe.mjs +230 -0
  708. package/.merlin-core/tools/commands/activate.js +72 -0
  709. package/.merlin-core/tools/commands/archive-thoughts.js +181 -0
  710. package/.merlin-core/tools/commands/backup.js +156 -0
  711. package/.merlin-core/tools/commands/certify-process.js +196 -0
  712. package/.merlin-core/tools/commands/convert.js +87 -0
  713. package/.merlin-core/tools/commands/cron.js +147 -0
  714. package/.merlin-core/tools/commands/disable.js +73 -0
  715. package/.merlin-core/tools/commands/doc-sync.js +127 -0
  716. package/.merlin-core/tools/commands/eval-skill.js +193 -0
  717. package/.merlin-core/tools/commands/frontmatter.js +49 -0
  718. package/.merlin-core/tools/commands/heartbeat.js +43 -0
  719. package/.merlin-core/tools/commands/index-thoughts.js +35 -0
  720. package/.merlin-core/tools/commands/install-remote-approve.js +184 -0
  721. package/.merlin-core/tools/commands/install.js +81 -0
  722. package/.merlin-core/tools/commands/lib/__verify__/diff-reports.js +170 -0
  723. package/.merlin-core/tools/commands/lib/fs-safe.js +186 -0
  724. package/.merlin-core/tools/commands/lib/preflight.js +607 -0
  725. package/.merlin-core/tools/commands/lib/preserve.js +232 -0
  726. package/.merlin-core/tools/commands/lib/project-config.template.yaml +69 -0
  727. package/.merlin-core/tools/commands/lib/report.js +231 -0
  728. package/.merlin-core/tools/commands/lib/settings-merge.js +134 -0
  729. package/.merlin-core/tools/commands/license.js +52 -0
  730. package/.merlin-core/tools/commands/list.js +125 -0
  731. package/.merlin-core/tools/commands/migrate-alkimia.js +271 -0
  732. package/.merlin-core/tools/commands/modules.js +68 -0
  733. package/.merlin-core/tools/commands/provision.js +83 -0
  734. package/.merlin-core/tools/commands/prune-feedback.js +114 -0
  735. package/.merlin-core/tools/commands/run-process.js +28 -0
  736. package/.merlin-core/tools/commands/state.js +79 -0
  737. package/.merlin-core/tools/commands/sync-bridges.js +197 -0
  738. package/.merlin-core/tools/commands/upgrade.js +1135 -0
  739. package/.merlin-core/tools/commands/validate-recipes.js +218 -0
  740. package/.merlin-core/tools/commands/validate.js +159 -0
  741. package/.merlin-core/tools/commands/yolo.js +82 -0
  742. package/.merlin-core/tools/compose-rules.mjs +179 -0
  743. package/.merlin-core/tools/disable-module.mjs +150 -0
  744. package/.merlin-core/tools/lib/deployer.mjs +131 -0
  745. package/.merlin-core/tools/lib/modules-activation.mjs +225 -0
  746. package/.merlin-core/tools/merlin-tools.js +153 -0
  747. package/.merlin-core/tools/migrate-frontmatter-v3.js +192 -0
  748. package/.merlin-core/tools/modules-catalog.mjs +174 -0
  749. package/.merlin-core/tools/provision-module.mjs +191 -0
  750. package/.merlin-core/tools/verify-module.mjs +99 -0
  751. package/.merlin-core/tools/vps-security-audit.sh +234 -0
  752. package/INSTALL.md +312 -0
  753. package/LICENSE +118 -0
  754. package/PRIVACY-LICENSING.md +65 -0
  755. package/README.md +391 -0
  756. package/bin/README.md +15 -0
  757. package/bin/convert-to-merlin.sh +109 -0
  758. package/bin/fleet-patch-hooks.sh +144 -0
  759. package/bin/fleet-patch-v3-fixes.sh +127 -0
  760. package/bin/merlin-init.js +232 -0
  761. package/bin/merlin.js +321 -0
  762. package/package.json +127 -0
@@ -0,0 +1,1353 @@
1
+ # TestFlight
2
+
3
+ Always ship to TestFlight first. Internal testers, then external testers, then App Store. Never skip this.
4
+
5
+ ## Submit
6
+
7
+ ```bash
8
+ npx testflight
9
+ ```
10
+
11
+ That's it. One command builds and submits to TestFlight.
12
+
13
+ ## Skip the Prompts
14
+
15
+ Set these once and forget:
16
+
17
+ ```bash
18
+ EXPO_APPLE_ID=you@email.com
19
+ EXPO_APPLE_TEAM_ID=XXXXXXXXXX
20
+ ```
21
+
22
+ The CLI prints your Team ID when you run `npx testflight`. Copy it.
23
+
24
+ ## Why TestFlight First
25
+
26
+ - Internal testers get builds instantly (no review)
27
+ - External testers require one Beta App Review, then instant updates
28
+ - Catch crashes before App Store review rejects you
29
+ - TestFlight crash reports are better than App Store crash reports
30
+ - 90 days to test before builds expire
31
+ - Real users on real devices, not simulators
32
+
33
+ ## Tester Strategy
34
+
35
+ **Internal (100 max)**: Your team. Immediate access. Use for every build.
36
+
37
+ **External (10,000 max)**: Beta users. First build needs review (~24h), then instant. Always have an external group—even if it's just friends. Real feedback beats assumptions.
38
+
39
+ ## Tips
40
+
41
+ - Submit to external TestFlight the moment internal looks stable
42
+ - Beta App Review is faster and more lenient than App Store Review
43
+ - Add release notes—testers actually read them
44
+ - Use TestFlight's built-in feedback and screenshots
45
+ - Never go straight to App Store. Ever.
46
+
47
+ ## Troubleshooting
48
+
49
+ **"No suitable application records found"**
50
+ Create the app in App Store Connect first. Bundle ID must match.
51
+
52
+ **"The bundle version must be higher"**
53
+ Use `autoIncrement: true` in `eas.json`. Problem solved.
54
+
55
+ **Credentials issues**
56
+
57
+ ```bash
58
+ eas credentials -p ios
59
+ ```
60
+
61
+ ---
62
+
63
+ # Submitting to iOS App Store
64
+
65
+ ## Prerequisites
66
+
67
+ 1. **Apple Developer Account** - Enroll at [developer.apple.com](https://developer.apple.com)
68
+ 2. **App Store Connect App** - Create your app record before first submission
69
+ 3. **Apple Credentials** - Configure via EAS or environment variables
70
+
71
+ ## Credential Setup
72
+
73
+ ### Using EAS Credentials
74
+
75
+ ```bash
76
+ eas credentials -p ios
77
+ ```
78
+
79
+ This interactive flow helps you:
80
+
81
+ - Create or select a distribution certificate
82
+ - Create or select a provisioning profile
83
+ - Configure App Store Connect API key (recommended)
84
+
85
+ ### App Store Connect API Key (Recommended)
86
+
87
+ API keys avoid 2FA prompts in CI/CD:
88
+
89
+ 1. Go to App Store Connect → Users and Access → Keys
90
+ 2. Click "+" to create a new key
91
+ 3. Select "App Manager" role (minimum for submissions)
92
+ 4. Download the `.p8` key file
93
+
94
+ Configure in `eas.json`:
95
+
96
+ ```json
97
+ {
98
+ "submit": {
99
+ "production": {
100
+ "ios": {
101
+ "ascApiKeyPath": "./AuthKey_XXXXX.p8",
102
+ "ascApiKeyIssuerId": "xxxxx-xxxx-xxxx-xxxx-xxxxx",
103
+ "ascApiKeyId": "XXXXXXXXXX"
104
+ }
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ Or use environment variables:
111
+
112
+ ```bash
113
+ EXPO_ASC_API_KEY_PATH=./AuthKey.p8
114
+ EXPO_ASC_API_KEY_ISSUER_ID=xxxxx-xxxx-xxxx-xxxx-xxxxx
115
+ EXPO_ASC_API_KEY_ID=XXXXXXXXXX
116
+ ```
117
+
118
+ ### Apple ID Authentication (Alternative)
119
+
120
+ For manual submissions, you can use Apple ID:
121
+
122
+ ```bash
123
+ EXPO_APPLE_ID=your@email.com
124
+ EXPO_APPLE_TEAM_ID=XXXXXXXXXX
125
+ ```
126
+
127
+ Note: Requires app-specific password for accounts with 2FA.
128
+
129
+ ## Submission Commands
130
+
131
+ ```bash
132
+ # Build and submit to App Store Connect
133
+ eas build -p ios --profile production --submit
134
+
135
+ # Submit latest build
136
+ eas submit -p ios --latest
137
+
138
+ # Submit specific build
139
+ eas submit -p ios --id BUILD_ID
140
+
141
+ # Quick TestFlight submission
142
+ npx testflight
143
+ ```
144
+
145
+ ## App Store Connect Configuration
146
+
147
+ ### First-Time Setup
148
+
149
+ Before submitting, complete in App Store Connect:
150
+
151
+ 1. **App Information**
152
+ - Primary language
153
+ - Bundle ID (must match `app.json`)
154
+ - SKU (unique identifier)
155
+
156
+ 2. **Pricing and Availability**
157
+ - Price tier
158
+ - Available countries
159
+
160
+ 3. **App Privacy**
161
+ - Privacy policy URL
162
+ - Data collection declarations
163
+
164
+ 4. **App Review Information**
165
+ - Contact information
166
+ - Demo account (if login required)
167
+ - Notes for reviewers
168
+
169
+ ### EAS Configuration
170
+
171
+ ```json
172
+ {
173
+ "cli": {
174
+ "version": ">= 16.0.1",
175
+ "appVersionSource": "remote"
176
+ },
177
+ "build": {
178
+ "production": {
179
+ "ios": {
180
+ "resourceClass": "m-medium",
181
+ "autoIncrement": true
182
+ }
183
+ }
184
+ },
185
+ "submit": {
186
+ "production": {
187
+ "ios": {
188
+ "appleId": "your@email.com",
189
+ "ascAppId": "1234567890",
190
+ "appleTeamId": "XXXXXXXXXX"
191
+ }
192
+ }
193
+ }
194
+ }
195
+ ```
196
+
197
+ Find `ascAppId` in App Store Connect → App Information → Apple ID.
198
+
199
+ ## TestFlight vs App Store
200
+
201
+ ### TestFlight (Beta Testing)
202
+
203
+ - Builds go to TestFlight automatically after submission
204
+ - Internal testers (up to 100) - immediate access
205
+ - External testers (up to 10,000) - requires beta review
206
+ - Builds expire after 90 days
207
+
208
+ ### App Store (Production)
209
+
210
+ - Requires passing App Review
211
+ - Submit for review from App Store Connect
212
+ - Choose release timing (immediate, scheduled, manual)
213
+
214
+ ## App Review Process
215
+
216
+ ### What Reviewers Check
217
+
218
+ 1. **Functionality** - App works as described
219
+ 2. **UI/UX** - Follows Human Interface Guidelines
220
+ 3. **Content** - Appropriate and accurate
221
+ 4. **Privacy** - Data handling matches declarations
222
+ 5. **Legal** - Complies with local laws
223
+
224
+ ### Common Rejection Reasons
225
+
226
+ | Issue | Solution |
227
+ | ------------------------------------- | ---------------------------------- |
228
+ | Crashes/bugs | Test thoroughly before submission |
229
+ | Incomplete metadata | Fill all required fields |
230
+ | Placeholder content | Remove "lorem ipsum" and test data |
231
+ | Missing login credentials | Provide demo account |
232
+ | Privacy policy missing | Add URL in App Store Connect |
233
+ | Guideline 4.2 (minimum functionality) | Ensure app provides value |
234
+
235
+ ### Expedited Review
236
+
237
+ Request expedited review for:
238
+
239
+ - Critical bug fixes
240
+ - Time-sensitive events
241
+ - Security issues
242
+
243
+ Go to App Store Connect → your app → App Review → Request Expedited Review.
244
+
245
+ ## Version and Build Numbers
246
+
247
+ iOS uses two version identifiers:
248
+
249
+ - **Version** (`CFBundleShortVersionString`): User-facing, e.g., "1.2.3"
250
+ - **Build Number** (`CFBundleVersion`): Internal, must increment for each upload
251
+
252
+ Configure in `app.json`:
253
+
254
+ ```json
255
+ {
256
+ "expo": {
257
+ "version": "1.2.3",
258
+ "ios": {
259
+ "buildNumber": "1"
260
+ }
261
+ }
262
+ }
263
+ ```
264
+
265
+ With `autoIncrement: true`, EAS handles build numbers automatically.
266
+
267
+ ## Release Options
268
+
269
+ ### Automatic Release
270
+
271
+ Release immediately when approved:
272
+
273
+ ```json
274
+ {
275
+ "apple": {
276
+ "release": {
277
+ "automaticRelease": true
278
+ }
279
+ }
280
+ }
281
+ ```
282
+
283
+ ### Scheduled Release
284
+
285
+ ```json
286
+ {
287
+ "apple": {
288
+ "release": {
289
+ "automaticRelease": "2025-03-01T10:00:00Z"
290
+ }
291
+ }
292
+ }
293
+ ```
294
+
295
+ ### Phased Release
296
+
297
+ Gradual rollout over 7 days:
298
+
299
+ ```json
300
+ {
301
+ "apple": {
302
+ "release": {
303
+ "phasedRelease": true
304
+ }
305
+ }
306
+ }
307
+ ```
308
+
309
+ Rollout: Day 1 (1%) → Day 2 (2%) → Day 3 (5%) → Day 4 (10%) → Day 5 (20%) → Day 6 (50%) → Day 7 (100%)
310
+
311
+ ## Certificates and Provisioning
312
+
313
+ ### Distribution Certificate
314
+
315
+ - Required for App Store submissions
316
+ - Limited to 3 per Apple Developer account
317
+ - Valid for 1 year
318
+ - EAS manages automatically
319
+
320
+ ### Provisioning Profile
321
+
322
+ - Links app, certificate, and entitlements
323
+ - App Store profiles don't include device UDIDs
324
+ - EAS creates and manages automatically
325
+
326
+ ### Check Current Credentials
327
+
328
+ ```bash
329
+ eas credentials -p ios
330
+
331
+ # Sync with Apple Developer Portal
332
+ eas credentials -p ios --sync
333
+ ```
334
+
335
+ ## App Store Metadata
336
+
337
+ Use EAS Metadata to manage App Store listing from code:
338
+
339
+ ```bash
340
+ # Pull existing metadata
341
+ eas metadata:pull
342
+
343
+ # Push changes
344
+ eas metadata:push
345
+ ```
346
+
347
+ See ./app-store-metadata.md for detailed configuration.
348
+
349
+ ## Troubleshooting
350
+
351
+ ### "No suitable application records found"
352
+
353
+ Create the app in App Store Connect first with matching bundle ID.
354
+
355
+ ### "The bundle version must be higher"
356
+
357
+ Increment build number. With `autoIncrement: true`, this is automatic.
358
+
359
+ ### "Missing compliance information"
360
+
361
+ Add export compliance to `app.json`:
362
+
363
+ ```json
364
+ {
365
+ "expo": {
366
+ "ios": {
367
+ "config": {
368
+ "usesNonExemptEncryption": false
369
+ }
370
+ }
371
+ }
372
+ }
373
+ ```
374
+
375
+ ### "Invalid provisioning profile"
376
+
377
+ ```bash
378
+ eas credentials -p ios --sync
379
+ ```
380
+
381
+ ### Build stuck in "Processing"
382
+
383
+ App Store Connect processing can take 5-30 minutes. Check status in App Store Connect → TestFlight.
384
+
385
+ ## CI/CD Integration
386
+
387
+ For automated submissions in CI/CD:
388
+
389
+ ```yaml
390
+ # .eas/workflows/release.yml
391
+ name: Release to App Store
392
+
393
+ on:
394
+ push:
395
+ tags: ["v*"]
396
+
397
+ jobs:
398
+ build:
399
+ type: build
400
+ params:
401
+ platform: ios
402
+ profile: production
403
+
404
+ submit:
405
+ type: submit
406
+ needs: [build]
407
+ params:
408
+ platform: ios
409
+ profile: production
410
+ ```
411
+
412
+ ## Tips
413
+
414
+ - Submit to TestFlight early and often for feedback
415
+ - Use beta app review for external testers to catch issues before App Store review
416
+ - Respond to reviewer questions promptly in App Store Connect
417
+ - Keep demo account credentials up to date
418
+ - Monitor App Store Connect notifications for review updates
419
+ - Use phased release for major updates to catch issues early
420
+
421
+ ---
422
+
423
+ # Submitting to Google Play Store
424
+
425
+ ## Prerequisites
426
+
427
+ 1. **Google Play Console Account** - Register at [play.google.com/console](https://play.google.com/console)
428
+ 2. **App Created in Console** - Create your app listing before first submission
429
+ 3. **Service Account** - For automated submissions via EAS
430
+
431
+ ## Service Account Setup
432
+
433
+ ### 1. Create Service Account
434
+
435
+ 1. Go to Google Cloud Console → IAM & Admin → Service Accounts
436
+ 2. Create a new service account
437
+ 3. Grant the "Service Account User" role
438
+ 4. Create and download a JSON key
439
+
440
+ ### 2. Link to Play Console
441
+
442
+ 1. Go to Play Console → Setup → API access
443
+ 2. Click "Link" next to your Google Cloud project
444
+ 3. Under "Service accounts", click "Manage Play Console permissions"
445
+ 4. Grant "Release to production" permission (or appropriate track permissions)
446
+
447
+ ### 3. Configure EAS
448
+
449
+ Add the service account key path to `eas.json`:
450
+
451
+ ```json
452
+ {
453
+ "submit": {
454
+ "production": {
455
+ "android": {
456
+ "serviceAccountKeyPath": "./google-service-account.json",
457
+ "track": "internal"
458
+ }
459
+ }
460
+ }
461
+ }
462
+ ```
463
+
464
+ Store the key file securely and add it to `.gitignore`.
465
+
466
+ ## Environment Variables
467
+
468
+ For CI/CD, use environment variables instead of file paths:
469
+
470
+ ```bash
471
+ # Base64-encoded service account JSON
472
+ EXPO_ANDROID_SERVICE_ACCOUNT_KEY_BASE64=...
473
+ ```
474
+
475
+ Or use EAS Secrets:
476
+
477
+ ```bash
478
+ eas secret:create --name GOOGLE_SERVICE_ACCOUNT --value "$(cat google-service-account.json)" --type file
479
+ ```
480
+
481
+ Then reference in `eas.json`:
482
+
483
+ ```json
484
+ {
485
+ "submit": {
486
+ "production": {
487
+ "android": {
488
+ "serviceAccountKeyPath": "@secret:GOOGLE_SERVICE_ACCOUNT"
489
+ }
490
+ }
491
+ }
492
+ }
493
+ ```
494
+
495
+ ## Release Tracks
496
+
497
+ Google Play uses tracks for staged rollouts:
498
+
499
+ | Track | Purpose |
500
+ | ------------ | ------------------------------------ |
501
+ | `internal` | Internal testing (up to 100 testers) |
502
+ | `alpha` | Closed testing |
503
+ | `beta` | Open testing |
504
+ | `production` | Public release |
505
+
506
+ ### Track Configuration
507
+
508
+ ```json
509
+ {
510
+ "submit": {
511
+ "production": {
512
+ "android": {
513
+ "track": "production",
514
+ "releaseStatus": "completed"
515
+ }
516
+ },
517
+ "internal": {
518
+ "android": {
519
+ "track": "internal",
520
+ "releaseStatus": "completed"
521
+ }
522
+ }
523
+ }
524
+ }
525
+ ```
526
+
527
+ ### Release Status Options
528
+
529
+ - `completed` - Immediately available on the track
530
+ - `draft` - Upload only, release manually in Console
531
+ - `halted` - Pause an in-progress rollout
532
+ - `inProgress` - Staged rollout (requires `rollout` percentage)
533
+
534
+ ## Staged Rollout
535
+
536
+ ```json
537
+ {
538
+ "submit": {
539
+ "production": {
540
+ "android": {
541
+ "track": "production",
542
+ "releaseStatus": "inProgress",
543
+ "rollout": 0.1
544
+ }
545
+ }
546
+ }
547
+ }
548
+ ```
549
+
550
+ This releases to 10% of users. Increase via Play Console or subsequent submissions.
551
+
552
+ ## Submission Commands
553
+
554
+ ```bash
555
+ # Build and submit to internal track
556
+ eas build -p android --profile production --submit
557
+
558
+ # Submit existing build to Play Store
559
+ eas submit -p android --latest
560
+
561
+ # Submit specific build
562
+ eas submit -p android --id BUILD_ID
563
+ ```
564
+
565
+ ## App Signing
566
+
567
+ ### Google Play App Signing (Recommended)
568
+
569
+ EAS uses Google Play App Signing by default:
570
+
571
+ 1. First upload: EAS creates upload key, Play Store manages signing key
572
+ 2. Play Store re-signs your app with the signing key
573
+ 3. Upload key can be reset if compromised
574
+
575
+ ### Checking Signing Status
576
+
577
+ ```bash
578
+ eas credentials -p android
579
+ ```
580
+
581
+ ## Version Codes
582
+
583
+ Android requires incrementing `versionCode` for each upload:
584
+
585
+ ```json
586
+ {
587
+ "build": {
588
+ "production": {
589
+ "autoIncrement": true
590
+ }
591
+ }
592
+ }
593
+ ```
594
+
595
+ With `appVersionSource: "remote"`, EAS tracks version codes automatically.
596
+
597
+ ## First Submission Checklist
598
+
599
+ Before your first Play Store submission:
600
+
601
+ - [ ] Create app in Google Play Console
602
+ - [ ] Complete app content declaration (privacy policy, ads, etc.)
603
+ - [ ] Set up store listing (title, description, screenshots)
604
+ - [ ] Complete content rating questionnaire
605
+ - [ ] Set up pricing and distribution
606
+ - [ ] Create service account with proper permissions
607
+ - [ ] Configure `eas.json` with service account path
608
+
609
+ ## Common Issues
610
+
611
+ ### "App not found"
612
+
613
+ The app must exist in Play Console before EAS can submit. Create it manually first.
614
+
615
+ ### "Version code already used"
616
+
617
+ Increment `versionCode` in `app.json` or use `autoIncrement: true` in `eas.json`.
618
+
619
+ ### "Service account lacks permission"
620
+
621
+ Ensure the service account has "Release to production" permission in Play Console → API access.
622
+
623
+ ### "APK not acceptable"
624
+
625
+ Play Store requires AAB (Android App Bundle) for new apps:
626
+
627
+ ```json
628
+ {
629
+ "build": {
630
+ "production": {
631
+ "android": {
632
+ "buildType": "app-bundle"
633
+ }
634
+ }
635
+ }
636
+ }
637
+ ```
638
+
639
+ ## Internal Testing Distribution
640
+
641
+ For quick internal distribution without Play Store:
642
+
643
+ ```bash
644
+ # Build with internal distribution
645
+ eas build -p android --profile development
646
+
647
+ # Share the APK link with testers
648
+ ```
649
+
650
+ Or use EAS Update for OTA updates to existing installs.
651
+
652
+ ## Monitoring Submissions
653
+
654
+ ```bash
655
+ # Check submission status
656
+ eas submit:list -p android
657
+
658
+ # View specific submission
659
+ eas submit:view SUBMISSION_ID
660
+ ```
661
+
662
+ ## Tips
663
+
664
+ - Start with `internal` track for testing before production
665
+ - Use staged rollouts for production releases
666
+ - Keep service account key secure - never commit to git
667
+ - Set up Play Console notifications for review status
668
+ - Pre-launch reports in Play Console catch issues before review
669
+
670
+ ---
671
+
672
+ # App Store Metadata
673
+
674
+ Manage App Store metadata and optimize for ASO using EAS Metadata.
675
+
676
+ ## What is EAS Metadata?
677
+
678
+ EAS Metadata automates App Store presence management from the command line using a `store.config.json` file instead of manually filling forms in App Store Connect. It includes built-in validation to catch common rejection pitfalls.
679
+
680
+ **Current Status:** Preview, Apple App Store only.
681
+
682
+ ## Getting Started
683
+
684
+ ### Pull Existing Metadata
685
+
686
+ If your app is already published, pull current metadata:
687
+
688
+ ```bash
689
+ eas metadata:pull
690
+ ```
691
+
692
+ This creates `store.config.json` with your current App Store configuration.
693
+
694
+ ### Push Metadata Updates
695
+
696
+ After editing your config, push changes:
697
+
698
+ ```bash
699
+ eas metadata:push
700
+ ```
701
+
702
+ **Important:** You must submit a binary via `eas submit` before pushing metadata for new apps.
703
+
704
+ ## Configuration File
705
+
706
+ Create `store.config.json` at your project root:
707
+
708
+ ```json
709
+ {
710
+ "configVersion": 0,
711
+ "apple": {
712
+ "copyright": "2025 Your Company",
713
+ "categories": ["UTILITIES", "PRODUCTIVITY"],
714
+ "info": {
715
+ "en-US": {
716
+ "title": "App Name",
717
+ "subtitle": "Your compelling tagline",
718
+ "description": "Full app description...",
719
+ "keywords": ["keyword1", "keyword2", "keyword3"],
720
+ "releaseNotes": "What's new in this version...",
721
+ "promoText": "Limited time offer!",
722
+ "privacyPolicyUrl": "https://example.com/privacy",
723
+ "supportUrl": "https://example.com/support",
724
+ "marketingUrl": "https://example.com"
725
+ }
726
+ },
727
+ "advisory": {
728
+ "alcoholTobaccoOrDrugUseOrReferences": "NONE",
729
+ "gamblingSimulated": "NONE",
730
+ "medicalOrTreatmentInformation": "NONE",
731
+ "profanityOrCrudeHumor": "NONE",
732
+ "sexualContentGraphicAndNudity": "NONE",
733
+ "sexualContentOrNudity": "NONE",
734
+ "horrorOrFearThemes": "NONE",
735
+ "matureOrSuggestiveThemes": "NONE",
736
+ "violenceCartoonOrFantasy": "NONE",
737
+ "violenceRealistic": "NONE",
738
+ "violenceRealisticProlongedGraphicOrSadistic": "NONE",
739
+ "contests": "NONE",
740
+ "gambling": false,
741
+ "unrestrictedWebAccess": false,
742
+ "seventeenPlus": false
743
+ },
744
+ "release": {
745
+ "automaticRelease": true,
746
+ "phasedRelease": true
747
+ },
748
+ "review": {
749
+ "firstName": "John",
750
+ "lastName": "Doe",
751
+ "email": "review@example.com",
752
+ "phone": "+1 555-123-4567",
753
+ "notes": "Demo account: test@example.com / password123"
754
+ }
755
+ }
756
+ }
757
+ ```
758
+
759
+ ## App Store Optimization (ASO)
760
+
761
+ ### Title Optimization (30 characters max)
762
+
763
+ The title is the most important ranking factor. Include your brand name and 1-2 strongest keywords.
764
+
765
+ ```json
766
+ {
767
+ "title": "Budgetly - Money Tracker"
768
+ }
769
+ ```
770
+
771
+ **Best Practices:**
772
+
773
+ - Brand name first for recognition
774
+ - Include highest-volume keyword
775
+ - Avoid generic words like "app" or "the"
776
+ - Title keywords boost rankings by ~10%
777
+
778
+ ### Subtitle Optimization (30 characters max)
779
+
780
+ The subtitle appears below your title in search results. Use it for your unique value proposition.
781
+
782
+ ```json
783
+ {
784
+ "subtitle": "Smart Expense & Budget Planner"
785
+ }
786
+ ```
787
+
788
+ **Best Practices:**
789
+
790
+ - Don't duplicate keywords from title (Apple counts each word once)
791
+ - Highlight your main differentiator
792
+ - Include secondary high-value keywords
793
+ - Focus on benefits, not features
794
+
795
+ ### Keywords Field (100 characters max)
796
+
797
+ Hidden from users but crucial for discoverability. Use comma-separated keywords without spaces after commas.
798
+
799
+ ```json
800
+ {
801
+ "keywords": [
802
+ "finance,budget,expense,money,tracker,savings,bills,income,spending,wallet,personal,weekly,monthly"
803
+ ]
804
+ }
805
+ ```
806
+
807
+ **Best Practices:**
808
+
809
+ - Use all 100 characters
810
+ - Separate with commas only (no spaces)
811
+ - No duplicates from title/subtitle
812
+ - Include singular forms (Apple handles plurals)
813
+ - Add synonyms and alternate spellings
814
+ - Include competitor brand names (carefully)
815
+ - Use digits instead of spelled numbers ("5" not "five")
816
+ - Skip articles and prepositions
817
+
818
+ ### Description Optimization
819
+
820
+ The iOS description is NOT indexed for search but critical for conversion. Focus on convincing users to download.
821
+
822
+ ```json
823
+ {
824
+ "description": "Take control of your finances with Budgetly, the intuitive money management app trusted by over 1 million users.\n\nKEY FEATURES:\n• Smart budget tracking - Set limits and watch your progress\n• Expense categorization - Know exactly where your money goes\n• Bill reminders - Never miss a payment\n• Beautiful charts - Visualize your financial health\n• Bank sync - Connect 10,000+ institutions\n• Cloud backup - Your data, always safe\n\nWHY BUDGETLY?\nUnlike complex spreadsheets or basic calculators, Budgetly learns your spending habits and provides personalized insights. Our users save an average of $300/month within 3 months.\n\nPRIVACY FIRST\nYour financial data is encrypted end-to-end. We never sell your information.\n\nDownload Budgetly today and start your journey to financial freedom!"
825
+ }
826
+ ```
827
+
828
+ **Best Practices:**
829
+
830
+ - Front-load the first 3 lines (visible before "more")
831
+ - Use bullet points for features
832
+ - Include social proof (user counts, ratings, awards)
833
+ - Add a clear call-to-action
834
+ - Mention privacy/security for sensitive apps
835
+ - Update with each release
836
+
837
+ ### Release Notes
838
+
839
+ Shown to existing users deciding whether to update.
840
+
841
+ ```json
842
+ {
843
+ "releaseNotes": "Version 2.5 brings exciting improvements:\n\n• NEW: Dark mode support\n• NEW: Widget for home screen\n• IMPROVED: 50% faster sync\n• FIXED: Notification timing issues\n\nLove Budgetly? Please leave a review!"
844
+ }
845
+ ```
846
+
847
+ ### Promo Text (170 characters max)
848
+
849
+ Appears above description; can be updated without new binary. Great for time-sensitive promotions.
850
+
851
+ ```json
852
+ {
853
+ "promoText": "🎉 New Year Special: Premium features free for 30 days! Start 2025 with better finances."
854
+ }
855
+ ```
856
+
857
+ ## Categories
858
+
859
+ Primary category is most important for browsing and rankings.
860
+
861
+ ```json
862
+ {
863
+ "categories": ["FINANCE", "PRODUCTIVITY"]
864
+ }
865
+ ```
866
+
867
+ **Available Categories:**
868
+
869
+ - BOOKS, BUSINESS, DEVELOPER_TOOLS, EDUCATION
870
+ - ENTERTAINMENT, FINANCE, FOOD_AND_DRINK
871
+ - GAMES (with subcategories), GRAPHICS_AND_DESIGN
872
+ - HEALTH_AND_FITNESS, KIDS (age-gated)
873
+ - LIFESTYLE, MAGAZINES_AND_NEWSPAPERS
874
+ - MEDICAL, MUSIC, NAVIGATION, NEWS
875
+ - PHOTO_AND_VIDEO, PRODUCTIVITY, REFERENCE
876
+ - SHOPPING, SOCIAL_NETWORKING, SPORTS
877
+ - STICKERS (with subcategories), TRAVEL
878
+ - UTILITIES, WEATHER
879
+
880
+ ## Localization
881
+
882
+ Localize metadata for each target market. Keywords should be researched per locale—direct translations often miss regional search terms.
883
+
884
+ ```json
885
+ {
886
+ "info": {
887
+ "en-US": {
888
+ "title": "Budgetly - Money Tracker",
889
+ "subtitle": "Smart Expense Planner",
890
+ "keywords": ["budget,finance,money,expense,tracker"]
891
+ },
892
+ "es-ES": {
893
+ "title": "Budgetly - Control de Gastos",
894
+ "subtitle": "Planificador de Presupuesto",
895
+ "keywords": ["presupuesto,finanzas,dinero,gastos,ahorro"]
896
+ },
897
+ "ja": {
898
+ "title": "Budgetly - 家計簿アプリ",
899
+ "subtitle": "簡単支出管理",
900
+ "keywords": ["家計簿,支出,予算,節約,お金"]
901
+ },
902
+ "de-DE": {
903
+ "title": "Budgetly - Haushaltsbuch",
904
+ "subtitle": "Ausgaben Verwalten",
905
+ "keywords": ["budget,finanzen,geld,ausgaben,sparen"]
906
+ }
907
+ }
908
+ }
909
+ ```
910
+
911
+ **Supported Locales:**
912
+ `ar-SA`, `ca`, `cs`, `da`, `de-DE`, `el`, `en-AU`, `en-CA`, `en-GB`, `en-US`, `es-ES`, `es-MX`, `fi`, `fr-CA`, `fr-FR`, `he`, `hi`, `hr`, `hu`, `id`, `it`, `ja`, `ko`, `ms`, `nl-NL`, `no`, `pl`, `pt-BR`, `pt-PT`, `ro`, `ru`, `sk`, `sv`, `th`, `tr`, `uk`, `vi`, `zh-Hans`, `zh-Hant`
913
+
914
+ ## Dynamic Configuration
915
+
916
+ Use JavaScript for dynamic values like copyright year or fetched translations.
917
+
918
+ ### Basic Dynamic Config
919
+
920
+ ```js
921
+ // store.config.js
922
+ const baseConfig = require("./store.config.json");
923
+
924
+ const year = new Date().getFullYear();
925
+
926
+ module.exports = {
927
+ ...baseConfig,
928
+ apple: {
929
+ ...baseConfig.apple,
930
+ copyright: `${year} Your Company, Inc.`,
931
+ },
932
+ };
933
+ ```
934
+
935
+ ### Async Configuration (External Localization)
936
+
937
+ ```js
938
+ // store.config.js
939
+ module.exports = async () => {
940
+ const baseConfig = require("./store.config.json");
941
+
942
+ // Fetch translations from CMS/localization service
943
+ const translations = await fetch(
944
+ "https://api.example.com/app-store-copy",
945
+ ).then((r) => r.json());
946
+
947
+ return {
948
+ ...baseConfig,
949
+ apple: {
950
+ ...baseConfig.apple,
951
+ info: translations,
952
+ },
953
+ };
954
+ };
955
+ ```
956
+
957
+ ### Environment-Based Config
958
+
959
+ ```js
960
+ // store.config.js
961
+ const baseConfig = require("./store.config.json");
962
+
963
+ const isProduction = process.env.EAS_BUILD_PROFILE === "production";
964
+
965
+ module.exports = {
966
+ ...baseConfig,
967
+ apple: {
968
+ ...baseConfig.apple,
969
+ info: {
970
+ "en-US": {
971
+ ...baseConfig.apple.info["en-US"],
972
+ promoText: isProduction
973
+ ? "Download now and get started!"
974
+ : "[BETA] Help us test new features!",
975
+ },
976
+ },
977
+ },
978
+ };
979
+ ```
980
+
981
+ Update `eas.json` to use JS config:
982
+
983
+ ```json
984
+ {
985
+ "cli": {
986
+ "metadataPath": "./store.config.js"
987
+ }
988
+ }
989
+ ```
990
+
991
+ ## Age Rating (Advisory)
992
+
993
+ Answer content questions honestly to get an appropriate age rating.
994
+
995
+ **Content Descriptors:**
996
+
997
+ - `NONE` - Content not present
998
+ - `INFREQUENT_OR_MILD` - Occasional mild content
999
+ - `FREQUENT_OR_INTENSE` - Regular or strong content
1000
+
1001
+ ```json
1002
+ {
1003
+ "advisory": {
1004
+ "alcoholTobaccoOrDrugUseOrReferences": "NONE",
1005
+ "contests": "NONE",
1006
+ "gambling": false,
1007
+ "gamblingSimulated": "NONE",
1008
+ "horrorOrFearThemes": "NONE",
1009
+ "matureOrSuggestiveThemes": "NONE",
1010
+ "medicalOrTreatmentInformation": "NONE",
1011
+ "profanityOrCrudeHumor": "NONE",
1012
+ "sexualContentGraphicAndNudity": "NONE",
1013
+ "sexualContentOrNudity": "NONE",
1014
+ "unrestrictedWebAccess": false,
1015
+ "violenceCartoonOrFantasy": "NONE",
1016
+ "violenceRealistic": "NONE",
1017
+ "violenceRealisticProlongedGraphicOrSadistic": "NONE",
1018
+ "seventeenPlus": false,
1019
+ "kidsAgeBand": "NINE_TO_ELEVEN"
1020
+ }
1021
+ }
1022
+ ```
1023
+
1024
+ **Kids Age Bands:** `FIVE_AND_UNDER`, `SIX_TO_EIGHT`, `NINE_TO_ELEVEN`
1025
+
1026
+ ## Release Strategy
1027
+
1028
+ Control how your app rolls out to users.
1029
+
1030
+ ```json
1031
+ {
1032
+ "release": {
1033
+ "automaticRelease": true,
1034
+ "phasedRelease": true
1035
+ }
1036
+ }
1037
+ ```
1038
+
1039
+ **Options:**
1040
+
1041
+ - `automaticRelease: true` - Release immediately upon approval
1042
+ - `automaticRelease: false` - Manual release after approval
1043
+ - `automaticRelease: "2025-02-01T10:00:00Z"` - Schedule release (RFC 3339)
1044
+ - `phasedRelease: true` - 7-day gradual rollout (1%, 2%, 5%, 10%, 20%, 50%, 100%)
1045
+
1046
+ ## Review Information
1047
+
1048
+ Provide contact info and test credentials for the App Review team.
1049
+
1050
+ ```json
1051
+ {
1052
+ "review": {
1053
+ "firstName": "Jane",
1054
+ "lastName": "Smith",
1055
+ "email": "app-review@company.com",
1056
+ "phone": "+1 (555) 123-4567",
1057
+ "demoUsername": "demo@example.com",
1058
+ "demoPassword": "ReviewDemo2025!",
1059
+ "notes": "To test premium features:\n1. Log in with demo credentials\n2. Navigate to Settings > Subscription\n3. Tap 'Restore Purchase' - sandbox purchase will be restored\n\nFor location features, allow location access when prompted."
1060
+ }
1061
+ }
1062
+ ```
1063
+
1064
+ ## ASO Checklist
1065
+
1066
+ ### Before Each Release
1067
+
1068
+ - [ ] Update keywords based on performance data
1069
+ - [ ] Refresh description with new features
1070
+ - [ ] Write compelling release notes
1071
+ - [ ] Update promo text if running campaigns
1072
+ - [ ] Verify all URLs are valid
1073
+
1074
+ ### Monthly ASO Tasks
1075
+
1076
+ - [ ] Analyze keyword rankings
1077
+ - [ ] Research competitor keywords
1078
+ - [ ] Check conversion rates in App Analytics
1079
+ - [ ] Review user feedback for keyword ideas
1080
+ - [ ] A/B test screenshots in App Store Connect
1081
+
1082
+ ### Keyword Research Tips
1083
+
1084
+ 1. **Brainstorm features** - List all app capabilities
1085
+ 2. **Mine reviews** - Find words users actually use
1086
+ 3. **Analyze competitors** - Check their titles/subtitles
1087
+ 4. **Use long-tail keywords** - Less competition, higher intent
1088
+ 5. **Consider misspellings** - Common typos can drive traffic
1089
+ 6. **Track seasonality** - Some keywords peak at certain times
1090
+
1091
+ ### Metrics to Monitor
1092
+
1093
+ - **Impressions** - How often your app appears in search
1094
+ - **Product Page Views** - Users who tap to learn more
1095
+ - **Conversion Rate** - Views → Downloads
1096
+ - **Keyword Rankings** - Position for target keywords
1097
+ - **Category Ranking** - Position in your categories
1098
+
1099
+ ## VS Code Integration
1100
+
1101
+ Install the [Expo Tools extension](https://marketplace.visualstudio.com/items?itemName=expo.vscode-expo-tools) for:
1102
+
1103
+ - Auto-complete for all schema properties
1104
+ - Inline validation and warnings
1105
+ - Quick fixes for common issues
1106
+
1107
+ ## Common Issues
1108
+
1109
+ ### "Binary not found"
1110
+
1111
+ Push a binary with `eas submit` before pushing metadata.
1112
+
1113
+ ### "Invalid keywords"
1114
+
1115
+ - Check total length is ≤100 characters
1116
+ - Remove spaces after commas
1117
+ - Remove duplicate words
1118
+
1119
+ ### "Description too long"
1120
+
1121
+ Description maximum is 4000 characters.
1122
+
1123
+ ### Pull doesn't update JS config
1124
+
1125
+ `eas metadata:pull` creates a JSON file; import it into your JS config.
1126
+
1127
+ ## CI/CD Integration
1128
+
1129
+ Automate metadata updates in your deployment pipeline:
1130
+
1131
+ ```yaml
1132
+ # .eas/workflows/release.yml
1133
+ jobs:
1134
+ submit-and-metadata:
1135
+ steps:
1136
+ - name: Submit to App Store
1137
+ run: eas submit -p ios --latest
1138
+
1139
+ - name: Push Metadata
1140
+ run: eas metadata:push
1141
+ ```
1142
+
1143
+ ## Tips
1144
+
1145
+ - Update metadata every 4-6 weeks for optimal ASO
1146
+ - 70% of App Store visitors use search to find apps
1147
+ - Apps with 4+ star ratings get featured more often
1148
+ - Localized apps see 128% more downloads per country
1149
+ - First 3 lines of description are most critical (shown before "more")
1150
+ - Use all 100 keyword characters—every character counts
1151
+
1152
+ ---
1153
+
1154
+ # EAS Workflows
1155
+
1156
+ Automate builds, submissions, and deployments with EAS Workflows.
1157
+
1158
+ ## Web Deployment
1159
+
1160
+ Deploy web apps on push to main:
1161
+
1162
+ `.eas/workflows/deploy.yml`
1163
+
1164
+ ```yaml
1165
+ name: Deploy
1166
+
1167
+ on:
1168
+ push:
1169
+ branches:
1170
+ - main
1171
+
1172
+ # https://docs.expo.dev/eas/workflows/syntax/#deploy
1173
+ jobs:
1174
+ deploy_web:
1175
+ type: deploy
1176
+ params:
1177
+ prod: true
1178
+ ```
1179
+
1180
+ ## PR Previews
1181
+
1182
+ ### Web PR Previews
1183
+
1184
+ ```yaml
1185
+ name: Web PR Preview
1186
+
1187
+ on:
1188
+ pull_request:
1189
+ types: [opened, synchronize]
1190
+
1191
+ jobs:
1192
+ preview:
1193
+ type: deploy
1194
+ params:
1195
+ prod: false
1196
+ ```
1197
+
1198
+ ### Native PR Previews with EAS Updates
1199
+
1200
+ Deploy OTA updates for pull requests:
1201
+
1202
+ ```yaml
1203
+ name: PR Preview
1204
+
1205
+ on:
1206
+ pull_request:
1207
+ types: [opened, synchronize]
1208
+
1209
+ jobs:
1210
+ publish:
1211
+ type: update
1212
+ params:
1213
+ branch: "pr-${{ github.event.pull_request.number }}"
1214
+ message: "PR #${{ github.event.pull_request.number }}"
1215
+ ```
1216
+
1217
+ ## Production Release
1218
+
1219
+ Complete release workflow for both platforms:
1220
+
1221
+ ```yaml
1222
+ name: Release
1223
+
1224
+ on:
1225
+ push:
1226
+ tags: ["v*"]
1227
+
1228
+ jobs:
1229
+ build-ios:
1230
+ type: build
1231
+ params:
1232
+ platform: ios
1233
+ profile: production
1234
+
1235
+ build-android:
1236
+ type: build
1237
+ params:
1238
+ platform: android
1239
+ profile: production
1240
+
1241
+ submit-ios:
1242
+ type: submit
1243
+ needs: [build-ios]
1244
+ params:
1245
+ platform: ios
1246
+ profile: production
1247
+
1248
+ submit-android:
1249
+ type: submit
1250
+ needs: [build-android]
1251
+ params:
1252
+ platform: android
1253
+ profile: production
1254
+ ```
1255
+
1256
+ ## Build on Push
1257
+
1258
+ Trigger builds when pushing to specific branches:
1259
+
1260
+ ```yaml
1261
+ name: Build
1262
+
1263
+ on:
1264
+ push:
1265
+ branches:
1266
+ - main
1267
+ - release/*
1268
+
1269
+ jobs:
1270
+ build:
1271
+ type: build
1272
+ params:
1273
+ platform: all
1274
+ profile: production
1275
+ ```
1276
+
1277
+ ## Conditional Jobs
1278
+
1279
+ Run jobs based on conditions:
1280
+
1281
+ ```yaml
1282
+ name: Conditional Release
1283
+
1284
+ on:
1285
+ push:
1286
+ branches: [main]
1287
+
1288
+ jobs:
1289
+ check-changes:
1290
+ type: run
1291
+ params:
1292
+ command: |
1293
+ if git diff --name-only HEAD~1 | grep -q "^src/"; then
1294
+ echo "has_changes=true" >> $GITHUB_OUTPUT
1295
+ fi
1296
+
1297
+ build:
1298
+ type: build
1299
+ needs: [check-changes]
1300
+ if: needs.check-changes.outputs.has_changes == 'true'
1301
+ params:
1302
+ platform: all
1303
+ profile: production
1304
+ ```
1305
+
1306
+ ## Workflow Syntax Reference
1307
+
1308
+ ### Triggers
1309
+
1310
+ ```yaml
1311
+ on:
1312
+ push:
1313
+ branches: [main, develop]
1314
+ tags: ["v*"]
1315
+ pull_request:
1316
+ types: [opened, synchronize, reopened]
1317
+ schedule:
1318
+ - cron: "0 0 * * *" # Daily at midnight
1319
+ workflow_dispatch: # Manual trigger
1320
+ ```
1321
+
1322
+ ### Job Types
1323
+
1324
+ | Type | Purpose |
1325
+ | -------- | ----------------------- |
1326
+ | `build` | Create app builds |
1327
+ | `submit` | Submit to app stores |
1328
+ | `update` | Publish OTA updates |
1329
+ | `deploy` | Deploy web apps |
1330
+ | `run` | Execute custom commands |
1331
+
1332
+ ### Job Dependencies
1333
+
1334
+ ```yaml
1335
+ jobs:
1336
+ first:
1337
+ type: build
1338
+ params:
1339
+ platform: ios
1340
+
1341
+ second:
1342
+ type: submit
1343
+ needs: [first] # Runs after 'first' completes
1344
+ params:
1345
+ platform: ios
1346
+ ```
1347
+
1348
+ ## Tips
1349
+
1350
+ - Use `workflow_dispatch` for manual production releases
1351
+ - Combine PR previews with GitHub status checks
1352
+ - Use tags for versioned releases
1353
+ - Keep sensitive values in EAS Secrets, not workflow files