codymaster 4.1.3 → 4.3.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 (658) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/README.md +54 -84
  3. package/dist/index.js +589 -510
  4. package/dist/ui/box.js +49 -0
  5. package/install.sh +2 -2
  6. package/package.json +3 -9
  7. package/skills/AGENTS.md +61 -0
  8. package/skills/CLAUDE.md +158 -0
  9. package/skills/boxme-git-config/SKILL.md +56 -0
  10. package/skills/boxme-local-dev/SKILL.md +66 -0
  11. package/skills/build.sh +30 -0
  12. package/skills/cf +314 -0
  13. package/skills/cf 2 +313 -0
  14. package/skills/cm-ads-tracker/SKILL.md +364 -69
  15. package/skills/cm-auto-publisher/SKILL.md +81 -0
  16. package/skills/cm-booking-calendar/SKILL.md +521 -0
  17. package/skills/cm-booking-calendar/references/industry-patterns.md +527 -0
  18. package/skills/cm-booking-calendar/templates/booking-form.css +626 -0
  19. package/skills/cm-booking-calendar/templates/booking-form.html +477 -0
  20. package/skills/cm-booking-calendar/templates/calendar-engine.js +419 -0
  21. package/skills/cm-booking-calendar/templates/calendar-export.js +395 -0
  22. package/skills/cm-booking-calendar/templates/reminder-config.js +629 -0
  23. package/skills/cm-brainstorm-idea/SKILL.md +15 -24
  24. package/skills/cm-clean-code/SKILL.md +300 -0
  25. package/skills/cm-code-review/SKILL.md +0 -27
  26. package/skills/cm-codeintell/SKILL.md +598 -0
  27. package/skills/cm-content-factory/.content-factory-state.json +132 -0
  28. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +1 -0
  29. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +1 -0
  30. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  31. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  32. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  33. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  34. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  35. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  36. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  37. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  38. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  39. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  40. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  41. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  42. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  43. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  44. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  45. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  46. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  47. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  48. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  49. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  50. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  51. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  52. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  53. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  54. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  55. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  56. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  57. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  58. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  59. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  60. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  61. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  62. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  63. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  64. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  65. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  66. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  67. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  68. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  69. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  70. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  71. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  72. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  73. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
  74. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  75. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  76. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  77. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  78. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  79. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  80. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  81. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  82. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  83. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  84. package/skills/cm-content-factory/.git 2/refs/heads/main +1 -0
  85. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +1 -0
  86. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +76 -0
  87. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +1 -0
  88. package/skills/cm-content-factory/AGENTS.md +61 -0
  89. package/skills/cm-content-factory/CLAUDE.md +63 -0
  90. package/skills/cm-content-factory/CURSOR.md +43 -0
  91. package/skills/cm-content-factory/Content Factory.zip +0 -0
  92. package/skills/cm-content-factory/cf +313 -0
  93. package/skills/cm-content-factory/config.schema.json +397 -0
  94. package/skills/cm-content-factory/dashboard/app.js +556 -0
  95. package/skills/cm-content-factory/dashboard/index.html +397 -0
  96. package/skills/cm-content-factory/dashboard/style.css +1211 -0
  97. package/skills/cm-content-factory/examples/01-real-estate.config.json +146 -0
  98. package/skills/cm-content-factory/examples/02-personal-finance.config.json +146 -0
  99. package/skills/cm-content-factory/examples/03-health-wellness.config.json +147 -0
  100. package/skills/cm-content-factory/examples/04-saas-software.config.json +147 -0
  101. package/skills/cm-content-factory/examples/05-legal-services.config.json +147 -0
  102. package/skills/cm-content-factory/examples/06-insurance.config.json +146 -0
  103. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +146 -0
  104. package/skills/cm-content-factory/examples/08-online-education.config.json +147 -0
  105. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +147 -0
  106. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +147 -0
  107. package/skills/cm-content-factory/examples/11-home-services.config.json +146 -0
  108. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +147 -0
  109. package/skills/cm-content-factory/examples/13-pet-care.config.json +147 -0
  110. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +147 -0
  111. package/skills/cm-content-factory/examples/15-ai-automation.config.json +147 -0
  112. package/skills/cm-content-factory/examples/16-wedding-events.config.json +147 -0
  113. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +148 -0
  114. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +147 -0
  115. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +148 -0
  116. package/skills/cm-content-factory/examples/20-solar-energy.config.json +147 -0
  117. package/skills/cm-content-factory/examples/fitness-blog.config.json +116 -0
  118. package/skills/cm-content-factory/examples/tech-blog.config.json +107 -0
  119. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +72 -0
  120. package/skills/cm-content-factory/extensions/hooks.py +126 -0
  121. package/skills/cm-content-factory/extensions/openclaw_adapter.py +132 -0
  122. package/skills/cm-content-factory/landing/index.html +680 -0
  123. package/skills/cm-content-factory/landing/script.js +101 -0
  124. package/skills/cm-content-factory/landing/style.css +1216 -0
  125. package/skills/cm-content-factory/landing/translations.js +508 -0
  126. package/skills/cm-content-factory/logs/events.jsonl +11 -0
  127. package/skills/cm-content-factory/profiles/_template.profile.json +231 -0
  128. package/skills/cm-content-factory/profiles/finance.profile.json +278 -0
  129. package/skills/cm-content-factory/profiles/legal.profile.json +263 -0
  130. package/skills/cm-content-factory/profiles/medical-research.profile.json +321 -0
  131. package/skills/cm-content-factory/profiles/technology.profile.json +275 -0
  132. package/skills/cm-content-factory/scripts/agent_dispatcher.py +266 -0
  133. package/skills/cm-content-factory/scripts/audit.py +106 -0
  134. package/skills/cm-content-factory/scripts/dashboard_server.py +225 -0
  135. package/skills/cm-content-factory/scripts/deploy.py +146 -0
  136. package/skills/cm-content-factory/scripts/extract.py +132 -0
  137. package/skills/cm-content-factory/scripts/landing_generator.py +459 -0
  138. package/skills/cm-content-factory/scripts/memory.py +521 -0
  139. package/skills/cm-content-factory/scripts/monetize.py +239 -0
  140. package/skills/cm-content-factory/scripts/pipeline.py +357 -0
  141. package/skills/cm-content-factory/scripts/plan.py +163 -0
  142. package/skills/cm-content-factory/scripts/publish.py +145 -0
  143. package/skills/cm-content-factory/scripts/research.py +337 -0
  144. package/skills/cm-content-factory/scripts/scaffold.py +464 -0
  145. package/skills/cm-content-factory/scripts/scoreboard.py +336 -0
  146. package/skills/cm-content-factory/scripts/seo.py +90 -0
  147. package/skills/cm-content-factory/scripts/state_manager.py +320 -0
  148. package/skills/cm-content-factory/scripts/token_manager.py +268 -0
  149. package/skills/cm-content-factory/scripts/validate.py +221 -0
  150. package/skills/cm-content-factory/scripts/wizard.py +329 -0
  151. package/skills/cm-content-factory/scripts/write.py +93 -0
  152. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  153. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +90 -0
  154. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +54 -0
  155. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +38 -0
  156. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +65 -0
  157. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +48 -0
  158. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +39 -0
  159. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +42 -0
  160. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +51 -0
  161. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +52 -0
  162. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +86 -0
  163. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +80 -0
  164. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +58 -0
  165. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +102 -0
  166. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +45 -0
  167. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +29 -0
  168. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +55 -0
  169. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +29 -0
  170. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +41 -0
  171. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +40 -0
  172. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +56 -0
  173. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +46 -0
  174. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +45 -0
  175. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +45 -0
  176. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +108 -0
  177. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +22 -0
  178. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +52 -0
  179. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +58 -0
  180. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +92 -0
  181. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +575 -0
  182. package/skills/cm-content-factory/tests/conftest.py +66 -0
  183. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +125 -0
  184. package/skills/cm-content-factory/tests/test_memory.py +128 -0
  185. package/skills/cm-content-factory/tests/test_pipeline.py +107 -0
  186. package/skills/cm-content-factory/tests/test_research.py +56 -0
  187. package/skills/cm-content-factory/tests/test_state_manager.py +131 -0
  188. package/skills/cm-content-factory/tests/test_token_manager.py +110 -0
  189. package/skills/cm-content-factory/tests/test_wizard.py +121 -0
  190. package/skills/cm-continuity/SKILL.md +7 -0
  191. package/skills/cm-cro-methodology/SKILL.md +290 -0
  192. package/skills/cm-dashboard/SKILL.md +7 -525
  193. package/skills/cm-debugging/SKILL.md +7 -116
  194. package/skills/cm-deep-search/SKILL.md +5 -1
  195. package/skills/cm-dockit/README.md +6 -15
  196. package/skills/cm-dockit/SKILL.md +20 -37
  197. package/skills/cm-execution/SKILL.md +6 -1
  198. package/skills/cm-frappe-agent/SKILL.md +134 -0
  199. package/skills/cm-frappe-agent/agents/doctype-architect.md +596 -0
  200. package/skills/cm-frappe-agent/agents/erpnext-customizer.md +643 -0
  201. package/skills/cm-frappe-agent/agents/frappe-backend.md +814 -0
  202. package/skills/cm-frappe-agent/agents/frappe-custom-frontend.md +557 -0
  203. package/skills/cm-frappe-agent/agents/frappe-debugger.md +625 -0
  204. package/skills/cm-frappe-agent/agents/frappe-fixer.md +275 -0
  205. package/skills/cm-frappe-agent/agents/frappe-frontend.md +660 -0
  206. package/skills/cm-frappe-agent/agents/frappe-installer.md +158 -0
  207. package/skills/cm-frappe-agent/agents/frappe-performance.md +307 -0
  208. package/skills/cm-frappe-agent/agents/frappe-planner.md +419 -0
  209. package/skills/cm-frappe-agent/agents/frappe-remote-ops.md +153 -0
  210. package/skills/cm-frappe-agent/agents/github-workflow.md +286 -0
  211. package/skills/cm-frappe-agent/commands/frappe-app.md +351 -0
  212. package/skills/cm-frappe-agent/commands/frappe-backend.md +162 -0
  213. package/skills/cm-frappe-agent/commands/frappe-bench.md +254 -0
  214. package/skills/cm-frappe-agent/commands/frappe-debug.md +263 -0
  215. package/skills/cm-frappe-agent/commands/frappe-doctype-create.md +272 -0
  216. package/skills/cm-frappe-agent/commands/frappe-doctype-field.md +310 -0
  217. package/skills/cm-frappe-agent/commands/frappe-erpnext.md +210 -0
  218. package/skills/cm-frappe-agent/commands/frappe-fix.md +59 -0
  219. package/skills/cm-frappe-agent/commands/frappe-frontend.md +210 -0
  220. package/skills/cm-frappe-agent/commands/frappe-fullstack.md +243 -0
  221. package/skills/cm-frappe-agent/commands/frappe-github.md +57 -0
  222. package/skills/cm-frappe-agent/commands/frappe-install.md +52 -0
  223. package/skills/cm-frappe-agent/commands/frappe-plan.md +442 -0
  224. package/skills/cm-frappe-agent/commands/frappe-remote.md +58 -0
  225. package/skills/cm-frappe-agent/commands/frappe-test.md +356 -0
  226. package/skills/cm-frappe-agent/docs/README.md +51 -0
  227. package/skills/cm-frappe-agent/docs/agents-catalog.md +113 -0
  228. package/skills/cm-frappe-agent/docs/architecture.md +149 -0
  229. package/skills/cm-frappe-agent/docs/commands-catalog.md +82 -0
  230. package/skills/cm-frappe-agent/docs/resources-catalog.md +66 -0
  231. package/skills/cm-frappe-agent/docs/sitemap-urls.txt +52 -0
  232. package/skills/cm-frappe-agent/docs/sitemap.md +81 -0
  233. package/skills/cm-frappe-agent/docs/sop/user-guide.md +178 -0
  234. package/skills/cm-frappe-agent/docs/sop/vibe-coding-guide.md +122 -0
  235. package/skills/cm-frappe-agent/resources/7-layer-architecture.md +985 -0
  236. package/skills/cm-frappe-agent/resources/bench_commands.md +73 -0
  237. package/skills/cm-frappe-agent/resources/code-patterns-guide.md +948 -0
  238. package/skills/cm-frappe-agent/resources/common_pitfalls.md +266 -0
  239. package/skills/cm-frappe-agent/resources/doctype-registry.md +158 -0
  240. package/skills/cm-frappe-agent/resources/installation-guide.md +289 -0
  241. package/skills/cm-frappe-agent/resources/rest-api-patterns.md +182 -0
  242. package/skills/cm-frappe-agent/resources/scaffold_checklist.md +82 -0
  243. package/skills/cm-frappe-agent/resources/upgrade_patterns.md +113 -0
  244. package/skills/cm-frappe-agent/resources/web-form-patterns.md +252 -0
  245. package/skills/cm-frappe-agent/skills/bench-commands/SKILL.md +621 -0
  246. package/skills/cm-frappe-agent/skills/client-scripts/SKILL.md +642 -0
  247. package/skills/cm-frappe-agent/skills/doctype-patterns/SKILL.md +576 -0
  248. package/skills/cm-frappe-agent/skills/frappe-api/SKILL.md +740 -0
  249. package/skills/cm-frappe-agent/skills/remote-operations/SKILL.md +47 -0
  250. package/skills/cm-frappe-agent/skills/server-scripts/SKILL.md +608 -0
  251. package/skills/cm-frappe-agent/skills/web-forms/SKILL.md +46 -0
  252. package/skills/cm-git-worktrees/SKILL.md +0 -7
  253. package/skills/cm-google-form/SKILL.md +266 -0
  254. package/skills/cm-google-form/templates/apps-script.js +55 -0
  255. package/skills/cm-google-form/templates/form-markup.html +110 -0
  256. package/skills/cm-google-form/templates/form-submit.js +201 -0
  257. package/skills/cm-google-form/templates/toast.css +152 -0
  258. package/skills/cm-growth-hacking/SKILL.md +293 -0
  259. package/skills/cm-growth-hacking/bottom-sheet-engine.md +261 -0
  260. package/skills/cm-growth-hacking/calendar-integration.md +264 -0
  261. package/skills/cm-growth-hacking/references/engagement-patterns.md +346 -0
  262. package/skills/cm-growth-hacking/templates/bottom-sheet.css +528 -0
  263. package/skills/cm-growth-hacking/templates/bottom-sheet.js +269 -0
  264. package/skills/cm-growth-hacking/templates/calendar-cta.js +213 -0
  265. package/skills/cm-growth-hacking/templates/tracking-events.js +211 -0
  266. package/skills/cm-growth-hacking/templates/trigger-manager.js +254 -0
  267. package/skills/cm-growth-hacking/tracking-events.md +246 -0
  268. package/skills/cm-growth-hacking/trigger-system.md +342 -0
  269. package/skills/cm-how-it-work/SKILL.md +20 -4
  270. package/skills/cm-identity-guard/SKILL.md +0 -11
  271. package/skills/cm-jtbd/SKILL.md +1 -1
  272. package/skills/cm-notebooklm/SKILL.md +172 -0
  273. package/skills/cm-notebooklm/references/command_reference.md +94 -0
  274. package/skills/cm-notebooklm/references/workflows.md +60 -0
  275. package/skills/cm-notebooklm/resources/knowledge_sources.md +106 -0
  276. package/skills/cm-notebooklm/scripts/brain-sync.sh +453 -0
  277. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +101 -0
  278. package/skills/cm-planning/SKILL.md +39 -52
  279. package/skills/cm-project-bootstrap/SKILL.md +1307 -99
  280. package/skills/cm-quality-gate/SKILL.md +13 -106
  281. package/skills/cm-reactor/SKILL.md +274 -0
  282. package/skills/cm-safe-deploy/SKILL.md +415 -52
  283. package/skills/cm-safe-i18n/SKILL.md +1 -22
  284. package/skills/cm-secret-shield/SKILL.md +2 -2
  285. package/skills/cm-security-gate/SKILL.md +114 -0
  286. package/skills/cm-skill-chain/SKILL.md +2 -2
  287. package/skills/cm-skill-index/SKILL.md +9 -6
  288. package/skills/cm-skill-mastery/SKILL.md +2 -15
  289. package/skills/cm-start/SKILL.md +9 -0
  290. package/skills/cm-tdd/SKILL.md +8 -41
  291. package/skills/cm-ui-preview/SKILL.md +35 -173
  292. package/skills/cm-ux-master/FEATURES-v4.md +305 -0
  293. package/skills/cm-ux-master/README-ru.md +135 -0
  294. package/skills/cm-ux-master/README-vi.md +135 -0
  295. package/skills/cm-ux-master/README-zh.md +135 -0
  296. package/skills/cm-ux-master/README.md +489 -0
  297. package/skills/cm-ux-master/SKILL.md +773 -62
  298. package/skills/cm-ux-master/cli/README.md +180 -0
  299. package/skills/cm-ux-master/cli/pyproject.toml +106 -0
  300. package/skills/cm-ux-master/cli/requirements.txt +21 -0
  301. package/skills/cm-ux-master/cli/templates/base/skill-core.md +262 -0
  302. package/skills/cm-ux-master/cli/templates/platforms/claude.yaml +21 -0
  303. package/skills/cm-ux-master/cli/templates/platforms/cursor.yaml +21 -0
  304. package/skills/cm-ux-master/cli/templates/platforms/figma.yaml +24 -0
  305. package/skills/cm-ux-master/cli/templates/platforms/vscode-mcp.yaml +28 -0
  306. package/skills/cm-ux-master/cli/templates/platforms/windsurf.yaml +21 -0
  307. package/skills/cm-ux-master/cli/uxmaster/__init__.py +10 -0
  308. package/skills/cm-ux-master/cli/uxmaster/__main__.py +19 -0
  309. package/skills/cm-ux-master/cli/uxmaster/cli.py +349 -0
  310. package/skills/cm-ux-master/cli/uxmaster/commands/__init__.py +8 -0
  311. package/skills/cm-ux-master/cli/uxmaster/commands/extract.py +18 -0
  312. package/skills/cm-ux-master/cli/uxmaster/commands/init.py +58 -0
  313. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +194 -0
  314. package/skills/cm-ux-master/cli/uxmaster/commands/search.py +23 -0
  315. package/skills/cm-ux-master/cli/uxmaster/commands/validate.py +270 -0
  316. package/skills/cm-ux-master/cli/uxmaster/search_engine.py +532 -0
  317. package/skills/cm-ux-master/cli/uxmaster/template_engine.py +458 -0
  318. package/skills/cm-ux-master/cli/uxmaster/utils/__init__.py +9 -0
  319. package/skills/cm-ux-master/cli/uxmaster/utils/console.py +42 -0
  320. package/skills/cm-ux-master/cli/uxmaster/utils/detect.py +83 -0
  321. package/skills/cm-ux-master/data/accessibility-advanced.csv +26 -0
  322. package/skills/cm-ux-master/data/animation.csv +31 -0
  323. package/skills/cm-ux-master/data/charts.csv +26 -0
  324. package/skills/cm-ux-master/data/colors.csv +97 -0
  325. package/skills/cm-ux-master/data/design-tests.csv +37 -0
  326. package/skills/cm-ux-master/data/devices.csv +21 -0
  327. package/skills/cm-ux-master/data/icons.csv +101 -0
  328. package/skills/cm-ux-master/data/landing.csv +31 -0
  329. package/skills/cm-ux-master/data/products.csv +97 -0
  330. package/skills/cm-ux-master/data/react-performance.csv +45 -0
  331. package/skills/cm-ux-master/data/responsive.csv +26 -0
  332. package/skills/cm-ux-master/data/semi-tokens.csv +52 -0
  333. package/skills/cm-ux-master/data/stacks/angular.csv +34 -0
  334. package/skills/cm-ux-master/data/stacks/astro.csv +54 -0
  335. package/skills/cm-ux-master/data/stacks/electron.csv +32 -0
  336. package/skills/cm-ux-master/data/stacks/flutter.csv +53 -0
  337. package/skills/cm-ux-master/data/stacks/html-tailwind.csv +56 -0
  338. package/skills/cm-ux-master/data/stacks/htmx.csv +28 -0
  339. package/skills/cm-ux-master/data/stacks/jetpack-compose.csv +53 -0
  340. package/skills/cm-ux-master/data/stacks/nextjs.csv +53 -0
  341. package/skills/cm-ux-master/data/stacks/nuxt-ui.csv +51 -0
  342. package/skills/cm-ux-master/data/stacks/nuxtjs.csv +59 -0
  343. package/skills/cm-ux-master/data/stacks/react-native.csv +52 -0
  344. package/skills/cm-ux-master/data/stacks/react.csv +54 -0
  345. package/skills/cm-ux-master/data/stacks/shadcn.csv +61 -0
  346. package/skills/cm-ux-master/data/stacks/svelte.csv +54 -0
  347. package/skills/cm-ux-master/data/stacks/swiftui.csv +51 -0
  348. package/skills/cm-ux-master/data/stacks/tauri.csv +29 -0
  349. package/skills/cm-ux-master/data/stacks/vue.csv +50 -0
  350. package/skills/cm-ux-master/data/styles.csv +68 -0
  351. package/skills/cm-ux-master/data/typography.csv +58 -0
  352. package/skills/cm-ux-master/data/ui-reasoning.csv +101 -0
  353. package/skills/cm-ux-master/data/ux-guidelines.csv +100 -0
  354. package/skills/cm-ux-master/data/ux-laws.csv +49 -0
  355. package/skills/cm-ux-master/data/web-interface.csv +31 -0
  356. package/skills/cm-ux-master/docs/LANDING-PAGE.html +377 -0
  357. package/skills/cm-ux-master/docs/README.md +108 -0
  358. package/skills/cm-ux-master/docs/css/styles.css +573 -0
  359. package/skills/cm-ux-master/docs/examples/demo-script.md +319 -0
  360. package/skills/cm-ux-master/docs/guides/for-designers.md +692 -0
  361. package/skills/cm-ux-master/docs/guides/for-developers.md +778 -0
  362. package/skills/cm-ux-master/docs/guides/for-product-managers.md +693 -0
  363. package/skills/cm-ux-master/docs/guides/react-guide-vi.md +50 -0
  364. package/skills/cm-ux-master/docs/index.html +1062 -0
  365. package/skills/cm-ux-master/docs/js/i18n.js +84 -0
  366. package/skills/cm-ux-master/docs/js/lang/de.js +145 -0
  367. package/skills/cm-ux-master/docs/js/lang/en.js +145 -0
  368. package/skills/cm-ux-master/docs/js/lang/fr.js +145 -0
  369. package/skills/cm-ux-master/docs/js/lang/hi.js +145 -0
  370. package/skills/cm-ux-master/docs/js/lang/id.js +145 -0
  371. package/skills/cm-ux-master/docs/js/lang/ja.js +145 -0
  372. package/skills/cm-ux-master/docs/js/lang/ko.js +145 -0
  373. package/skills/cm-ux-master/docs/js/lang/ru.js +145 -0
  374. package/skills/cm-ux-master/docs/js/lang/vi.js +145 -0
  375. package/skills/cm-ux-master/docs/js/lang/zh.js +145 -0
  376. package/skills/cm-ux-master/docs/js/main.js +117 -0
  377. package/skills/cm-ux-master/docs/plan/PHASE1-COMPLETION.md +217 -0
  378. package/skills/cm-ux-master/docs/plan/PHASE2-COMPLETION.md +199 -0
  379. package/skills/cm-ux-master/docs/plan/PHASE2-ENHANCED-COMPLETION.md +352 -0
  380. package/skills/cm-ux-master/docs/plan/PHASE3-VALIDATION-COMPLETION.md +499 -0
  381. package/skills/cm-ux-master/docs/plan/PHASE4-TESTING-POLISH-COMPLETION.md +483 -0
  382. package/skills/cm-ux-master/docs/plan/UXM-2.0-ROADMAP.md +681 -0
  383. package/skills/cm-ux-master/docs/plan/WOW-PITCH.md +410 -0
  384. package/skills/cm-ux-master/docs/technical/api-reference.md +824 -0
  385. package/skills/cm-ux-master/docs/technical/harvester-v4.md +328 -0
  386. package/skills/cm-ux-master/docs/technical/how-it-works.md +1128 -0
  387. package/skills/cm-ux-master/docs/tutorials/quickstart.md +339 -0
  388. package/skills/cm-ux-master/docs/tutorials/tutorials.md +939 -0
  389. package/skills/cm-ux-master/docs/tutorials/user-guide.md +716 -0
  390. package/skills/cm-ux-master/examples/README.md +63 -0
  391. package/skills/cm-ux-master/mcp/__init__.py +3 -0
  392. package/skills/cm-ux-master/mcp/integrations/__init__.py +11 -0
  393. package/skills/cm-ux-master/mcp/integrations/figma/__init__.py +6 -0
  394. package/skills/cm-ux-master/mcp/integrations/figma/client.py +293 -0
  395. package/skills/cm-ux-master/mcp/integrations/figma/plugin/code.js +561 -0
  396. package/skills/cm-ux-master/mcp/integrations/figma/plugin/ui.html +334 -0
  397. package/skills/cm-ux-master/mcp/integrations/stitch/__init__.py +5 -0
  398. package/skills/cm-ux-master/mcp/integrations/stitch/client.py +410 -0
  399. package/skills/cm-ux-master/mcp/integrations/vscode/package.json +167 -0
  400. package/skills/cm-ux-master/mcp/integrations/vscode/src/extension.ts +81 -0
  401. package/skills/cm-ux-master/mcp/mcp-config.json +274 -0
  402. package/skills/cm-ux-master/mcp/server.py +771 -0
  403. package/skills/cm-ux-master/mcp/tools/__init__.py +13 -0
  404. package/skills/cm-ux-master/mcp-server/server.py +595 -0
  405. package/skills/cm-ux-master/output/fila/FilaDashboard.tsx +47 -0
  406. package/skills/cm-ux-master/output/fila/components/badge/component.tsx +35 -0
  407. package/skills/cm-ux-master/output/fila/components/badge/index.ts +1 -0
  408. package/skills/cm-ux-master/output/fila/components/button/component.tsx +53 -0
  409. package/skills/cm-ux-master/output/fila/components/button/index.ts +1 -0
  410. package/skills/cm-ux-master/output/fila/components/card/component.tsx +35 -0
  411. package/skills/cm-ux-master/output/fila/components/card/index.ts +1 -0
  412. package/skills/cm-ux-master/output/fila/components/input/component.tsx +41 -0
  413. package/skills/cm-ux-master/output/fila/components/input/index.ts +1 -0
  414. package/skills/cm-ux-master/output/fila/design-system.css +151 -0
  415. package/skills/cm-ux-master/output/fila/design-system.html +1596 -0
  416. package/skills/cm-ux-master/output/fila/design-system.json +168 -0
  417. package/skills/cm-ux-master/output/fila/figma-tokens.json +523 -0
  418. package/skills/cm-ux-master/output/fila/harvest-v4-raw.json +406 -0
  419. package/skills/cm-ux-master/output/fila/semi-theme-override.css +95 -0
  420. package/skills/cm-ux-master/output/haravan/HaravanDashboard.tsx +103 -0
  421. package/skills/cm-ux-master/output/haravan/design-system-v3-live.html +2716 -0
  422. package/skills/cm-ux-master/output/haravan/design-system-v3.html +1770 -0
  423. package/skills/cm-ux-master/output/haravan/design-system.html +914 -0
  424. package/skills/cm-ux-master/output/haravan/figma-tokens.json +84 -0
  425. package/skills/cm-ux-master/output/haravan/haravan-harvest.json +33 -0
  426. package/skills/cm-ux-master/output/haravan/harvest-v3-raw.json +167 -0
  427. package/skills/cm-ux-master/output/haravan/semi-theme-override.css +39 -0
  428. package/skills/cm-ux-master/references/audit-template.md +257 -0
  429. package/skills/cm-ux-master/references/cultural-ux.md +346 -0
  430. package/skills/cm-ux-master/references/dark-patterns.md +362 -0
  431. package/skills/cm-ux-master/references/heuristic-conflicts.md +296 -0
  432. package/skills/cm-ux-master/references/krug-principles.md +289 -0
  433. package/skills/cm-ux-master/references/nielsen-heuristics.md +360 -0
  434. package/skills/cm-ux-master/references/wcag-checklist.md +306 -0
  435. package/skills/cm-ux-master/scripts/component_generator.py +631 -0
  436. package/skills/cm-ux-master/scripts/core.py +305 -0
  437. package/skills/cm-ux-master/scripts/demo_validation.py +452 -0
  438. package/skills/cm-ux-master/scripts/design_doc_generator.py +1325 -0
  439. package/skills/cm-ux-master/scripts/design_system.py +1141 -0
  440. package/skills/cm-ux-master/scripts/design_system_indexer.py +889 -0
  441. package/skills/cm-ux-master/scripts/extract_i18n.py +251 -0
  442. package/skills/cm-ux-master/scripts/extractor.py +1437 -0
  443. package/skills/cm-ux-master/scripts/figma_bridge.py +406 -0
  444. package/skills/cm-ux-master/scripts/generate.py +147 -0
  445. package/skills/cm-ux-master/scripts/harvest_session.py +207 -0
  446. package/skills/cm-ux-master/scripts/harvester.js +240 -0
  447. package/skills/cm-ux-master/scripts/harvester_browser.py +717 -0
  448. package/skills/cm-ux-master/scripts/harvester_cli.py +431 -0
  449. package/skills/cm-ux-master/scripts/harvester_v1.js +275 -0
  450. package/skills/cm-ux-master/scripts/harvester_v3.js +620 -0
  451. package/skills/cm-ux-master/scripts/harvester_v4.js +1003 -0
  452. package/skills/cm-ux-master/scripts/install.py +528 -0
  453. package/skills/cm-ux-master/scripts/license.py +81 -0
  454. package/skills/cm-ux-master/scripts/media/qrpayment.png +0 -0
  455. package/skills/cm-ux-master/scripts/pro_stubs.py +120 -0
  456. package/skills/cm-ux-master/scripts/project_registry.py +217 -0
  457. package/skills/cm-ux-master/scripts/search.py +114 -0
  458. package/skills/cm-ux-master/scripts/semi_mcp_bridge.py +425 -0
  459. package/skills/cm-ux-master/scripts/stitch_integration.py +583 -0
  460. package/skills/cm-ux-master/scripts/test_harvester_v4.py +335 -0
  461. package/skills/cm-ux-master/scripts/token_mapper.py +626 -0
  462. package/skills/cm-ux-master/scripts/validation_engine.py +1571 -0
  463. package/skills/cm-ux-master/scripts/wizard.py +653 -0
  464. package/skills/cm-ux-master/setup.py +93 -0
  465. package/skills/cm-ux-master/templates/base/flutter-widget.dart +69 -0
  466. package/skills/cm-ux-master/templates/base/html-page.html +152 -0
  467. package/skills/cm-ux-master/templates/base/react-component.tsx +47 -0
  468. package/skills/cm-ux-master/templates/base/swiftui-view.swift +62 -0
  469. package/skills/cm-ux-master/templates/quick-start.sh +176 -0
  470. package/skills/cm-ux-master/tests/automation/batch-validate.sh +250 -0
  471. package/skills/cm-ux-master/tests/automation/generate-test-projects.sh +561 -0
  472. package/skills/cm-ux-master/tests/automation/run-all-tests.sh +315 -0
  473. package/skills/cm-ux-master/tests/test_design_doc.py +145 -0
  474. package/skills/cm-ux-master/tests/test_devices.py +74 -0
  475. package/skills/cm-ux-master/tests/test_generator.py +116 -0
  476. package/skills/cm-ux-master/tests/test_harvest_session.py +131 -0
  477. package/skills/cm-ux-master/tests/test_harvester.py +127 -0
  478. package/skills/cm-ux-master/tests/test_harvester_v3.py +324 -0
  479. package/skills/cm-ux-master/tests/test_mcp_server.py +496 -0
  480. package/skills/cm-ux-master/tests/test_new_domains.py +108 -0
  481. package/skills/cm-ux-master/tests/test_new_stacks.py +103 -0
  482. package/skills/cm-ux-master/tests/test_project_registry.py +146 -0
  483. package/skills/cm-ux-master/tests/test_semi_mcp_bridge.py +207 -0
  484. package/skills/cm-ux-master/tests/test_token_mapper.py +247 -0
  485. package/skills/cm-ux-master/tests/test_validation_engine.py +617 -0
  486. package/skills/config.schema.json +397 -0
  487. package/skills/frappe-app-builder.zip +0 -0
  488. package/skills/jobs-to-be-done/SKILL.md +266 -0
  489. package/skills/jobs-to-be-done/references/case-studies.md +154 -0
  490. package/skills/jobs-to-be-done/references/competitive-strategy.md +280 -0
  491. package/skills/jobs-to-be-done/references/diagnostics.md +158 -0
  492. package/skills/jobs-to-be-done/references/innovation-process.md +392 -0
  493. package/skills/jobs-to-be-done/references/organizational-change.md +328 -0
  494. package/skills/marketplace-report-crawler/SKILL.md +176 -0
  495. package/skills/marketplace-report-crawler/config/accounts.json +41 -0
  496. package/skills/marketplace-report-crawler/config/report-types.json +422 -0
  497. package/skills/marketplace-report-crawler/config/sessions.json +3 -0
  498. package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +102 -0
  499. package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +114 -0
  500. package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +94 -0
  501. package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +272 -0
  502. package/skills/marketplace-report-crawler/scripts/crawl-runner.js +281 -0
  503. package/skills/marketplace-report-crawler/scripts/session-check.sh +72 -0
  504. package/skills/marketplace-report-crawler/scripts/session-manager.sh +349 -0
  505. package/skills/marketplace-report-crawler/scripts/setup-folders.sh +83 -0
  506. package/skills/medical-research/SKILL.md +194 -0
  507. package/skills/medical-research/scripts/evidence_checker.py +288 -0
  508. package/skills/mom-test/SKILL.md +267 -0
  509. package/skills/mom-test/references/avoiding-bad-data.md +221 -0
  510. package/skills/mom-test/references/case-studies.md +306 -0
  511. package/skills/mom-test/references/commitment-advancement.md +219 -0
  512. package/skills/mom-test/references/finding-conversations.md +251 -0
  513. package/skills/mom-test/references/processing-learning.md +256 -0
  514. package/skills/mom-test/references/question-patterns.md +198 -0
  515. package/skills/pandasai-analytics/SKILL.md +251 -0
  516. package/skills/release-it/SKILL.md +235 -0
  517. package/skills/release-it/references/anti-patterns.md +279 -0
  518. package/skills/release-it/references/capacity-planning.md +285 -0
  519. package/skills/release-it/references/chaos-engineering.md +325 -0
  520. package/skills/release-it/references/deployment-strategies.md +331 -0
  521. package/skills/release-it/references/observability.md +301 -0
  522. package/skills/release-it/references/stability-patterns.md +355 -0
  523. package/skills/scripts/sync-ide-skills.sh +61 -0
  524. package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +37 -0
  525. package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +34 -0
  526. package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +51 -0
  527. package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +39 -0
  528. package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +52 -0
  529. package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +25 -0
  530. package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +31 -0
  531. package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +25 -0
  532. package/skills/skill-creator-ultra/README.md +1242 -0
  533. package/skills/skill-creator-ultra/SKILL.md +388 -0
  534. package/skills/skill-creator-ultra/agents/analyzer.md +274 -0
  535. package/skills/skill-creator-ultra/agents/comparator.md +202 -0
  536. package/skills/skill-creator-ultra/agents/grader.md +223 -0
  537. package/skills/skill-creator-ultra/assets/eval_review.html +146 -0
  538. package/skills/skill-creator-ultra/eval-viewer/generate_review.py +471 -0
  539. package/skills/skill-creator-ultra/eval-viewer/viewer.html +1325 -0
  540. package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +109 -0
  541. package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +116 -0
  542. package/skills/skill-creator-ultra/examples/example_api_docs.md +189 -0
  543. package/skills/skill-creator-ultra/examples/example_db_migration.md +253 -0
  544. package/skills/skill-creator-ultra/examples/example_git_commit.md +111 -0
  545. package/skills/skill-creator-ultra/install.ps1 +289 -0
  546. package/skills/skill-creator-ultra/install.sh +313 -0
  547. package/skills/skill-creator-ultra/phases/phase1_interview.md +202 -0
  548. package/skills/skill-creator-ultra/phases/phase2_extract.md +55 -0
  549. package/skills/skill-creator-ultra/phases/phase3_detect.md +57 -0
  550. package/skills/skill-creator-ultra/phases/phase4_generate.md +543 -0
  551. package/skills/skill-creator-ultra/phases/phase5_test.md +319 -0
  552. package/skills/skill-creator-ultra/phases/phase6_eval.md +301 -0
  553. package/skills/skill-creator-ultra/phases/phase7_iterate.md +103 -0
  554. package/skills/skill-creator-ultra/phases/phase8_optimize.md +113 -0
  555. package/skills/skill-creator-ultra/resources/advanced_patterns.md +499 -0
  556. package/skills/skill-creator-ultra/resources/anti_patterns.md +376 -0
  557. package/skills/skill-creator-ultra/resources/blueprints.md +498 -0
  558. package/skills/skill-creator-ultra/resources/checklist.md +243 -0
  559. package/skills/skill-creator-ultra/resources/composition_cookbook.md +291 -0
  560. package/skills/skill-creator-ultra/resources/description_optimization.md +90 -0
  561. package/skills/skill-creator-ultra/resources/eval_guide.md +133 -0
  562. package/skills/skill-creator-ultra/resources/industry_questions.md +189 -0
  563. package/skills/skill-creator-ultra/resources/interview_questions.md +200 -0
  564. package/skills/skill-creator-ultra/resources/pattern_detection.md +200 -0
  565. package/skills/skill-creator-ultra/resources/prompt_engineering.md +531 -0
  566. package/skills/skill-creator-ultra/resources/schemas.md +430 -0
  567. package/skills/skill-creator-ultra/resources/script_integration.md +593 -0
  568. package/skills/skill-creator-ultra/resources/scripts_guide.md +339 -0
  569. package/skills/skill-creator-ultra/resources/skill_template.md +124 -0
  570. package/skills/skill-creator-ultra/resources/skill_writing_guide.md +634 -0
  571. package/skills/skill-creator-ultra/resources/versioning_guide.md +193 -0
  572. package/skills/skill-creator-ultra/scripts/ci_eval.py +200 -0
  573. package/skills/skill-creator-ultra/scripts/package_skill.py +165 -0
  574. package/skills/skill-creator-ultra/scripts/simulate_skill.py +398 -0
  575. package/skills/skill-creator-ultra/scripts/skill_audit.py +611 -0
  576. package/skills/skill-creator-ultra/scripts/skill_compare.py +265 -0
  577. package/skills/skill-creator-ultra/scripts/skill_export.py +334 -0
  578. package/skills/skill-creator-ultra/scripts/skill_scaffold.py +403 -0
  579. package/skills/skill-creator-ultra/scripts/skill_stats.py +339 -0
  580. package/skills/skill-creator-ultra/scripts/validate_skill.py +411 -0
  581. package/skills/tailwind-mastery/SKILL.md +229 -0
  582. package/skills/vercel-react-best-practices/AGENTS.md +3373 -0
  583. package/skills/vercel-react-best-practices/README.md +123 -0
  584. package/skills/vercel-react-best-practices/SKILL.md +143 -0
  585. package/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  586. package/skills/vercel-react-best-practices/rules/_template.md +28 -0
  587. package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  588. package/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  589. package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  590. package/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  591. package/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  592. package/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  593. package/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  594. package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  595. package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  596. package/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  597. package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  598. package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  599. package/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  600. package/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  601. package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  602. package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  603. package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  604. package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  605. package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  606. package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  607. package/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  608. package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  609. package/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  610. package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  611. package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  612. package/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  613. package/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  614. package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  615. package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  616. package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  617. package/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  618. package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  619. package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  620. package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  621. package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  622. package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  623. package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  624. package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  625. package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  626. package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  627. package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  628. package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  629. package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  630. package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  631. package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  632. package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  633. package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  634. package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  635. package/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  636. package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  637. package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  638. package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  639. package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  640. package/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  641. package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  642. package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  643. package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  644. package/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  645. package/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  646. package/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  647. package/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  648. package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +142 -0
  649. package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  650. package/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  651. package/skills/web-design-guidelines/SKILL.md +39 -0
  652. package/skills/cro-methodology/SKILL.md +0 -98
  653. /package/skills/{cro-methodology → cm-cro-methodology}/references/COPYWRITING.md +0 -0
  654. /package/skills/{cro-methodology → cm-cro-methodology}/references/OBJECTIONS.md +0 -0
  655. /package/skills/{cro-methodology → cm-cro-methodology}/references/PERSUASION.md +0 -0
  656. /package/skills/{cro-methodology → cm-cro-methodology}/references/RESEARCH.md +0 -0
  657. /package/skills/{cro-methodology → cm-cro-methodology}/references/funnel-analysis.md +0 -0
  658. /package/skills/{cro-methodology → cm-cro-methodology}/references/testing-methodology.md +0 -0
@@ -3,165 +3,1373 @@ name: cm-project-bootstrap
3
3
  description: Use when starting any new project from scratch. Asks for project identity (name, GitHub org, Cloudflare account), detects project type, sets up design system, staging+production, i18n from day 1, SEO foundation, AGENTS.md manifest, test infrastructure, 8-gate deploy pipeline, and disciplined development workflows. Prevents wrong deploys, redundant repos, and technical debt from day 0.
4
4
  ---
5
5
 
6
- # CodyMaster Project Bootstrap v2.0
6
+ # 🏗️ Cody Master Project Bootstrap v2.0
7
7
 
8
8
  > **Every project starts here. No exceptions.**
9
+ > Inspired by best practices from Amp, Claude Code, Cursor, Lovable, and Manus agents.
9
10
 
10
11
  ## Core Principles
11
12
 
12
- - ASK FIRST. BUILD SECOND. NEVER ASSUME IDENTITY.
13
- - STAGING IS MANDATORY. PRODUCTION IS EARNED.
14
- - I18N FROM DAY 1. DESIGN SYSTEM BEFORE COMPONENTS.
15
- - SEO IS INFRASTRUCTURE. EVERY PROJECT GETS AN AGENTS.MD.
13
+ ```
14
+ ASK FIRST. BUILD SECOND. NEVER ASSUME IDENTITY.
15
+ STAGING IS MANDATORY. PRODUCTION IS EARNED.
16
+ I18N FROM DAY 1. NOT "LATER."
17
+ DESIGN SYSTEM BEFORE COMPONENTS. TOKENS BEFORE PIXELS.
18
+ SEO IS NOT AN AFTERTHOUGHT. IT'S INFRASTRUCTURE.
19
+ EVERY PROJECT GETS AN AGENTS.MD. NO EXCEPTIONS.
20
+ ```
21
+
22
+ ---
16
23
 
17
24
  ## 11-Phase Bootstrap Process
18
25
 
19
- | Phase | Name | Purpose |
20
- |-------|------|---------|
21
- | 0 | Identity Lock | WHO are you deploying as? |
22
- | 0.5 | Security Foundation | HOW to prevent secret leaks? (calls `cm-secret-shield`) |
23
- | 1 | Project Type Detection | WHAT kind of project? |
24
- | 2 | Repository & Environments | WHERE does code live? |
25
- | 3 | Design System Foundation | HOW does it look? |
26
- | 4 | i18n From Day 1 | WHICH languages? |
27
- | 5 | SEO Foundation | HOW will people find it? |
28
- | 6 | AGENTS.md + Git Safety | HOW do agents collaborate? |
29
- | 7 | Test Infrastructure | HOW do we catch bugs? |
30
- | 8 | Deploy Pipeline (8 Gates) | HOW does code ship? |
31
- | 9 | Development Workflow | HOW do we work daily? |
26
+ ```
27
+ Phase 0: Identity Lock — WHO are you deploying as?
28
+ Phase 0.5: Security Foundation — HOW do we prevent secret leaks?
29
+ Phase 1: Project Type Detection — WHAT kind of project?
30
+ Phase 2: Repository & Environments WHERE does code live?
31
+ Phase 3: Design System Foundation HOW does it look?
32
+ Phase 4: i18n From Day 1 — WHICH languages?
33
+ Phase 5: SEO Foundation — HOW will people find it?
34
+ Phase 6: AGENTS.md + Git Safety — HOW do agents collaborate?
35
+ Phase 7: Test Infrastructure — HOW do we catch bugs?
36
+ Phase 8: Deploy Pipeline (8 Gates) HOW does code ship?
37
+ Phase 9: Development Workflow — HOW do we work daily?
38
+ ```
32
39
 
33
40
  ---
34
41
 
35
42
  ## Phase 0: Identity Lock 🔐
36
43
 
37
44
  > **MANDATORY. Cannot proceed without this.**
45
+ > **Values are NOT hardcoded — check history, suggest, let user confirm.**
46
+
47
+ ### Step 1: Check Identity History
48
+
49
+ Before asking anything, check if `~/.cm-identity-history.json` exists.
50
+ If it does, load previous identities and **suggest** the most recently used values.
51
+
52
+ ```json
53
+ // ~/.cm-identity-history.json — Auto-maintained across projects
54
+ {
55
+ "lastUsed": "2026-03-17",
56
+ "identities": [
57
+ {
58
+ "github": { "org": "my-work-org" },
59
+ "cloudflare": { "accountId": "abc123def456ghi789jkl012mno345pqr" },
60
+ "i18n": { "primary": "en", "targets": ["es", "fr", "de"] },
61
+ "usedCount": 5,
62
+ "lastProject": "my-awesome-project",
63
+ "lastUsed": "2026-03-17"
64
+ }
65
+ ]
66
+ }
67
+ ```
68
+
69
+ ### Step 2: Ask with Suggestions
70
+
71
+ Present the 6 questions, pre-filling from history where available.
72
+ User only needs to **confirm or change**:
73
+
74
+ ```
75
+ 📋 NEW PROJECT — Identity Setup
76
+ (Values from your last project shown as suggestions)
77
+
78
+ 1. Project name (kebab-case): ___________
79
+ 2. GitHub org [my-work-org]: → Enter to keep, or type new
80
+ 3. Cloudflare ID [abc12...5pqr]: → Enter to keep, or type new
81
+ 4. Domain: ___________
82
+ 5. Primary language [en]: → Enter to keep, or type new
83
+ 6. Target languages [es, fr, de]: → Enter to keep, or type new
84
+ ```
85
+
86
+ > **RULE:** Never assume. Always show. Let user confirm.
87
+ > If no history exists, ask all 6 from scratch.
88
+
89
+ ### Step 3: Verify Identity
90
+
91
+ ```
92
+ ⚠️ BEFORE PROCEEDING — CONFIRM:
93
+ 🔐 GitHub Org: {org}
94
+ ☁️ Cloudflare: {accountId}
95
+ 🌐 Domain: {domain}
96
+ 🗣️ Languages: {primary} (primary), {targets}
97
+ ✅ Correct? → proceed
98
+ ❌ Wrong? → fix before continuing
99
+ ```
100
+
101
+ ### Step 4: Create `.project-identity.json`
102
+
103
+ ```json
104
+ {
105
+ "projectName": "{name}",
106
+ "github": {
107
+ "org": "{org}",
108
+ "repo": "{name}"
109
+ },
110
+ "cloudflare": {
111
+ "accountId": "{accountId}",
112
+ "projectName": "{name}",
113
+ "productionBranch": "production"
114
+ },
115
+ "domain": {
116
+ "production": "{domain}",
117
+ "staging": "staging.{domain}"
118
+ },
119
+ "i18n": {
120
+ "primary": "{primary}",
121
+ "targets": ["{targets}"]
122
+ },
123
+ "createdAt": "{date}",
124
+ "bootstrapVersion": "2.0"
125
+ }
126
+ ```
127
+
128
+ ### Step 5: Save to History
129
+
130
+ After creating `.project-identity.json`, update `~/.cm-identity-history.json`:
131
+ - Add or update the identity entry
132
+ - Increment `usedCount`
133
+ - Update `lastProject` and `lastUsed`
134
+ - This ensures **next project** gets pre-filled suggestions automatically
38
135
 
39
- 1. Check `~/.cm-identity-history.json` for previous identities suggest pre-fill
40
- 2. Ask 6 questions (with suggestions from history):
41
- - Project name (kebab-case), GitHub org, Cloudflare ID, Domain, Primary language, Target languages
42
- 3. Verify identity with user confirmation
43
- 4. Create `.project-identity.json` with all config
44
- 5. Save to `~/.cm-identity-history.json` for future projects
45
- 6. Call `cm-identity-guard` to verify git config matches
136
+ > Call `cm-identity-guard` to verify git config matches the GitHub org BEFORE any git push.
137
+
138
+ ---
46
139
 
47
140
  ## Phase 0.5: Security Foundation 🛡️
48
141
 
49
- > Calls `cm-secret-shield` for setup + adds code-level security utilities.
142
+ > **NEW — Defense-in-depth from day 0. Secrets leak at project start when security is "later."**
143
+ > **Calls `cm-secret-shield` for setup.**
144
+
145
+ ### Step 1: Create `.gitleaks.toml`
146
+
147
+ Create project-level Gitleaks configuration:
148
+
149
+ ```toml
150
+ # .gitleaks.toml — Secret Shield Config
151
+ title = "CM Secret Shield"
152
+
153
+ [extend]
154
+ useDefault = true
155
+
156
+ [[rules]]
157
+ id = "supabase-service-key"
158
+ description = "Supabase Service Role Key"
159
+ regex = '''eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\.[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+'''
160
+ tags = ["supabase", "jwt"]
161
+
162
+ [[rules]]
163
+ id = "generic-high-entropy"
164
+ description = "High entropy string that may be a secret"
165
+ regex = '''(?i)(api[_-]?key|secret[_-]?key|access[_-]?token|private[_-]?key|auth[_-]?token)\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}['"]'''
166
+ tags = ["generic"]
167
+
168
+ [allowlist]
169
+ paths = ['''\.gitleaks\.toml$''', '''\.dev\.vars\.example$''', '''node_modules/''', '''dist/''']
170
+ ```
171
+
172
+ ### Step 2: Setup Pre-Commit Hook
173
+
174
+ ```bash
175
+ # Install git pre-commit hook for secret scanning
176
+ mkdir -p .git/hooks
177
+ cat > .git/hooks/pre-commit << 'EOF'
178
+ #!/bin/sh
179
+ echo "🛡️ Secret Shield: scanning staged files..."
180
+ if command -v gitleaks &> /dev/null; then
181
+ gitleaks git --pre-commit --staged --verbose
182
+ if [ $? -ne 0 ]; then
183
+ echo "❌ SECRET DETECTED! Commit blocked."
184
+ exit 1
185
+ fi
186
+ echo "✅ No secrets detected"
187
+ else
188
+ echo "⚠️ Gitleaks not installed. Running basic checks..."
189
+ STAGED=$(git diff --cached --name-only --diff-filter=ACM)
190
+ PATTERNS="SERVICE_KEY|ANON_KEY|PRIVATE_KEY|DB_PASSWORD|SECRET_KEY|sk-[a-zA-Z0-9]{20,}"
191
+ for file in $STAGED; do
192
+ if echo "$file" | grep -qE '\.(js|ts|json|toml|yaml|env)$'; then
193
+ if git diff --cached "$file" | grep -qE "$PATTERNS"; then
194
+ echo "❌ Potential secret in: $file"
195
+ exit 1
196
+ fi
197
+ fi
198
+ done
199
+ echo "✅ Basic check passed"
200
+ fi
201
+ EOF
202
+ chmod +x .git/hooks/pre-commit
203
+ ```
204
+
205
+ ### Step 3: Add Security Script
206
+
207
+ Add to `package.json`:
208
+ ```json
209
+ {
210
+ "scripts": {
211
+ "security:scan": "node scripts/security-scan.js || echo 'Create scripts/security-scan.js from cm-secret-shield'"
212
+ }
213
+ }
214
+ ```
215
+
216
+ ### Step 4: Create `.dev.vars.example`
217
+
218
+ ```bash
219
+ # .dev.vars.example — Template for local secrets (committed to repo)
220
+ # Copy to .dev.vars and fill in real values
221
+ SUPABASE_URL=https://YOUR_PROJECT.supabase.co
222
+ SUPABASE_SERVICE_KEY=your_service_key_here
223
+ SUPABASE_ANON_KEY=your_anon_key_here
224
+ ```
50
225
 
51
- 1. Create `.gitleaks.toml` with Supabase + generic high-entropy rules
52
- 2. Setup pre-commit hook (`.git/hooks/pre-commit`) — scans staged files
53
- 3. Add `security:scan` script to `package.json`
54
- 4. Create `.dev.vars.example` template (committed). `.dev.vars` = real secrets (gitignored)
55
- 5. **[NEW] Security Utilities (Learned: March 2026):**
56
- - **Python projects:** Copy `safe_path.py` to `scripts/` — provides `safe_resolve()`, `safe_join()`, `safe_open()` for path traversal prevention
57
- - **JS/TS frontend:** Add `esc()` function to sanitize HTML — prevent DOM XSS
58
- - **Express apps:** Add `app.disable('x-powered-by')` + `express.json({ limit: '1mb' })`
59
- - **Create `.snyk`** policy file for managing false positives
60
- - **Rule:** ALL paths from CLI/config/API → `safe_resolve()`. ALL innerHTML → `esc()`. No exceptions.
226
+ > **RULE:** `.dev.vars` = real secrets (gitignored). `.dev.vars.example` = template (committed).
227
+
228
+ ---
61
229
 
62
230
  ## Phase 1: Project Type Detection 🔍
63
231
 
64
- > Default UI: shadcn/ui + Tailwind. Default layout: Mobile-first.
232
+ > **Detect project type auto-select the right stack.**
233
+ > **Default UI: shadcn/ui + Tailwind. Default layout: Mobile-first.**
234
+ > **Unless user explicitly requests otherwise.**
235
+
236
+ ### Step 1: Ask Project Type
237
+
238
+ Present these options to the user:
239
+
240
+ | Type | When to use | Stack |
241
+ |------|------------|-------|
242
+ | **A. Static Website** | Docs, landing pages, portfolios | HTML + vanilla JS + CSS |
243
+ | **B. SPA (Vite)** | Dashboards, apps with client routing | Vite + React + TypeScript + **shadcn/ui** |
244
+ | **C. Cloudflare Workers** | APIs, backends, serverless functions | Hono + wrangler + TypeScript |
245
+ | **D. Fullstack (Workers + SPA)** | Complete apps with API + frontend | Hono + Vite + React + **shadcn/ui** |
246
+ | **E. Content Site (Astro)** | Blogs, docs, content-heavy sites | Astro + MDX |
247
+
248
+ ### UI Library Default Rules
249
+
250
+ ```
251
+ 🎨 DEFAULT UI LIBRARY: shadcn/ui + Tailwind CSS
252
+ 📱 DEFAULT LAYOUT: Mobile-first responsive
253
+
254
+ These defaults apply UNLESS user explicitly says otherwise.
255
+ Examples of overrides:
256
+ - "Use Ant Design" → switch to Ant Design
257
+ - "No mobile needed" → skip mobile optimization
258
+ - "Desktop only" → desktop-first layout
259
+
260
+ If user says nothing about UI → use shadcn/ui + mobile-first.
261
+ ```
262
+
263
+ ### Step 2: Scaffold Based on Type
264
+
265
+ #### Type A: Static Website
266
+ ```bash
267
+ mkdir -p public/static/{css,js,img} src tests/unit docs
268
+ touch public/index.html public/static/css/design-tokens.css public/static/css/style.css public/static/js/app.js
269
+ ```
270
+
271
+ #### Type B: SPA (Vite) — with shadcn/ui
272
+ ```bash
273
+ # Check available options first
274
+ npx -y create-vite@latest --help
275
+ # Scaffold React + TypeScript
276
+ npx -y create-vite@latest ./ --template react-ts
277
+ # Install Tailwind CSS
278
+ npm install -D tailwindcss @tailwindcss/vite
279
+ # Install and init shadcn/ui
280
+ npx -y shadcn@latest init
281
+ ```
282
+
283
+ #### Type C: Cloudflare Workers
284
+ ```bash
285
+ npm init -y
286
+ npm install hono wrangler --save-dev
287
+ mkdir -p src tests/unit
288
+ touch src/index.ts wrangler.jsonc
289
+ ```
290
+
291
+ #### Type D: Fullstack — with shadcn/ui
292
+ ```bash
293
+ # Workers backend + Vite frontend in one repo
294
+ mkdir -p api/src frontend/src tests/{unit,integration}
295
+ npm init -y
296
+ npm install hono wrangler --save-dev
297
+ cd frontend && npx -y create-vite@latest ./ --template react-ts
298
+ npm install -D tailwindcss @tailwindcss/vite
299
+ npx -y shadcn@latest init
300
+ ```
301
+
302
+ #### Type E: Astro
303
+ ```bash
304
+ npx -y create-astro@latest --help
305
+ npx -y create-astro@latest ./ --template blog --typescript strict
306
+ ```
307
+
308
+ ### Step 3: Install Common Dependencies
65
309
 
66
- | Type | Stack |
67
- |------|-------|
68
- | A. Static Website | HTML + vanilla JS + CSS |
69
- | B. SPA (Vite) | Vite + React + TS + shadcn/ui |
70
- | C. Cloudflare Workers | Hono + wrangler + TS |
71
- | D. Fullstack | Hono + Vite + React + shadcn/ui |
72
- | E. Content Site | Astro + MDX |
310
+ For ALL project types:
311
+ ```bash
312
+ npm install --save-dev vitest
313
+ ```
73
314
 
74
- Scaffold based on type, install `vitest` for all. Enforce mobile-first base styles.
315
+ ### Step 4: Mobile-First Setup
316
+
317
+ For ALL projects with UI, enforce mobile-first from scaffold:
318
+
319
+ ```css
320
+ /* Mobile-first media queries — ALWAYS start from mobile */
321
+ /* Default styles = mobile (< 640px) */
322
+
323
+ /* sm: 640px+ */
324
+ @media (min-width: 640px) { }
325
+ /* md: 768px+ */
326
+ @media (min-width: 768px) { }
327
+ /* lg: 1024px+ */
328
+ @media (min-width: 1024px) { }
329
+ /* xl: 1280px+ */
330
+ @media (min-width: 1280px) { }
331
+ ```
332
+
333
+ ```
334
+ 📱 MOBILE-FIRST RULES:
335
+ 1. Default CSS = mobile layout (no media query needed)
336
+ 2. Add complexity with min-width media queries
337
+ 3. Touch targets minimum 44x44px
338
+ 4. Test on 375px width (iPhone SE) as baseline
339
+ 5. Navigation: bottom nav or hamburger on mobile
340
+ 6. Tables: horizontal scroll or card layout on mobile
341
+ 7. Forms: single column, full width inputs on mobile
342
+ ```
343
+
344
+ ---
75
345
 
76
346
  ## Phase 2: Repository & Environments 🏠
77
347
 
78
- 1. `git init` + `main` (staging) + `production` branches
79
- 2. Configure Cloudflare Pages: `npx wrangler pages project create`
80
- 3. Add `deploy:staging` and `deploy:production` scripts
81
- 4. Create hardened `.gitignore` (secrets, env files, build output)
348
+ ### Step 1: Initialize Git
349
+
350
+ ```bash
351
+ git init
352
+ git checkout -b main
353
+ ```
354
+
355
+ ### Step 2: Create Staging + Production Branches
356
+
357
+ ```bash
358
+ # main = staging (default)
359
+ # production = production only
360
+ git checkout -b production
361
+ git checkout main
362
+ ```
363
+
364
+ ### Step 3: Configure Cloudflare Pages
365
+
366
+ ```bash
367
+ npx wrangler pages project create PROJECT_NAME --production-branch production
368
+ ```
369
+
370
+ ### Step 4: Add Deploy Scripts to package.json
371
+
372
+ ```json
373
+ {
374
+ "scripts": {
375
+ "deploy:staging": "npx wrangler pages deploy ./public --project-name=PROJECT_NAME --branch=main",
376
+ "deploy:production": "npx wrangler pages deploy ./public --project-name=PROJECT_NAME --branch=production",
377
+ "test": "vitest run",
378
+ "test:gate": "npm run test"
379
+ }
380
+ }
381
+ ```
382
+
383
+ > Adjust `./public` to match your build output directory based on project type.
384
+
385
+ ### Step 5: Create `.gitignore` (Hardened)
386
+
387
+ ```gitignore
388
+ # === Secret Shield: Mandatory Ignores ===
389
+ # Environment & secret files
390
+ .env
391
+ .env.*
392
+ !.env.example
393
+ !.env.test
394
+ .dev.vars
395
+ !.dev.vars.example
396
+ .secret-lifecycle.json
397
+
398
+ # Platform-specific secrets
399
+ *.pem
400
+ *.key
401
+ *.p12
402
+
403
+ # Build & dependencies
404
+ node_modules/
405
+ dist/
406
+ .wrangler/
407
+ .next/
408
+
409
+ # OS & IDE
410
+ .DS_Store
411
+ *.log
412
+ ```
413
+
414
+ ---
82
415
 
83
416
  ## Phase 3: Design System Foundation 🎨
84
417
 
85
- > Design tokens BEFORE components. shadcn/ui as default. Mobile-first always.
418
+ > **Design tokens BEFORE components. Semantic naming ALWAYS.**
419
+ > **Saved per brand — consistent across ALL projects of the same user/company.**
420
+ > **shadcn/ui components as default. Mobile-first always.**
421
+
422
+ ### Step 0: Check for Existing Brand Profile
423
+
424
+ Before creating a new design system, check if `~/.cm-design-profiles/` exists.
425
+ If the user has a previous design profile, **reuse it** for brand consistency.
426
+
427
+ ```json
428
+ // ~/.cm-design-profiles/{org-name}.json
429
+ // Auto-saved after first project. Reused for all future projects.
430
+ {
431
+ "orgName": "my-work-org",
432
+ "brand": {
433
+ "name": "Acme Corp",
434
+ "industry": "technology",
435
+ "style": "professional-modern"
436
+ },
437
+ "colors": {
438
+ "primary": { "50": "#eff6ff", "500": "#3b82f6", "600": "#2563eb", "700": "#1d4ed8" },
439
+ "accent": { "500": "#f59e0b" },
440
+ "success": "#22c55e",
441
+ "warning": "#f59e0b",
442
+ "error": "#ef4444"
443
+ },
444
+ "typography": {
445
+ "fontFamily": "Inter",
446
+ "monoFamily": "JetBrains Mono"
447
+ },
448
+ "ui": {
449
+ "library": "shadcn/ui",
450
+ "borderRadius": "0.5rem",
451
+ "darkMode": true
452
+ },
453
+ "lastUpdated": "2026-03-17",
454
+ "usedInProjects": ["my-awesome-project", "my-frontend-app"]
455
+ }
456
+ ```
457
+
458
+ **Rules:**
459
+ - If profile exists → load and apply. Ask user: "Found design profile for {orgName}. Reuse it?"
460
+ - If no profile → ask user about brand/industry → create new profile
461
+ - After bootstrap, **always save** the design profile to `~/.cm-design-profiles/`
462
+ - Profile is updated with each new project that uses it
463
+
464
+ ### Step 1: Ask Brand Context (if no profile exists)
465
+
466
+ ```
467
+ 🎨 DESIGN SYSTEM SETUP
468
+
469
+ No existing design profile found. Tell me about your brand:
470
+
471
+ 1. Company/Brand name: ___________
472
+ 2. Industry: ___________
473
+ 3. Style preference: (professional / playful / minimal / bold)
474
+ 4. Primary brand color (hex): ___________ (or "auto" to suggest)
475
+ 5. Dark mode needed? (yes / no) [default: yes]
476
+ 6. UI Library: [shadcn/ui] (Enter to keep, or type alternative)
477
+ ```
478
+
479
+ ### Step 2: Create Design Tokens
480
+
481
+ **For shadcn/ui projects (default):**
482
+
483
+ Design tokens are managed through `tailwind.config.ts` and shadcn's CSS variables.
484
+ Customize `app/globals.css` (or `src/index.css`) with brand colors:
485
+
486
+ ```css
487
+ @tailwind base;
488
+ @tailwind components;
489
+ @tailwind utilities;
490
+
491
+ @layer base {
492
+ :root {
493
+ /* === Brand Colors (from profile or user input) === */
494
+ --background: 0 0% 100%;
495
+ --foreground: 222.2 84% 4.9%;
496
+ --card: 0 0% 100%;
497
+ --card-foreground: 222.2 84% 4.9%;
498
+ --popover: 0 0% 100%;
499
+ --popover-foreground: 222.2 84% 4.9%;
500
+ --primary: 221.2 83.2% 53.3%; /* ← Brand primary */
501
+ --primary-foreground: 210 40% 98%;
502
+ --secondary: 210 40% 96.1%;
503
+ --secondary-foreground: 222.2 47.4% 11.2%;
504
+ --muted: 210 40% 96.1%;
505
+ --muted-foreground: 215.4 16.3% 46.9%;
506
+ --accent: 210 40% 96.1%;
507
+ --accent-foreground: 222.2 47.4% 11.2%;
508
+ --destructive: 0 84.2% 60.2%;
509
+ --destructive-foreground: 210 40% 98%;
510
+ --border: 214.3 31.8% 91.4%;
511
+ --input: 214.3 31.8% 91.4%;
512
+ --ring: 221.2 83.2% 53.3%; /* ← Brand primary */
513
+ --radius: 0.5rem;
514
+
515
+ /* === Additional Semantic Tokens === */
516
+ --success: 142.1 76.2% 36.3%;
517
+ --warning: 37.7 92.1% 50.2%;
518
+ --info: 221.2 83.2% 53.3%;
519
+ }
520
+
521
+ .dark {
522
+ --background: 222.2 84% 4.9%;
523
+ --foreground: 210 40% 98%;
524
+ --card: 222.2 84% 4.9%;
525
+ --card-foreground: 210 40% 98%;
526
+ --popover: 222.2 84% 4.9%;
527
+ --popover-foreground: 210 40% 98%;
528
+ --primary: 217.2 91.2% 59.8%;
529
+ --primary-foreground: 222.2 47.4% 11.2%;
530
+ --secondary: 217.2 32.6% 17.5%;
531
+ --secondary-foreground: 210 40% 98%;
532
+ --muted: 217.2 32.6% 17.5%;
533
+ --muted-foreground: 215 20.2% 65.1%;
534
+ --accent: 217.2 32.6% 17.5%;
535
+ --accent-foreground: 210 40% 98%;
536
+ --destructive: 0 62.8% 30.6%;
537
+ --destructive-foreground: 210 40% 98%;
538
+ --border: 217.2 32.6% 17.5%;
539
+ --input: 217.2 32.6% 17.5%;
540
+ --ring: 224.3 76.3% 48%;
541
+ }
542
+ }
543
+ ```
544
+
545
+ **For vanilla/static projects:**
546
+
547
+ Create `design-tokens.css` with CSS custom properties (see example in project scaffold).
548
+ Use the same brand colors from the profile.
549
+
550
+ ### Step 3: Install shadcn/ui Components (SPA/Fullstack projects)
551
+
552
+ Install essential base components:
553
+
554
+ ```bash
555
+ # Core layout components
556
+ npx shadcn@latest add button
557
+ npx shadcn@latest add input
558
+ npx shadcn@latest add label
559
+ npx shadcn@latest add card
560
+ npx shadcn@latest add dialog
561
+ npx shadcn@latest add dropdown-menu
562
+ npx shadcn@latest add toast
563
+ npx shadcn@latest add skeleton
564
+ ```
565
+
566
+ > Only install what's needed. Add more components as features require them.
567
+
568
+ ### Step 4: Mobile-First Base Styles
569
+
570
+ ```css
571
+ /* Always include these mobile-first foundations */
572
+
573
+ /* Touch-friendly interactive elements */
574
+ button, a, [role="button"] {
575
+ min-height: 44px;
576
+ min-width: 44px;
577
+ }
578
+
579
+ /* Responsive container */
580
+ .container {
581
+ width: 100%;
582
+ padding-inline: 1rem;
583
+ }
86
584
 
87
- 1. Check `~/.cm-design-profiles/{org}.json` for existing brand profile → reuse
88
- 2. If no profile: ask brand context (name, industry, style, primary color, dark mode)
89
- 3. Create design tokens (CSS custom properties for shadcn/ui or vanilla)
90
- 4. Install base shadcn/ui components: button, input, label, card, dialog, dropdown-menu, toast, skeleton
91
- 5. Add mobile-first base styles (44px touch targets, responsive container, safe-area)
92
- 6. Save design profile to `~/.cm-design-profiles/`
585
+ @media (min-width: 640px) { .container { padding-inline: 1.5rem; } }
586
+ @media (min-width: 1024px) { .container { max-width: 1024px; margin-inline: auto; } }
587
+ @media (min-width: 1280px) { .container { max-width: 1280px; } }
588
+
589
+ /* Safe area for mobile devices */
590
+ body {
591
+ padding: env(safe-area-inset-top) env(safe-area-inset-right)
592
+ env(safe-area-inset-bottom) env(safe-area-inset-left);
593
+ }
594
+ ```
595
+
596
+ ### Step 5: Save Design Profile
597
+
598
+ After setting up the design system, **auto-save** to `~/.cm-design-profiles/{org}.json`:
599
+ - Brand colors, fonts, border radius, UI library preference
600
+ - Add current project to `usedInProjects` array
601
+ - Next project with same org → instant design system reuse
602
+
603
+ ### Design System Rules
604
+
605
+ ```
606
+ ✅ DO:
607
+ - Use shadcn/ui components as building blocks (SPA/Fullstack)
608
+ - Use semantic color tokens: bg-primary, text-muted-foreground
609
+ - Design mobile layout FIRST, then enhance for larger screens
610
+ - Reuse brand profile from ~/.cm-design-profiles/
611
+ - Touch targets: minimum 44x44px
612
+ - Test at 375px (iPhone SE) as baseline
613
+
614
+ ❌ DON'T:
615
+ - Use raw hex colors: color: #333 → use token
616
+ - Design desktop-first then "fix" mobile
617
+ - Create new color palette when brand profile exists
618
+ - Skip dark mode (enabled by default)
619
+ - Use fixed widths on mobile: width: 500px
620
+ - Ignore safe-area-inset on mobile
621
+ ```
622
+
623
+ ---
93
624
 
94
625
  ## Phase 4: i18n From Day 1 🌍
95
626
 
96
- 1. Create i18n engine (vanilla `i18n.js` or `react-i18next`)
97
- 2. Create language files: primary (source of truth) + targets
98
- 3. Rules: ALL strings via `t()` or `data-i18n`. MAX 30 strings per batch. Run i18n-sync test after every batch.
627
+ > **Keep from v1 enhanced to be framework-agnostic.**
628
+
629
+ ### Step 1: Create i18n Engine
630
+
631
+ For **static/vanilla** projects, create `i18n.js`:
632
+
633
+ ```javascript
634
+ const i18n = {
635
+ currentLang: 'vi',
636
+ translations: {},
637
+
638
+ async init(lang) {
639
+ this.currentLang = lang || localStorage.getItem('lang') || 'vi';
640
+ try {
641
+ const res = await fetch(`/static/i18n/${this.currentLang}.json`);
642
+ this.translations = await res.json();
643
+ } catch {
644
+ const fallback = await fetch('/static/i18n/vi.json');
645
+ this.translations = await fallback.json();
646
+ }
647
+ this.apply();
648
+ },
649
+
650
+ t(key) {
651
+ return key.split('.').reduce((obj, k) => obj?.[k], this.translations) || `[${key}]`;
652
+ },
653
+
654
+ apply() {
655
+ document.querySelectorAll('[data-i18n]').forEach(el => {
656
+ el.textContent = this.t(el.dataset.i18n);
657
+ });
658
+ document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
659
+ el.placeholder = this.t(el.dataset.i18nPlaceholder);
660
+ });
661
+ document.documentElement.lang = this.currentLang;
662
+ },
663
+
664
+ async switchTo(lang) {
665
+ localStorage.setItem('lang', lang);
666
+ await this.init(lang);
667
+ }
668
+ };
669
+ ```
670
+
671
+ For **React/Vite** projects, use `react-i18next`:
672
+ ```bash
673
+ npm install i18next react-i18next i18next-browser-languagedetector
674
+ ```
675
+
676
+ For **Astro** projects, use `astro-i18n` or manual routing.
677
+
678
+ ### Step 2: Create Language Files
679
+
680
+ ```
681
+ i18n/
682
+ ├── vi.json ← Source of truth (primary language)
683
+ ├── en.json
684
+ ├── th.json
685
+ └── ph.json
686
+ ```
687
+
688
+ ### Step 3: i18n Rules
689
+
690
+ ```
691
+ ✅ DO:
692
+ - Write ALL user-facing strings with t() or data-i18n
693
+ - Primary language file is source of truth
694
+ - MAX 30 strings per batch when extracting
695
+ - Run i18n-sync test after every batch
696
+
697
+ ❌ DON'T:
698
+ - Hardcode strings: "Save" → use t('common.save')
699
+ - Add 600 strings in one shot → app crashes
700
+ - Translate before primary language is complete
701
+ - Skip audit gates between batches
702
+ ```
703
+
704
+ ---
99
705
 
100
706
  ## Phase 5: SEO Foundation 🔍
101
707
 
102
- Every page must have: title (<60 chars), meta description (150-160 chars), exactly ONE h1, heading hierarchy (no skipping), semantic HTML, alt attributes, canonical URL, Open Graph, lang attribute, unique IDs.
708
+ > **NEW Learn from Lovable & Cursor: SEO is infrastructure, not afterthought.**
709
+
710
+ ### Step 1: HTML Head Template
711
+
712
+ Every page must include:
713
+
714
+ ```html
715
+ <!DOCTYPE html>
716
+ <html lang="vi">
717
+ <head>
718
+ <meta charset="UTF-8">
719
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
720
+
721
+ <!-- SEO: Title and Description -->
722
+ <title data-i18n="meta.title">Project Name — Short description</title>
723
+ <meta name="description" data-i18n-content="meta.description" content="Page description 150-160 characters">
724
+
725
+ <!-- SEO: Open Graph -->
726
+ <meta property="og:title" content="Project Name">
727
+ <meta property="og:description" content="Page description">
728
+ <meta property="og:type" content="website">
729
+ <meta property="og:url" content="https://yourdomain.com">
730
+ <meta property="og:image" content="https://yourdomain.com/og-image.png">
731
+
732
+ <!-- SEO: Twitter Card -->
733
+ <meta name="twitter:card" content="summary_large_image">
734
+ <meta name="twitter:title" content="Project Name">
735
+ <meta name="twitter:description" content="Page description">
736
+
737
+ <!-- SEO: Canonical URL -->
738
+ <link rel="canonical" href="https://yourdomain.com">
739
+
740
+ <!-- Performance: Preconnect to fonts -->
741
+ <link rel="preconnect" href="https://fonts.googleapis.com">
742
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
743
+
744
+ <!-- Favicon -->
745
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
746
+
747
+ <!-- Styles -->
748
+ <link rel="stylesheet" href="/static/css/design-tokens.css">
749
+ <link rel="stylesheet" href="/static/css/style.css">
750
+ </head>
751
+ <body>
752
+ <!-- Content with semantic HTML -->
753
+ <header role="banner">...</header>
754
+ <nav role="navigation" aria-label="Main">...</nav>
755
+ <main role="main">
756
+ <h1>One H1 per page</h1>
757
+ ...
758
+ </main>
759
+ <footer role="contentinfo">...</footer>
760
+
761
+ <script src="/static/js/i18n.js"></script>
762
+ <script src="/static/js/app.js" defer></script>
763
+ </body>
764
+ </html>
765
+ ```
766
+
767
+ ### Step 2: SEO Checklist
768
+
769
+ Every page must pass:
770
+
771
+ | # | Check | Rule |
772
+ |---|-------|------|
773
+ | 1 | Title tag | Descriptive, unique per page, < 60 chars |
774
+ | 2 | Meta description | Compelling, 150-160 chars |
775
+ | 3 | H1 tag | Exactly ONE per page |
776
+ | 4 | Heading hierarchy | h1 → h2 → h3 (no skipping) |
777
+ | 5 | Semantic HTML | `<header>`, `<nav>`, `<main>`, `<footer>`, `<article>`, `<section>` |
778
+ | 6 | Alt attributes | Every `<img>` has descriptive alt text |
779
+ | 7 | Canonical URL | Prevents duplicate content |
780
+ | 8 | Open Graph | Social sharing preview |
781
+ | 9 | Lang attribute | `<html lang="vi">` matches current language |
782
+ | 10 | Unique IDs | All interactive elements have unique, descriptive IDs |
783
+
784
+ ---
103
785
 
104
786
  ## Phase 6: AGENTS.md + Git Safety 🤖
105
787
 
106
- 1. Create `AGENTS.md` at root project overview, commands, structure, conventions, rules
107
- 2. Enforce conventional commits: `feat:`, `fix:`, `docs:`, `test:`, `chore:`, `i18n:`
108
- 3. Branch protection: main (staging, no force push), production (merge from main only)
109
- 4. Create PR template (`.github/pull_request_template.md`)
788
+ > **NEW Learn from Amp & Claude Code: Project manifest for AI collaboration.**
789
+
790
+ ### Step 1: Create AGENTS.md
791
+
792
+ Every project MUST have this file at root:
793
+
794
+ ```markdown
795
+ # AGENTS.md — Project Manifest
796
+
797
+ > This file helps AI agents understand and work with this project effectively.
798
+
799
+ ## Project Overview
800
+ - **Name**: my-awesome-docs
801
+ - **Type**: Static Website (Cloudflare Pages)
802
+ - **Primary Language**: English (en)
803
+ - **Tech Stack**: HTML, vanilla JS, CSS, Cloudflare Pages
804
+
805
+ ## Commands
806
+ - `npm run dev` — Start local dev server
807
+ - `npm run test` — Run all tests
808
+ - `npm run test:gate` — Run pre-deploy test gate
809
+ - `npm run deploy:staging` — Deploy to staging
810
+ - `npm run deploy:production` — Deploy to production
811
+
812
+ ## Project Structure
813
+ ```
814
+ public/ — Static files served directly
815
+ static/css/ — Stylesheets (design-tokens.css, style.css)
816
+ static/js/ — JavaScript (app.js, i18n.js)
817
+ static/i18n/ — Language files (vi.json, en.json, ...)
818
+ src/ — Backend source (if applicable)
819
+ tests/ — Test files
820
+ docs/plans/ — Implementation plans
821
+ ```
822
+
823
+ ## Code Conventions
824
+ - **i18n**: ALL user-facing strings must use t() or data-i18n. vi.json is source of truth.
825
+ - **CSS**: Use design tokens only. Never raw hex colors or arbitrary spacing.
826
+ - **Commits**: Conventional format — `feat:`, `fix:`, `docs:`, `test:`, `chore:`
827
+ - **Branches**: `main` = staging, `production` = production only
828
+ - **Deploy**: Always staging first. Production requires explicit request.
829
+
830
+ ## Important Rules
831
+ 1. Run `cm-identity-guard` before any git push
832
+ 2. Never force push to main or production
833
+ 3. i18n extraction: MAX 30 strings per batch
834
+ 4. Run test:gate before every deploy
835
+ 5. Check `.project-identity.json` for deploy targets
836
+ ```
837
+
838
+ ### Step 2: Git Safety Protocol
839
+
840
+ #### Conventional Commits
841
+ From the very first commit, enforce:
842
+
843
+ ```
844
+ feat: add user login page
845
+ fix: correct i18n key for save button
846
+ docs: update README with deploy instructions
847
+ test: add frontend safety tests
848
+ chore: update dependencies
849
+ i18n: extract settings page strings (batch 3/5)
850
+ ```
851
+
852
+ #### Branch Protection Rules
853
+ ```
854
+ main branch:
855
+ ✅ Direct push allowed (staging)
856
+ ❌ Never force push
857
+ ✅ Run test:gate before deploy
858
+
859
+ production branch:
860
+ ❌ Never direct push
861
+ ✅ Only via: git checkout production && git merge main && git push
862
+ ✅ Requires staging verification first
863
+ ❌ Never force push
864
+ ```
865
+
866
+ #### First Commit
867
+ ```bash
868
+ git add .
869
+ git commit -m "chore: bootstrap project with cm-project-bootstrap v2.0"
870
+ ```
871
+
872
+ #### PR Template (`.github/pull_request_template.md`)
873
+ ```markdown
874
+ ## What Changed
875
+ <!-- Brief description -->
876
+
877
+ ## Test Plan
878
+ - [ ] Tests pass (`npm run test:gate`)
879
+ - [ ] Staging verified
880
+ - [ ] i18n keys present in all languages
881
+ - [ ] No raw strings in UI
882
+
883
+ ## Deploy
884
+ - [ ] Ready for staging
885
+ - [ ] Ready for production (requires staging verification)
886
+ ```
887
+
888
+ ---
110
889
 
111
890
  ## Phase 7: Test Infrastructure 🧪
112
891
 
113
- 1. Create `vitest.config.js`
114
- 2. Create `tests/unit/frontend-safety.test.js` — HTML structure, JS syntax, CSS tokens, AGENTS.md exists
115
- 3. Create `tests/unit/i18n-sync.test.js` — key parity across languages
116
- 4. Wire up `test:gate` in package.json
892
+ ### Step 1: Create Test Config
893
+
894
+ ```javascript
895
+ // vitest.config.js (or vitest.config.ts)
896
+ import { defineConfig } from 'vitest/config';
897
+
898
+ export default defineConfig({
899
+ test: {
900
+ globals: true,
901
+ environment: 'node',
902
+ include: ['tests/**/*.test.{js,ts}'],
903
+ },
904
+ });
905
+ ```
906
+
907
+ ### Step 2: Frontend Safety Tests
908
+
909
+ Create `tests/unit/frontend-safety.test.js`:
910
+
911
+ ```javascript
912
+ import { describe, it, expect } from 'vitest';
913
+ import { readFileSync, readdirSync, existsSync } from 'fs';
914
+ import { join } from 'path';
915
+
916
+ describe('Frontend Safety', () => {
917
+ // Test 1: HTML files have proper structure
918
+ it('index.html has required meta tags', () => {
919
+ const html = readFileSync('public/index.html', 'utf-8');
920
+ expect(html).toContain('<meta charset=');
921
+ expect(html).toContain('<meta name="viewport"');
922
+ expect(html).toContain('<title');
923
+ expect(html).toContain('lang=');
924
+ });
925
+
926
+ // Test 2: No syntax errors in JS files
927
+ it('JavaScript files parse without errors', () => {
928
+ const jsDir = 'public/static/js';
929
+ if (!existsSync(jsDir)) return;
930
+ const files = readdirSync(jsDir).filter(f => f.endsWith('.js'));
931
+ files.forEach(file => {
932
+ const content = readFileSync(join(jsDir, file), 'utf-8');
933
+ expect(() => new Function(content)).not.toThrow();
934
+ });
935
+ });
936
+
937
+ // Test 3: CSS files reference design tokens (not raw values)
938
+ it('stylesheets use design tokens', () => {
939
+ const cssFile = 'public/static/css/style.css';
940
+ if (!existsSync(cssFile)) return;
941
+ const css = readFileSync(cssFile, 'utf-8');
942
+ // Warn if raw hex colors found outside of design-tokens.css
943
+ const rawColors = css.match(/#[0-9a-fA-F]{3,8}(?!.*design-tokens)/g);
944
+ if (rawColors && rawColors.length > 0) {
945
+ console.warn(`⚠️ Found ${rawColors.length} raw color values. Use design tokens instead.`);
946
+ }
947
+ });
948
+
949
+ // Test 4: Design tokens file exists
950
+ it('design-tokens.css exists', () => {
951
+ expect(existsSync('public/static/css/design-tokens.css')).toBe(true);
952
+ });
953
+
954
+ // Test 5: AGENTS.md exists
955
+ it('AGENTS.md exists at project root', () => {
956
+ expect(existsSync('AGENTS.md')).toBe(true);
957
+ });
958
+
959
+ // Test 6: .project-identity.json exists
960
+ it('.project-identity.json exists', () => {
961
+ expect(existsSync('.project-identity.json')).toBe(true);
962
+ });
963
+ });
964
+ ```
965
+
966
+ ### Step 3: i18n Sync Tests
967
+
968
+ Create `tests/unit/i18n-sync.test.js`:
969
+
970
+ ```javascript
971
+ import { describe, it, expect } from 'vitest';
972
+ import { readFileSync, readdirSync, existsSync } from 'fs';
973
+ import { join } from 'path';
974
+
975
+ describe('i18n Sync', () => {
976
+ const i18nDir = 'public/static/i18n';
977
+
978
+ it('primary language file exists', () => {
979
+ expect(existsSync(join(i18nDir, 'vi.json'))).toBe(true);
980
+ });
981
+
982
+ it('all language files have same keys as primary', () => {
983
+ if (!existsSync(i18nDir)) return;
984
+ const primaryKeys = getAllKeys(
985
+ JSON.parse(readFileSync(join(i18nDir, 'vi.json'), 'utf-8'))
986
+ );
987
+
988
+ const langFiles = readdirSync(i18nDir)
989
+ .filter(f => f.endsWith('.json') && f !== 'vi.json');
990
+
991
+ langFiles.forEach(file => {
992
+ const langKeys = getAllKeys(
993
+ JSON.parse(readFileSync(join(i18nDir, file), 'utf-8'))
994
+ );
995
+ const missing = primaryKeys.filter(k => !langKeys.includes(k));
996
+ expect(missing, `${file} missing keys: ${missing.join(', ')}`).toEqual([]);
997
+ });
998
+ });
999
+ });
1000
+
1001
+ function getAllKeys(obj, prefix = '') {
1002
+ return Object.entries(obj).flatMap(([key, val]) => {
1003
+ const fullKey = prefix ? `${prefix}.${key}` : key;
1004
+ return typeof val === 'object' && val !== null
1005
+ ? getAllKeys(val, fullKey)
1006
+ : [fullKey];
1007
+ });
1008
+ }
1009
+ ```
1010
+
1011
+ ### Step 4: Package Scripts
1012
+
1013
+ Ensure `package.json` has:
1014
+
1015
+ ```json
1016
+ {
1017
+ "scripts": {
1018
+ "test": "vitest run",
1019
+ "test:watch": "vitest",
1020
+ "test:gate": "vitest run"
1021
+ }
1022
+ }
1023
+ ```
1024
+
1025
+ ---
117
1026
 
118
1027
  ## Phase 8: Deploy Pipeline (8 Gates) 🚀
119
1028
 
120
- Gates run sequentially: Identity Branch Test Build i18n → Lint → Accessibility → Performance.
121
- See `cm-safe-deploy` for the full 9-gate pipeline details.
1029
+ > **Enhanced from 6 to 8 gates adding accessibility + performance.**
1030
+
1031
+ ### The 8 Gates
1032
+
1033
+ ```
1034
+ Gate 1: Identity Check — .project-identity.json matches deploy target
1035
+ Gate 2: Branch Check — On correct branch (main=staging, production=prod)
1036
+ Gate 3: Test Gate — npm run test:gate passes
1037
+ Gate 4: Build Gate — npm run build succeeds (if applicable)
1038
+ Gate 5: i18n Gate — All language files in sync
1039
+ Gate 6: Lint Gate — No lint errors (if linter configured)
1040
+ Gate 7: Accessibility Gate — Semantic HTML, alt tags, ARIA labels present
1041
+ Gate 8: Performance Gate — No obviously large bundles or unoptimized assets
1042
+ ```
1043
+
1044
+ ### Gate Implementation
1045
+
1046
+ #### Gate 1: Identity Check
1047
+ ```bash
1048
+ # Read .project-identity.json → confirm Cloudflare account + project name
1049
+ cat .project-identity.json | jq '.cloudflare'
1050
+ ```
1051
+
1052
+ #### Gate 2: Branch Check
1053
+ ```bash
1054
+ # Verify current branch
1055
+ BRANCH=$(git branch --show-current)
1056
+ if [ "$1" = "production" ] && [ "$BRANCH" != "production" ]; then
1057
+ echo "❌ Must be on production branch for production deploy"
1058
+ exit 1
1059
+ fi
1060
+ ```
1061
+
1062
+ #### Gate 3: Test Gate
1063
+ ```bash
1064
+ npm run test:gate
1065
+ ```
1066
+
1067
+ #### Gate 4: Build Gate
1068
+ ```bash
1069
+ npm run build 2>&1 || { echo "❌ Build failed"; exit 1; }
1070
+ ```
1071
+
1072
+ #### Gate 5: i18n Gate
1073
+ ```bash
1074
+ # Verified by i18n-sync test in Gate 3
1075
+ echo "✅ i18n sync verified by test suite"
1076
+ ```
1077
+
1078
+ #### Gate 6: Lint Gate
1079
+ ```bash
1080
+ npm run lint 2>&1 || echo "⚠️ Lint warnings (non-blocking)"
1081
+ ```
1082
+
1083
+ #### Gate 7: Accessibility Gate
1084
+ ```bash
1085
+ # Check HTML for basic accessibility
1086
+ echo "Checking semantic HTML..."
1087
+ grep -r '<img' public/ | grep -v 'alt=' && echo "❌ Images missing alt attributes" || echo "✅ All images have alt"
1088
+ grep -r 'role=' public/index.html > /dev/null && echo "✅ ARIA roles present" || echo "⚠️ Consider adding ARIA roles"
1089
+ ```
1090
+
1091
+ #### Gate 8: Performance Gate
1092
+ ```bash
1093
+ # Check for obviously large files
1094
+ find public/ -type f -size +500k | head -5
1095
+ if [ $? -eq 0 ]; then
1096
+ echo "⚠️ Large files detected. Consider optimizing."
1097
+ fi
1098
+ echo "✅ Performance gate passed"
1099
+ ```
1100
+
1101
+ ### Deploy Commands
1102
+
1103
+ ```bash
1104
+ # Staging (default)
1105
+ npm run deploy:staging
1106
+
1107
+ # Production (explicit only)
1108
+ npm run deploy:production
1109
+ ```
1110
+
1111
+ ---
122
1112
 
123
1113
  ## Phase 9: Development Workflow 🔄
124
1114
 
125
- Daily loop: Plan → Branch → TDD → Build → Test → Review → Commit → Deploy staging → Verify → Merge production.
1115
+ ### Daily Development Loop
126
1116
 
127
- Deploy rules: `deploy` = staging. `deploy production` = requires staging verified first.
1117
+ ```
1118
+ 1. Plan → cm-brainstorm / cm-writing-plans
1119
+ 2. Branch → cm-using-git-worktrees (optional for complex features)
1120
+ 3. TDD → cm-test-driven-development
1121
+ 4. Build → Implement the feature
1122
+ 5. Test → npm run test:gate
1123
+ 6. Review → cm-requesting-code-review
1124
+ 7. Commit → Conventional commit format
1125
+ 8. Deploy → deploy:staging (8-gate pipeline)
1126
+ 9. Verify → Check staging URL
1127
+ 10. Merge → production branch (when ready)
1128
+ ```
128
1129
 
129
- ## Phase 9.5: Working Memory Init 🧠
1130
+ ### When to Call Which Skill
1131
+
1132
+ | Situation | Skill |
1133
+ |-----------|-------|
1134
+ | Starting a feature | `cm-brainstorm` |
1135
+ | Writing implementation plan | `cm-writing-plans` |
1136
+ | Need isolated workspace | `cm-using-git-worktrees` |
1137
+ | Writing tests first | `cm-test-driven-development` |
1138
+ | Running independent tasks | `cm-subagent-driven-development` |
1139
+ | Executing a plan | `cm-executing-plans` |
1140
+ | Before deploying | `cm-pre-deploy-testing` → `cm-identity-guard` |
1141
+ | After implementing | `cm-requesting-code-review` |
1142
+ | Receiving review | `cm-receiving-code-review` |
1143
+ | Bug found | `cm-systematic-debugging` |
1144
+ | Extracting i18n | `cm-safe-i18n-translation` |
1145
+ | Before git push | `cm-identity-guard` |
1146
+ | Finishing feature branch | `cm-finishing-a-development-branch` |
1147
+ | Before claiming done | `cm-verification-before-completion` |
1148
+ | **Need a skill you don't have** | **→ Adaptive Skills Discovery (below)** |
1149
+
1150
+ ### Deploy Behavior Rules
130
1151
 
131
- 1. Create `.cm/CONTINUITY.md` from `cm-continuity` template
132
- 2. Add `.cm/` to `.gitignore` (local working memory)
133
- 3. Reference in AGENTS.md
1152
+ ```
1153
+ User says "deploy" → Deploy to STAGING
1154
+ User says "deploy staging" → Deploy to STAGING
1155
+ User says "deploy production"→ Deploy to PRODUCTION (requires staging verified)
1156
+ User says "deploy prod" → Deploy to PRODUCTION (requires staging verified)
1157
+
1158
+ After successful production deploy:
1159
+ → Suggest updating CHANGELOG.md
1160
+ → Suggest updating docs/ if applicable
1161
+ → Suggest creating git tag: git tag v1.x.x
1162
+ ```
1163
+
1164
+ ---
134
1165
 
135
1166
  ## Adaptive Skills Discovery 🧠
136
1167
 
137
- When agent encounters unknown task:
138
- 1. DETECT gap 2. `npx skills find "{keyword}"` → 3. REVIEW SKILL.md → 4. ASK user → 5. INSTALL → 6. USE → 7. LOG to `.cm-skills-log.json`
1168
+ > **The bootstrap doesn't just set up a project — it LEARNS what the project needs.**
1169
+ > **Like a framework that finds its own missing pieces.**
139
1170
 
140
- Safety: always show user before installing, prefer known repos, install project-level, log every install.
1171
+ ### Philosophy
141
1172
 
142
- ## Output Checklist ✅
1173
+ ```
1174
+ DON'T just fail when you hit something you've never done.
1175
+ DO search for a skill that can help.
1176
+ DON'T install blindly — review what the skill does first.
1177
+ DO remember what was useful for next time.
1178
+ ```
1179
+
1180
+ ### How It Works: The Discovery Loop
1181
+
1182
+ When the agent encounters a task it doesn't have a skill for:
1183
+
1184
+ ```
1185
+ 1. DETECT → "I need to do X but don't have a matching skill"
1186
+ 2. SEARCH → npx skills find {keyword} — search skills.sh registry
1187
+ 3. REVIEW → Read the SKILL.md of the found skill — is it safe & relevant?
1188
+ 4. ASK → "Found skill '{name}': {description}. Install it?"
1189
+ 5. INSTALL → npx skills add {source} --skill {name} -a antigravity -y
1190
+ 6. USE → Apply the newly installed skill to the current task
1191
+ 7. LOG → Record what was installed + why in .cm-skills-log.json
1192
+ ```
1193
+
1194
+ ### Step 1: Search for Skills
1195
+
1196
+ Use `npx skills find` to search the community registry at [skills.sh](https://skills.sh):
1197
+
1198
+ ```bash
1199
+ # Interactive search (fuzzy finder)
1200
+ npx skills find
1201
+
1202
+ # Search by keyword
1203
+ npx skills find "nextjs"
1204
+ npx skills find "supabase"
1205
+ npx skills find "testing"
1206
+ npx skills find "deployment"
1207
+
1208
+ # Browse a known skills repository
1209
+ npx skills add vercel-labs/agent-skills --list
1210
+ ```
1211
+
1212
+ ### Step 2: Install Safely
1213
+
1214
+ ```bash
1215
+ # Install to Antigravity agent (project-level)
1216
+ npx skills add vercel-labs/agent-skills --skill {skill-name} -a antigravity
1217
+
1218
+ # Install globally (available to all projects)
1219
+ npx skills add vercel-labs/agent-skills --skill {skill-name} -a antigravity -g
1220
+
1221
+ # From any GitHub repo
1222
+ npx skills add https://github.com/{owner}/{repo} --skill {skill-name} -a antigravity
1223
+ ```
1224
+
1225
+ ### Step 3: Log What Was Installed
1226
+
1227
+ Maintain `.cm-skills-log.json` at project root to track what was discovered:
1228
+
1229
+ ```json
1230
+ {
1231
+ "discoveredSkills": [
1232
+ {
1233
+ "name": "supabase-rls",
1234
+ "source": "vercel-labs/agent-skills",
1235
+ "installedAt": "2026-03-17",
1236
+ "reason": "User needed Row Level Security setup",
1237
+ "scope": "project"
1238
+ }
1239
+ ]
1240
+ }
1241
+ ```
143
1242
 
144
- After bootstrap, project MUST have: `.project-identity.json`, `AGENTS.md`, `.gitignore` (hardened), `.gitleaks.toml`, pre-commit hook, `.dev.vars.example`, `package.json` (with deploy/test scripts), design tokens/shadcn, i18n files, SEO meta tags, test files, main + production branches, `.cm/CONTINUITY.md`.
1243
+ ### When to Trigger Discovery
145
1244
 
146
- ## Template Files (load on-demand with view_file)
1245
+ | Situation | Search Keywords |
1246
+ |-----------|----------------|
1247
+ | User asks for something you've never done | Search by the technology/concept name |
1248
+ | A framework you're unfamiliar with | `npx skills find "{framework}"` |
1249
+ | Complex DevOps / CI/CD setup | `npx skills find "deployment"`, `"ci"`, `"docker"` |
1250
+ | Database patterns | `npx skills find "prisma"`, `"supabase"`, `"drizzle"` |
1251
+ | Testing frameworks | `npx skills find "playwright"`, `"cypress"`, `"vitest"` |
1252
+ | UI component libraries | `npx skills find "shadcn"`, `"radix"`, `"design-system"` |
1253
+ | Auth / payment / external | `npx skills find "auth"`, `"stripe"`, `"clerk"` |
147
1254
 
148
- | Template | Use When |
149
- |----------|----------|
150
- | `templates/vitest.config.js` | Phase 7: Setting up test infrastructure |
151
- | `templates/frontend-safety.test.js` | Phase 7: Creating frontend safety tests |
152
- | `templates/i18n-sync.test.js` | Phase 7: Creating i18n sync tests |
153
- | `templates/project-identity.json` | Phase 0: Creating .project-identity.json |
154
- | `templates/AGENTS.md` | Phase 6: Creating AGENTS.md |
155
- | `templates/pr-template.md` | Phase 6: Creating PR template |
1255
+ ### Safety Rules
1256
+
1257
+ ```
1258
+ DO:
1259
+ - Always show the user what skill you found before installing
1260
+ - Prefer skills from known repos (vercel-labs/agent-skills, etc.)
1261
+ - Install project-level by default, global only if user agrees
1262
+ - Log every installed skill with reason
1263
+ - Check `npx skills list` to avoid duplicates
1264
+
1265
+ ❌ DON'T:
1266
+ - Install skills without user confirmation
1267
+ - Install from untrusted/unknown sources without review
1268
+ - Override existing cm-* skills with external ones
1269
+ - Install more than needed — minimal is better
1270
+ ```
1271
+
1272
+ ### Self-Improvement Loop
1273
+
1274
+ After completing a project, the bootstrap gets smarter:
1275
+
1276
+ ```
1277
+ 1. Review .cm-skills-log.json — what new skills were needed?
1278
+ 2. If a skill was useful → suggest making it a permanent cm-* skill
1279
+ 3. If the same type of skill is needed across 3+ projects →
1280
+ auto-suggest: "This skill seems essential. Make it part of your default toolkit?"
1281
+ 4. Update ~/.cm-identity-history.json with commonly needed skill patterns
1282
+ ```
1283
+
1284
+ ---
1285
+
1286
+ ## Phase 9.5: Working Memory Init 🧠
1287
+
1288
+ > **MANDATORY. Every project gets a CONTINUITY.md.**
1289
+ > **This is what makes AI remember context across sessions.**
1290
+
1291
+ ### Step 1: Create `.cm/` directory
1292
+
1293
+ ```bash
1294
+ mkdir -p .cm
1295
+ ```
1296
+
1297
+ ### Step 2: Create CONTINUITY.md
1298
+
1299
+ Write `.cm/CONTINUITY.md` using the template from `cm-continuity` skill:
1300
+ - Set `Project:` to the project name from `.project-identity.json`
1301
+ - Set `Current Phase:` to `bootstrapping`
1302
+ - Set `Active Goal:` to the user's stated project purpose
1303
+ - Leave `Mistakes & Learnings` empty (will be populated during development)
1304
+
1305
+ ### Step 3: Add to .gitignore
1306
+
1307
+ `.cm/CONTINUITY.md` is **LOCAL working memory** — do NOT commit:
1308
+
1309
+ ```gitignore
1310
+ # Working memory (local only)
1311
+ .cm/
1312
+ ```
1313
+
1314
+ ### Step 4: Add to AGENTS.md
1315
+
1316
+ Add this line to the AGENTS.md "Important Rules" section:
1317
+
1318
+ ```markdown
1319
+ - Read `.cm/CONTINUITY.md` at the start of every session for context
1320
+ ```
1321
+
1322
+ ### Why This Saves Tokens
1323
+
1324
+ Next session, AI reads ~200 tokens from CONTINUITY.md instead of
1325
+ re-scanning 50+ files (~15,000 tokens). **Savings: ~97% on context loading.**
1326
+
1327
+ ---
156
1328
 
157
1329
  ## Anti-Patterns ❌
158
1330
 
159
- | Anti-Pattern | Prevention |
160
- |-------------|------------|
161
- | Skip identity lock | Phase 0 is MANDATORY |
162
- | No staging branch | Always 2 branches |
163
- | i18n "later" | Phase 4 from day 1 |
164
- | Raw hex colors | Design tokens only |
165
- | No AGENTS.md | Phase 6 creates it |
166
- | deploy = production | deploy = staging default |
167
- | 600 i18n strings at once | MAX 30 per batch |
1331
+ | # | Anti-Pattern | Consequence | Prevention |
1332
+ |---|-------------|-------------|------------|
1333
+ | 1 | Skip identity lock | Deploy to wrong Cloudflare account | Phase 0 is MANDATORY |
1334
+ | 2 | No staging branch | Bugs hit production directly | Always 2 branches |
1335
+ | 3 | i18n "later" | Weeks of refactoring | Phase 4 from day 1 |
1336
+ | 4 | Raw hex colors | Inconsistent UI, broken dark mode | Design tokens only |
1337
+ | 5 | No AGENTS.md | AI agents make wrong assumptions | Phase 6 creates it |
1338
+ | 6 | deploy = production | Users see bugs | deploy = staging default |
1339
+ | 7 | Code before plan | Technical debt from start | cm-writing-plans first |
1340
+ | 8 | Skip test:gate | "Tests pass" but app broken | 8-gate pipeline |
1341
+ | 9 | 600 i18n strings at once | App crash | MAX 30 per batch |
1342
+ | 10 | No design tokens | Every component has different colors | Phase 3 foundation |
1343
+ | 11 | Force push to main | Lost commits, broken deploys | Never. Period. |
1344
+ | 12 | No PR template | Unverified code reaches production | Phase 6 creates it |
1345
+
1346
+ ---
1347
+
1348
+ ## Output Checklist ✅
1349
+
1350
+ After bootstrap, the project MUST have:
1351
+
1352
+ ```
1353
+ ✅ .project-identity.json — Identity locked
1354
+ ✅ ~/.cm-identity-history.json — Identity saved for future suggestions
1355
+ ✅ ~/.cm-design-profiles/{org}.json — Brand design system saved
1356
+ ✅ .gitleaks.toml — Secret scanning config (Phase 0.5)
1357
+ ✅ .git/hooks/pre-commit — Secret Shield pre-commit hook (Phase 0.5)
1358
+ ✅ .dev.vars.example — Secret template (Phase 0.5)
1359
+ ✅ AGENTS.md — AI collaboration manifest
1360
+ ✅ .github/pull_request_template.md — PR template
1361
+ ✅ .gitignore — Hardened ignores (secrets, keys, env files)
1362
+ ✅ package.json — With deploy:staging, deploy:production, test:gate, security:scan
1363
+ ✅ shadcn/ui initialized — (SPA/Fullstack) or design-tokens.css (Static)
1364
+ ✅ globals.css / style.css — Brand tokens + mobile-first base styles
1365
+ ✅ i18n/vi.json — Primary language file
1366
+ ✅ i18n/[lang].json — Target language files (empty structure)
1367
+ ✅ index.html — With SEO meta tags, semantic HTML
1368
+ ✅ tests/frontend-safety — Safety checks
1369
+ ✅ tests/i18n-sync — Key parity tests
1370
+ ✅ vitest.config.js — Test configuration
1371
+ ✅ main branch — Staging deploys
1372
+ ✅ production branch — Production deploys
1373
+ ✅ First commit — "chore: bootstrap with cm-project-bootstrap v2.0"
1374
+ ✅ .cm/CONTINUITY.md — Working memory for AI context persistence
1375
+ ```