@glxmart/boss-cli 1.0.0 → 1.2.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 (317) hide show
  1. package/README.md +0 -1
  2. package/assets/claude-md/docs/conductor.md +139 -0
  3. package/assets/claude-md/docs/initialization.md +2 -2
  4. package/assets/claude-md/docs/workers.md +33 -54
  5. package/assets/claude-md/docs/workflow.md +23 -59
  6. package/assets/claude-md/template.md +198 -756
  7. package/assets/git-hooks/commit-msg.sh +4 -8
  8. package/assets/git-hooks/pre-commit.sh +0 -4
  9. package/assets/git-hooks/pre-push.sh +21 -0
  10. package/assets/github-workflows/CODEOWNERS +21 -2
  11. package/assets/github-workflows/boss-ci.yml +163 -23
  12. package/assets/github-workflows/boss-gates.yml +100 -13
  13. package/assets/template-docs/nextjs-app-turbo.md +412 -61
  14. package/assets/template-loader/gitignore +14 -0
  15. package/assets/worker-configs/architect/.claude/skills/conductor-orchestration.md +635 -0
  16. package/assets/worker-configs/architect/.claude/skills/spec-kit-workflow.md +827 -0
  17. package/assets/worker-configs/architect/CLAUDE.md +99 -38
  18. package/assets/worker-configs/clarifier/.claude/skills/conductor-orchestration.md +635 -0
  19. package/assets/worker-configs/clarifier/.claude/skills/spec-kit-workflow.md +827 -0
  20. package/assets/worker-configs/clarifier/CLAUDE.md +81 -40
  21. package/assets/worker-configs/code-reviewer/.claude/skills/nextjs-turbo-stack.md +1017 -0
  22. package/assets/worker-configs/code-reviewer/.claude/skills/spec-kit-workflow.md +827 -0
  23. package/assets/worker-configs/code-reviewer/.claude/skills/test-first-methodology.md +745 -0
  24. package/assets/worker-configs/code-reviewer/CLAUDE.md +85 -79
  25. package/assets/worker-configs/consolidator/.claude/skills/conductor-orchestration.md +635 -0
  26. package/assets/worker-configs/consolidator/.claude/skills/spec-kit-workflow.md +827 -0
  27. package/assets/worker-configs/consolidator/CLAUDE.md +94 -88
  28. package/assets/worker-configs/developer-backend/.claude/skills/nextjs-turbo-stack.md +1017 -0
  29. package/assets/worker-configs/developer-backend/.claude/skills/spec-kit-workflow.md +827 -0
  30. package/assets/worker-configs/developer-backend/.claude/skills/test-first-methodology.md +745 -0
  31. package/assets/worker-configs/developer-backend/CLAUDE.md +156 -56
  32. package/assets/worker-configs/developer-frontend/.claude/skills/nextjs-turbo-stack.md +1017 -0
  33. package/assets/worker-configs/developer-frontend/.claude/skills/spec-kit-workflow.md +827 -0
  34. package/assets/worker-configs/developer-frontend/.claude/skills/test-first-methodology.md +745 -0
  35. package/assets/worker-configs/developer-frontend/CLAUDE.md +152 -54
  36. package/assets/worker-configs/developer-fullstack/.claude/skills/nextjs-turbo-stack.md +1017 -0
  37. package/assets/worker-configs/developer-fullstack/.claude/skills/spec-kit-workflow.md +827 -0
  38. package/assets/worker-configs/developer-fullstack/.claude/skills/test-first-methodology.md +745 -0
  39. package/assets/worker-configs/developer-fullstack/CLAUDE.md +155 -57
  40. package/assets/worker-configs/devops-engineer/.claude/skills/infrastructure-as-code.md +794 -0
  41. package/assets/worker-configs/devops-engineer/.claude/skills/spec-kit-workflow.md +827 -0
  42. package/assets/worker-configs/devops-engineer/CLAUDE.md +92 -85
  43. package/assets/worker-configs/planner/.claude/skills/conductor-orchestration.md +635 -0
  44. package/assets/worker-configs/planner/.claude/skills/spec-kit-workflow.md +827 -0
  45. package/assets/worker-configs/planner/CLAUDE.md +143 -46
  46. package/assets/worker-configs/product-owner/CLAUDE.md +72 -82
  47. package/assets/worker-configs/reviewer/.claude/skills/conductor-orchestration.md +635 -0
  48. package/assets/worker-configs/reviewer/.claude/skills/spec-kit-workflow.md +827 -0
  49. package/assets/worker-configs/reviewer/CLAUDE.md +108 -50
  50. package/assets/worker-configs/security-engineer/.claude/skills/spec-kit-workflow.md +827 -0
  51. package/assets/worker-configs/security-engineer/CLAUDE.md +83 -83
  52. package/assets/worker-configs/spec-writer/.claude/skills/conductor-orchestration.md +635 -0
  53. package/assets/worker-configs/spec-writer/.claude/skills/spec-kit-workflow.md +827 -0
  54. package/assets/worker-configs/spec-writer/CLAUDE.md +107 -48
  55. package/assets/worker-configs/technical-writer/.claude/skills/nextjs-turbo-stack.md +1017 -0
  56. package/assets/worker-configs/technical-writer/.claude/skills/spec-kit-workflow.md +827 -0
  57. package/assets/worker-configs/technical-writer/CLAUDE.md +91 -81
  58. package/assets/worker-configs/tester/.claude/skills/nextjs-turbo-stack.md +1017 -0
  59. package/assets/worker-configs/tester/.claude/skills/spec-kit-workflow.md +827 -0
  60. package/assets/worker-configs/tester/.claude/skills/test-first-methodology.md +745 -0
  61. package/assets/worker-configs/tester/CLAUDE.md +141 -52
  62. package/dist/assets/claude-md/docs/conductor.md +139 -0
  63. package/dist/assets/claude-md/docs/initialization.md +2 -2
  64. package/dist/assets/claude-md/docs/workers.md +33 -54
  65. package/dist/assets/claude-md/docs/workflow.md +23 -59
  66. package/dist/assets/claude-md/template.md +198 -756
  67. package/dist/assets/git-hooks/commit-msg.sh +4 -8
  68. package/dist/assets/git-hooks/pre-commit.sh +0 -4
  69. package/dist/assets/git-hooks/pre-push.sh +21 -0
  70. package/dist/assets/github-workflows/CODEOWNERS +21 -2
  71. package/dist/assets/github-workflows/boss-ci.yml +163 -23
  72. package/dist/assets/github-workflows/boss-gates.yml +100 -13
  73. package/dist/assets/template-docs/nextjs-app-turbo.md +412 -61
  74. package/dist/assets/template-loader/gitignore +14 -0
  75. package/dist/assets/worker-configs/architect/.claude/skills/conductor-orchestration.md +635 -0
  76. package/dist/assets/worker-configs/architect/.claude/skills/spec-kit-workflow.md +827 -0
  77. package/dist/assets/worker-configs/architect/CLAUDE.md +99 -38
  78. package/dist/assets/worker-configs/clarifier/.claude/skills/conductor-orchestration.md +635 -0
  79. package/dist/assets/worker-configs/clarifier/.claude/skills/spec-kit-workflow.md +827 -0
  80. package/dist/assets/worker-configs/clarifier/CLAUDE.md +81 -40
  81. package/dist/assets/worker-configs/code-reviewer/.claude/skills/nextjs-turbo-stack.md +1017 -0
  82. package/dist/assets/worker-configs/code-reviewer/.claude/skills/spec-kit-workflow.md +827 -0
  83. package/dist/assets/worker-configs/code-reviewer/.claude/skills/test-first-methodology.md +745 -0
  84. package/dist/assets/worker-configs/code-reviewer/CLAUDE.md +85 -79
  85. package/dist/assets/worker-configs/consolidator/.claude/skills/conductor-orchestration.md +635 -0
  86. package/dist/assets/worker-configs/consolidator/.claude/skills/spec-kit-workflow.md +827 -0
  87. package/dist/assets/worker-configs/consolidator/CLAUDE.md +94 -88
  88. package/dist/assets/worker-configs/developer-backend/.claude/skills/nextjs-turbo-stack.md +1017 -0
  89. package/dist/assets/worker-configs/developer-backend/.claude/skills/spec-kit-workflow.md +827 -0
  90. package/dist/assets/worker-configs/developer-backend/.claude/skills/test-first-methodology.md +745 -0
  91. package/dist/assets/worker-configs/developer-backend/CLAUDE.md +156 -56
  92. package/dist/assets/worker-configs/developer-frontend/.claude/skills/nextjs-turbo-stack.md +1017 -0
  93. package/dist/assets/worker-configs/developer-frontend/.claude/skills/spec-kit-workflow.md +827 -0
  94. package/dist/assets/worker-configs/developer-frontend/.claude/skills/test-first-methodology.md +745 -0
  95. package/dist/assets/worker-configs/developer-frontend/CLAUDE.md +152 -54
  96. package/dist/assets/worker-configs/developer-fullstack/.claude/skills/nextjs-turbo-stack.md +1017 -0
  97. package/dist/assets/worker-configs/developer-fullstack/.claude/skills/spec-kit-workflow.md +827 -0
  98. package/dist/assets/worker-configs/developer-fullstack/.claude/skills/test-first-methodology.md +745 -0
  99. package/dist/assets/worker-configs/developer-fullstack/CLAUDE.md +155 -57
  100. package/dist/assets/worker-configs/devops-engineer/.claude/skills/infrastructure-as-code.md +794 -0
  101. package/dist/assets/worker-configs/devops-engineer/.claude/skills/spec-kit-workflow.md +827 -0
  102. package/dist/assets/worker-configs/devops-engineer/CLAUDE.md +92 -85
  103. package/dist/assets/worker-configs/planner/.claude/skills/conductor-orchestration.md +635 -0
  104. package/dist/assets/worker-configs/planner/.claude/skills/spec-kit-workflow.md +827 -0
  105. package/dist/assets/worker-configs/planner/CLAUDE.md +143 -46
  106. package/dist/assets/worker-configs/product-owner/CLAUDE.md +72 -82
  107. package/dist/assets/worker-configs/reviewer/.claude/skills/conductor-orchestration.md +635 -0
  108. package/dist/assets/worker-configs/reviewer/.claude/skills/spec-kit-workflow.md +827 -0
  109. package/dist/assets/worker-configs/reviewer/CLAUDE.md +108 -50
  110. package/dist/assets/worker-configs/security-engineer/.claude/skills/spec-kit-workflow.md +827 -0
  111. package/dist/assets/worker-configs/security-engineer/CLAUDE.md +83 -83
  112. package/dist/assets/worker-configs/spec-writer/.claude/skills/conductor-orchestration.md +635 -0
  113. package/dist/assets/worker-configs/spec-writer/.claude/skills/spec-kit-workflow.md +827 -0
  114. package/dist/assets/worker-configs/spec-writer/CLAUDE.md +107 -48
  115. package/dist/assets/worker-configs/technical-writer/.claude/skills/nextjs-turbo-stack.md +1017 -0
  116. package/dist/assets/worker-configs/technical-writer/.claude/skills/spec-kit-workflow.md +827 -0
  117. package/dist/assets/worker-configs/technical-writer/CLAUDE.md +91 -81
  118. package/dist/assets/worker-configs/tester/.claude/skills/nextjs-turbo-stack.md +1017 -0
  119. package/dist/assets/worker-configs/tester/.claude/skills/spec-kit-workflow.md +827 -0
  120. package/dist/assets/worker-configs/tester/.claude/skills/test-first-methodology.md +745 -0
  121. package/dist/assets/worker-configs/tester/CLAUDE.md +141 -52
  122. package/dist/commands/__tests__/bootstrap.test.js +51 -51
  123. package/dist/commands/__tests__/bootstrap.test.js.map +1 -1
  124. package/dist/commands/bootstrap.d.ts.map +1 -1
  125. package/dist/commands/bootstrap.js +23 -20
  126. package/dist/commands/bootstrap.js.map +1 -1
  127. package/dist/commands/doctor.js +33 -9
  128. package/dist/commands/doctor.js.map +1 -1
  129. package/dist/commands/templates.d.ts +1 -1
  130. package/dist/commands/templates.d.ts.map +1 -1
  131. package/dist/commands/templates.js +1 -1
  132. package/dist/commands/templates.js.map +1 -1
  133. package/dist/constants.d.ts +2 -2
  134. package/dist/constants.d.ts.map +1 -1
  135. package/dist/constants.js +1 -1
  136. package/dist/constants.js.map +1 -1
  137. package/dist/generators/__tests__/boss-config.test.js +4 -4
  138. package/dist/generators/__tests__/boss-config.test.js.map +1 -1
  139. package/dist/generators/__tests__/claude-folder.test.js +8 -8
  140. package/dist/generators/__tests__/claude-folder.test.js.map +1 -1
  141. package/dist/generators/__tests__/claude-md.test.js +25 -16
  142. package/dist/generators/__tests__/claude-md.test.js.map +1 -1
  143. package/dist/generators/__tests__/container-use-config.test.js +2 -2
  144. package/dist/generators/__tests__/container-use-config.test.js.map +1 -1
  145. package/dist/generators/__tests__/git-hooks.test.js.map +1 -1
  146. package/dist/generators/__tests__/github-workflows.test.js +10 -6
  147. package/dist/generators/__tests__/github-workflows.test.js.map +1 -1
  148. package/dist/generators/__tests__/mcp-config.test.js +6 -6
  149. package/dist/generators/__tests__/project-structure.test.js +2 -2
  150. package/dist/generators/__tests__/quality-gates.test.js +11 -3
  151. package/dist/generators/__tests__/quality-gates.test.js.map +1 -1
  152. package/dist/generators/__tests__/specify-structure.test.js +1 -1
  153. package/dist/generators/__tests__/specify-structure.test.js.map +1 -1
  154. package/dist/generators/__tests__/template-docs.test.js +1 -1
  155. package/dist/generators/__tests__/template-docs.test.js.map +1 -1
  156. package/dist/generators/__tests__/template-loader.test.js +209 -59
  157. package/dist/generators/__tests__/template-loader.test.js.map +1 -1
  158. package/dist/generators/__tests__/worker-configs.test.js +7 -7
  159. package/dist/generators/boss-config.d.ts.map +1 -1
  160. package/dist/generators/boss-config.js +46 -51
  161. package/dist/generators/boss-config.js.map +1 -1
  162. package/dist/generators/claude-folder.d.ts +1 -1
  163. package/dist/generators/claude-folder.d.ts.map +1 -1
  164. package/dist/generators/claude-folder.js +5 -5
  165. package/dist/generators/claude-folder.js.map +1 -1
  166. package/dist/generators/claude-md.d.ts.map +1 -1
  167. package/dist/generators/claude-md.js +83 -42
  168. package/dist/generators/claude-md.js.map +1 -1
  169. package/dist/generators/container-use-config.d.ts.map +1 -1
  170. package/dist/generators/container-use-config.js +5 -7
  171. package/dist/generators/container-use-config.js.map +1 -1
  172. package/dist/generators/docker-compose.d.ts.map +1 -1
  173. package/dist/generators/docker-compose.js.map +1 -1
  174. package/dist/generators/git-hooks.d.ts.map +1 -1
  175. package/dist/generators/git-hooks.js +2 -2
  176. package/dist/generators/git-hooks.js.map +1 -1
  177. package/dist/generators/github-workflows.js +3 -3
  178. package/dist/generators/github-workflows.js.map +1 -1
  179. package/dist/generators/mcp-config.d.ts.map +1 -1
  180. package/dist/generators/mcp-config.js +18 -16
  181. package/dist/generators/mcp-config.js.map +1 -1
  182. package/dist/generators/project-structure.d.ts +1 -1
  183. package/dist/generators/project-structure.d.ts.map +1 -1
  184. package/dist/generators/project-structure.js +2 -2
  185. package/dist/generators/project-structure.js.map +1 -1
  186. package/dist/generators/quality-gates.d.ts.map +1 -1
  187. package/dist/generators/quality-gates.js +13 -5
  188. package/dist/generators/quality-gates.js.map +1 -1
  189. package/dist/generators/specify-structure.d.ts.map +1 -1
  190. package/dist/generators/specify-structure.js +1 -2
  191. package/dist/generators/specify-structure.js.map +1 -1
  192. package/dist/generators/template-docs.js +2 -2
  193. package/dist/generators/template-docs.js.map +1 -1
  194. package/dist/generators/template-loader.d.ts.map +1 -1
  195. package/dist/generators/template-loader.js +259 -143
  196. package/dist/generators/template-loader.js.map +1 -1
  197. package/dist/generators/worker-configs.d.ts.map +1 -1
  198. package/dist/generators/worker-configs.js +7 -5
  199. package/dist/generators/worker-configs.js.map +1 -1
  200. package/dist/index.js +2 -2
  201. package/dist/index.js.map +1 -1
  202. package/dist/presets/__tests__/quality-presets.test.js +9 -5
  203. package/dist/presets/__tests__/quality-presets.test.js.map +1 -1
  204. package/dist/presets/quality-presets.d.ts.map +1 -1
  205. package/dist/presets/quality-presets.js +11 -11
  206. package/dist/presets/quality-presets.js.map +1 -1
  207. package/dist/types/index.d.ts +1 -0
  208. package/dist/types/index.d.ts.map +1 -1
  209. package/dist/types/index.js +2 -1
  210. package/dist/types/index.js.map +1 -1
  211. package/dist/types/internal.d.ts +69 -0
  212. package/dist/types/internal.d.ts.map +1 -0
  213. package/dist/types/internal.js +4 -0
  214. package/dist/types/internal.js.map +1 -0
  215. package/dist/utils/__tests__/file-system.test.js +1 -1
  216. package/dist/utils/__tests__/file-system.test.js.map +1 -1
  217. package/dist/utils/__tests__/git.test.js.map +1 -1
  218. package/dist/utils/__tests__/template-loader.test.js.map +1 -1
  219. package/dist/utils/__tests__/validators.test.js +1 -1
  220. package/dist/utils/__tests__/validators.test.js.map +1 -1
  221. package/dist/utils/file-system.d.ts.map +1 -1
  222. package/dist/utils/file-system.js +1 -4
  223. package/dist/utils/file-system.js.map +1 -1
  224. package/dist/utils/git.d.ts.map +1 -1
  225. package/dist/utils/git.js +17 -11
  226. package/dist/utils/git.js.map +1 -1
  227. package/dist/utils/prompts.d.ts.map +1 -1
  228. package/dist/utils/prompts.js +51 -39
  229. package/dist/utils/prompts.js.map +1 -1
  230. package/dist/utils/template-loader.d.ts +2 -1
  231. package/dist/utils/template-loader.d.ts.map +1 -1
  232. package/dist/utils/template-loader.js +11 -5
  233. package/dist/utils/template-loader.js.map +1 -1
  234. package/dist/utils/validators.d.ts.map +1 -1
  235. package/dist/utils/validators.js +16 -4
  236. package/dist/utils/validators.js.map +1 -1
  237. package/package.json +2 -2
  238. package/templates/nextjs-turbo-monorepo/base/README.md +167 -0
  239. package/templates/nextjs-turbo-monorepo/base/_gitignore +71 -0
  240. package/templates/nextjs-turbo-monorepo/base/_npmrc +12 -0
  241. package/templates/nextjs-turbo-monorepo/base/apps/admin/app/layout.tsx +19 -0
  242. package/templates/nextjs-turbo-monorepo/base/apps/admin/app/page.tsx +34 -0
  243. package/templates/nextjs-turbo-monorepo/base/apps/admin/next.config.ts +20 -0
  244. package/templates/nextjs-turbo-monorepo/base/apps/admin/package.json +42 -0
  245. package/templates/nextjs-turbo-monorepo/base/apps/admin/tsconfig.json +16 -0
  246. package/templates/nextjs-turbo-monorepo/base/apps/web/app/globals.css +59 -0
  247. package/templates/nextjs-turbo-monorepo/base/apps/web/app/layout.tsx +20 -0
  248. package/templates/nextjs-turbo-monorepo/base/apps/web/app/page.tsx +17 -0
  249. package/templates/nextjs-turbo-monorepo/base/apps/web/components.json +18 -0
  250. package/templates/nextjs-turbo-monorepo/base/apps/web/env.ts +45 -0
  251. package/templates/nextjs-turbo-monorepo/base/apps/web/next.config.ts +38 -0
  252. package/templates/nextjs-turbo-monorepo/base/apps/web/package.json +45 -0
  253. package/templates/nextjs-turbo-monorepo/base/apps/web/tsconfig.json +19 -0
  254. package/templates/nextjs-turbo-monorepo/base/apps/web/vitest.config.ts +28 -0
  255. package/templates/nextjs-turbo-monorepo/base/docker/Dockerfile.admin +76 -0
  256. package/templates/nextjs-turbo-monorepo/base/docker/Dockerfile.web +76 -0
  257. package/templates/nextjs-turbo-monorepo/base/docker/_dockerignore +48 -0
  258. package/templates/nextjs-turbo-monorepo/base/docker/docker-compose.yml +39 -0
  259. package/templates/nextjs-turbo-monorepo/base/package.json +62 -0
  260. package/templates/nextjs-turbo-monorepo/base/packages/auth/package.json +26 -0
  261. package/templates/nextjs-turbo-monorepo/base/packages/auth/src/config.ts +88 -0
  262. package/templates/nextjs-turbo-monorepo/base/packages/auth/src/index.ts +11 -0
  263. package/templates/nextjs-turbo-monorepo/base/packages/auth/src/types.ts +28 -0
  264. package/templates/nextjs-turbo-monorepo/base/packages/auth/tsconfig.json +9 -0
  265. package/templates/nextjs-turbo-monorepo/base/packages/config/eslint/library.js +35 -0
  266. package/templates/nextjs-turbo-monorepo/base/packages/config/eslint/nextjs.js +51 -0
  267. package/templates/nextjs-turbo-monorepo/base/packages/config/eslint/react-library.js +45 -0
  268. package/templates/nextjs-turbo-monorepo/base/packages/config/package.json +19 -0
  269. package/templates/nextjs-turbo-monorepo/base/packages/config/tailwind/base.ts +50 -0
  270. package/templates/nextjs-turbo-monorepo/base/packages/config/typescript/base.json +23 -0
  271. package/templates/nextjs-turbo-monorepo/base/packages/config/typescript/nextjs.json +17 -0
  272. package/templates/nextjs-turbo-monorepo/base/packages/config/typescript/react-library.json +11 -0
  273. package/templates/nextjs-turbo-monorepo/base/packages/database/package.json +32 -0
  274. package/templates/nextjs-turbo-monorepo/base/packages/database/prisma/schema.prisma +84 -0
  275. package/templates/nextjs-turbo-monorepo/base/packages/database/src/client.ts +16 -0
  276. package/templates/nextjs-turbo-monorepo/base/packages/database/src/index.ts +2 -0
  277. package/templates/nextjs-turbo-monorepo/base/packages/database/tsconfig.json +9 -0
  278. package/templates/nextjs-turbo-monorepo/base/packages/trpc/package.json +32 -0
  279. package/templates/nextjs-turbo-monorepo/base/packages/trpc/src/context.ts +17 -0
  280. package/templates/nextjs-turbo-monorepo/base/packages/trpc/src/index.ts +3 -0
  281. package/templates/nextjs-turbo-monorepo/base/packages/trpc/src/init.ts +34 -0
  282. package/templates/nextjs-turbo-monorepo/base/packages/trpc/src/routers/_app.ts +8 -0
  283. package/templates/nextjs-turbo-monorepo/base/packages/trpc/src/routers/user.ts +36 -0
  284. package/templates/nextjs-turbo-monorepo/base/packages/trpc/tsconfig.json +9 -0
  285. package/templates/nextjs-turbo-monorepo/base/packages/ui/.storybook/main.ts +19 -0
  286. package/templates/nextjs-turbo-monorepo/base/packages/ui/.storybook/preview.ts +15 -0
  287. package/templates/nextjs-turbo-monorepo/base/packages/ui/components.json +17 -0
  288. package/templates/nextjs-turbo-monorepo/base/packages/ui/package.json +62 -0
  289. package/templates/nextjs-turbo-monorepo/base/packages/ui/postcss.config.js +6 -0
  290. package/templates/nextjs-turbo-monorepo/base/packages/ui/src/components/index.ts +2 -0
  291. package/templates/nextjs-turbo-monorepo/base/packages/ui/src/components/ui/button.tsx +57 -0
  292. package/templates/nextjs-turbo-monorepo/base/packages/ui/src/components/ui/card.tsx +76 -0
  293. package/templates/nextjs-turbo-monorepo/base/packages/ui/src/hooks/index.ts +2 -0
  294. package/templates/nextjs-turbo-monorepo/base/packages/ui/src/lib/utils.ts +6 -0
  295. package/templates/nextjs-turbo-monorepo/base/packages/ui/src/styles/globals.css +59 -0
  296. package/templates/nextjs-turbo-monorepo/base/packages/ui/tailwind.config.ts +15 -0
  297. package/templates/nextjs-turbo-monorepo/base/packages/ui/tsconfig.json +12 -0
  298. package/templates/nextjs-turbo-monorepo/base/packages/ui/vitest.config.ts +28 -0
  299. package/templates/nextjs-turbo-monorepo/base/packages/utils/package.json +24 -0
  300. package/templates/nextjs-turbo-monorepo/base/packages/utils/src/date.ts +117 -0
  301. package/templates/nextjs-turbo-monorepo/base/packages/utils/src/index.ts +2 -0
  302. package/templates/nextjs-turbo-monorepo/base/packages/utils/src/string.ts +59 -0
  303. package/templates/nextjs-turbo-monorepo/base/packages/utils/tsconfig.json +9 -0
  304. package/templates/nextjs-turbo-monorepo/base/packages/utils/vitest.config.ts +13 -0
  305. package/templates/nextjs-turbo-monorepo/base/pnpm-workspace.yaml +3 -0
  306. package/templates/nextjs-turbo-monorepo/base/tsconfig.json +19 -0
  307. package/templates/nextjs-turbo-monorepo/base/turbo.json +47 -0
  308. package/templates/nextjs-turbo-monorepo/extras/boss-cli/assets/claude-md/template.md +0 -0
  309. package/templates/nextjs-turbo-monorepo/extras/boss-cli/assets/github-workflows/CODEOWNERS +0 -0
  310. package/templates/nextjs-turbo-monorepo/extras/boss-cli/assets/github-workflows/boss-ci.yml +139 -0
  311. package/templates/nextjs-turbo-monorepo/extras/boss-cli/assets/github-workflows/boss-gates.yml +116 -0
  312. package/templates/nextjs-turbo-monorepo/extras/config/kamal/_env +18 -0
  313. package/templates/nextjs-turbo-monorepo/extras/config/kamal/deploy.yml +92 -0
  314. package/templates/nextjs-turbo-monorepo/extras/scripts/deploy.sh +38 -0
  315. package/templates/nextjs-turbo-monorepo/extras/scripts/setup-db.sh +29 -0
  316. package/assets/claude-md/docs/container-use.md +0 -140
  317. package/dist/assets/claude-md/docs/container-use.md +0 -140
@@ -0,0 +1,794 @@
1
+ # Infrastructure as Code
2
+
3
+ ## Description
4
+
5
+ Create, modify, and manage infrastructure using code-based tools like Terraform, Docker, and CI/CD pipelines. Use when setting up deployments, configuring environments, automating builds, or managing infrastructure for BOSS projects.
6
+
7
+ ## Overview
8
+
9
+ DevOps engineers in BOSS manage infrastructure as code, ensuring reproducible, version-controlled, and automated deployments. All infrastructure changes must be code-based, reviewed, and tested.
10
+
11
+ **Core Tools**:
12
+ - **Terraform/OpenTofu** - Infrastructure provisioning and management
13
+ - **Docker** - Containerization and deployment
14
+ - **GitHub Actions** - CI/CD automation
15
+ - **Monitoring** - Observability and alerting
16
+
17
+ ## Terraform/OpenTofu
18
+
19
+ ### Project Structure
20
+
21
+ ```
22
+ terraform/
23
+ ├── environments/
24
+ │ ├── dev/
25
+ │ │ ├── main.tf
26
+ │ │ ├── variables.tf
27
+ │ │ ├── outputs.tf
28
+ │ │ └── terraform.tfvars
29
+ │ ├── staging/
30
+ │ └── production/
31
+ ├── modules/
32
+ │ ├── networking/
33
+ │ │ ├── main.tf
34
+ │ │ ├── variables.tf
35
+ │ │ └── outputs.tf
36
+ │ ├── database/
37
+ │ ├── compute/
38
+ │ └── monitoring/
39
+ ├── backend.tf # Remote state configuration
40
+ └── versions.tf # Provider versions
41
+ ```
42
+
43
+ ### Basic Configuration
44
+
45
+ ```hcl
46
+ # terraform/environments/production/main.tf
47
+ terraform {
48
+ required_version = ">= 1.6"
49
+
50
+ backend "s3" {
51
+ bucket = "my-terraform-state"
52
+ key = "production/terraform.tfstate"
53
+ region = "us-east-1"
54
+ }
55
+
56
+ required_providers {
57
+ aws = {
58
+ source = "hashicorp/aws"
59
+ version = "~> 5.0"
60
+ }
61
+ }
62
+ }
63
+
64
+ provider "aws" {
65
+ region = var.aws_region
66
+ }
67
+
68
+ # Use modules
69
+ module "networking" {
70
+ source = "../../modules/networking"
71
+
72
+ vpc_cidr = var.vpc_cidr
73
+ environment = "production"
74
+ }
75
+
76
+ module "database" {
77
+ source = "../../modules/database"
78
+
79
+ vpc_id = module.networking.vpc_id
80
+ subnet_ids = module.networking.private_subnet_ids
81
+ instance_class = "db.t3.medium"
82
+ }
83
+ ```
84
+
85
+ ### Common Resources
86
+
87
+ **VPC and Networking**:
88
+ ```hcl
89
+ # modules/networking/main.tf
90
+ resource "aws_vpc" "main" {
91
+ cidr_block = var.vpc_cidr
92
+ enable_dns_hostnames = true
93
+ enable_dns_support = true
94
+
95
+ tags = {
96
+ Name = "${var.environment}-vpc"
97
+ Environment = var.environment
98
+ }
99
+ }
100
+
101
+ resource "aws_subnet" "private" {
102
+ count = length(var.availability_zones)
103
+ vpc_id = aws_vpc.main.id
104
+ cidr_block = cidrsubnet(var.vpc_cidr, 8, count.index)
105
+ availability_zone = var.availability_zones[count.index]
106
+
107
+ tags = {
108
+ Name = "${var.environment}-private-${count.index}"
109
+ }
110
+ }
111
+ ```
112
+
113
+ **RDS Database**:
114
+ ```hcl
115
+ # modules/database/main.tf
116
+ resource "aws_db_instance" "postgres" {
117
+ identifier = "${var.environment}-postgres"
118
+ engine = "postgres"
119
+ engine_version = "15.4"
120
+ instance_class = var.instance_class
121
+
122
+ allocated_storage = var.allocated_storage
123
+ storage_encrypted = true
124
+
125
+ db_name = var.database_name
126
+ username = var.database_username
127
+ password = var.database_password
128
+
129
+ vpc_security_group_ids = [aws_security_group.database.id]
130
+ db_subnet_group_name = aws_db_subnet_group.main.name
131
+
132
+ backup_retention_period = 7
133
+ skip_final_snapshot = false
134
+ final_snapshot_identifier = "${var.environment}-postgres-final-snapshot"
135
+
136
+ tags = {
137
+ Environment = var.environment
138
+ }
139
+ }
140
+ ```
141
+
142
+ ### Terraform Workflow
143
+
144
+ ```bash
145
+ # Initialize
146
+ terraform init
147
+
148
+ # Format code
149
+ terraform fmt -recursive
150
+
151
+ # Validate
152
+ terraform validate
153
+
154
+ # Plan changes
155
+ terraform plan -out=plan.tfplan
156
+
157
+ # Apply changes
158
+ terraform apply plan.tfplan
159
+
160
+ # Destroy (careful!)
161
+ terraform destroy
162
+ ```
163
+
164
+ ### Best Practices
165
+
166
+ ```hcl
167
+ # ✅ Good - use modules for reusability
168
+ module "app_server" {
169
+ source = "../../modules/compute"
170
+
171
+ instance_type = var.instance_type
172
+ vpc_id = module.networking.vpc_id
173
+ }
174
+
175
+ # ✅ Good - use variables
176
+ variable "instance_type" {
177
+ description = "EC2 instance type"
178
+ type = string
179
+ default = "t3.micro"
180
+ }
181
+
182
+ # ✅ Good - remote state
183
+ terraform {
184
+ backend "s3" {
185
+ # State stored remotely, supports locking
186
+ }
187
+ }
188
+
189
+ # ❌ Bad - hardcoded values
190
+ resource "aws_instance" "web" {
191
+ ami = "ami-12345678" # Hardcoded!
192
+ instance_type = "t3.micro" # Hardcoded!
193
+ }
194
+ ```
195
+
196
+ ## Docker
197
+
198
+ ### Dockerfile Best Practices
199
+
200
+ ```dockerfile
201
+ # Multi-stage build for Next.js
202
+ FROM node:20-alpine AS base
203
+
204
+ # Dependencies stage
205
+ FROM base AS deps
206
+ RUN apk add --no-cache libc6-compat
207
+ WORKDIR /app
208
+
209
+ COPY package.json pnpm-lock.yaml ./
210
+ RUN corepack enable pnpm && pnpm install --frozen-lockfile
211
+
212
+ # Builder stage
213
+ FROM base AS builder
214
+ WORKDIR /app
215
+ COPY --from=deps /app/node_modules ./node_modules
216
+ COPY . .
217
+
218
+ RUN pnpm build
219
+
220
+ # Runner stage
221
+ FROM base AS runner
222
+ WORKDIR /app
223
+
224
+ ENV NODE_ENV production
225
+
226
+ RUN addgroup --system --gid 1001 nodejs
227
+ RUN adduser --system --uid 1001 nextjs
228
+
229
+ COPY --from=builder /app/public ./public
230
+ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
231
+ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
232
+
233
+ USER nextjs
234
+
235
+ EXPOSE 3000
236
+
237
+ ENV PORT 3000
238
+ ENV HOSTNAME "0.0.0.0"
239
+
240
+ CMD ["node", "server.js"]
241
+ ```
242
+
243
+ ### Docker Compose
244
+
245
+ ```yaml
246
+ # docker-compose.yml
247
+ version: '3.8'
248
+
249
+ services:
250
+ postgres:
251
+ image: postgres:15-alpine
252
+ environment:
253
+ POSTGRES_DB: ${DATABASE_NAME}
254
+ POSTGRES_USER: ${DATABASE_USER}
255
+ POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
256
+ volumes:
257
+ - postgres_data:/var/lib/postgresql/data
258
+ ports:
259
+ - "5432:5432"
260
+ healthcheck:
261
+ test: ["CMD-SHELL", "pg_isready -U ${DATABASE_USER}"]
262
+ interval: 10s
263
+ timeout: 5s
264
+ retries: 5
265
+
266
+ redis:
267
+ image: redis:7-alpine
268
+ ports:
269
+ - "6379:6379"
270
+ volumes:
271
+ - redis_data:/data
272
+
273
+ app:
274
+ build:
275
+ context: .
276
+ dockerfile: Dockerfile
277
+ ports:
278
+ - "3000:3000"
279
+ environment:
280
+ DATABASE_URL: postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@postgres:5432/${DATABASE_NAME}
281
+ REDIS_URL: redis://redis:6379
282
+ depends_on:
283
+ postgres:
284
+ condition: service_healthy
285
+ redis:
286
+ condition: service_started
287
+ volumes:
288
+ - ./src:/app/src:ro
289
+
290
+ volumes:
291
+ postgres_data:
292
+ redis_data:
293
+ ```
294
+
295
+ ### Docker Best Practices
296
+
297
+ ```dockerfile
298
+ # ✅ Good - specific base image version
299
+ FROM node:20.10.0-alpine
300
+
301
+ # ✅ Good - minimize layers
302
+ RUN apk add --no-cache \
303
+ git \
304
+ openssh \
305
+ build-base
306
+
307
+ # ✅ Good - .dockerignore
308
+ # .dockerignore file:
309
+ node_modules
310
+ .git
311
+ .env
312
+ dist
313
+ *.log
314
+
315
+ # ✅ Good - non-root user
316
+ RUN addgroup -g 1001 -S nodejs && \
317
+ adduser -S nextjs -u 1001
318
+ USER nextjs
319
+
320
+ # ❌ Bad - using 'latest' tag
321
+ FROM node:latest
322
+
323
+ # ❌ Bad - running as root
324
+ # (no USER directive - runs as root)
325
+ ```
326
+
327
+ ## GitHub Actions CI/CD
328
+
329
+ ### Workflow Structure
330
+
331
+ ```yaml
332
+ # .github/workflows/ci.yml
333
+ name: CI
334
+
335
+ on:
336
+ push:
337
+ branches: [main, develop]
338
+ pull_request:
339
+ branches: [main]
340
+
341
+ env:
342
+ NODE_VERSION: '20'
343
+ PNPM_VERSION: '9'
344
+
345
+ jobs:
346
+ lint:
347
+ runs-on: ubuntu-latest
348
+ steps:
349
+ - uses: actions/checkout@v4
350
+
351
+ - uses: pnpm/action-setup@v2
352
+ with:
353
+ version: ${{ env.PNPM_VERSION }}
354
+
355
+ - uses: actions/setup-node@v4
356
+ with:
357
+ node-version: ${{ env.NODE_VERSION }}
358
+ cache: 'pnpm'
359
+
360
+ - name: Install dependencies
361
+ run: pnpm install --frozen-lockfile
362
+
363
+ - name: Lint
364
+ run: pnpm lint
365
+
366
+ test:
367
+ runs-on: ubuntu-latest
368
+ services:
369
+ postgres:
370
+ image: postgres:15
371
+ env:
372
+ POSTGRES_PASSWORD: postgres
373
+ options: >-
374
+ --health-cmd pg_isready
375
+ --health-interval 10s
376
+ --health-timeout 5s
377
+ --health-retries 5
378
+ ports:
379
+ - 5432:5432
380
+
381
+ steps:
382
+ - uses: actions/checkout@v4
383
+
384
+ - uses: pnpm/action-setup@v2
385
+ with:
386
+ version: ${{ env.PNPM_VERSION }}
387
+
388
+ - uses: actions/setup-node@v4
389
+ with:
390
+ node-version: ${{ env.NODE_VERSION }}
391
+ cache: 'pnpm'
392
+
393
+ - name: Install dependencies
394
+ run: pnpm install --frozen-lockfile
395
+
396
+ - name: Run tests
397
+ run: pnpm test:coverage
398
+ env:
399
+ DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test
400
+
401
+ - name: Upload coverage
402
+ uses: codecov/codecov-action@v3
403
+ with:
404
+ files: ./coverage/coverage-final.json
405
+
406
+ build:
407
+ runs-on: ubuntu-latest
408
+ needs: [lint, test]
409
+ steps:
410
+ - uses: actions/checkout@v4
411
+
412
+ - uses: pnpm/action-setup@v2
413
+ with:
414
+ version: ${{ env.PNPM_VERSION }}
415
+
416
+ - uses: actions/setup-node@v4
417
+ with:
418
+ node-version: ${{ env.NODE_VERSION }}
419
+ cache: 'pnpm'
420
+
421
+ - name: Install dependencies
422
+ run: pnpm install --frozen-lockfile
423
+
424
+ - name: Build
425
+ run: pnpm build
426
+
427
+ - name: Upload build artifacts
428
+ uses: actions/upload-artifact@v3
429
+ with:
430
+ name: build
431
+ path: .next/
432
+ ```
433
+
434
+ ### Deployment Workflow
435
+
436
+ ```yaml
437
+ # .github/workflows/deploy.yml
438
+ name: Deploy to Production
439
+
440
+ on:
441
+ push:
442
+ branches: [main]
443
+
444
+ jobs:
445
+ deploy:
446
+ runs-on: ubuntu-latest
447
+ environment: production
448
+ steps:
449
+ - uses: actions/checkout@v4
450
+
451
+ - name: Configure AWS credentials
452
+ uses: aws-actions/configure-aws-credentials@v4
453
+ with:
454
+ aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
455
+ aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
456
+ aws-region: us-east-1
457
+
458
+ - name: Login to Amazon ECR
459
+ id: login-ecr
460
+ uses: aws-actions/amazon-ecr-login@v2
461
+
462
+ - name: Build and push Docker image
463
+ env:
464
+ ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
465
+ ECR_REPOSITORY: my-app
466
+ IMAGE_TAG: ${{ github.sha }}
467
+ run: |
468
+ docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
469
+ docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
470
+
471
+ - name: Deploy to ECS
472
+ run: |
473
+ aws ecs update-service \
474
+ --cluster production-cluster \
475
+ --service my-app-service \
476
+ --force-new-deployment
477
+ ```
478
+
479
+ ### Caching Strategy
480
+
481
+ ```yaml
482
+ # Efficient caching
483
+ - name: Cache node modules
484
+ uses: actions/cache@v3
485
+ with:
486
+ path: |
487
+ ~/.pnpm-store
488
+ **/node_modules
489
+ key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
490
+ restore-keys: |
491
+ ${{ runner.os }}-pnpm-
492
+
493
+ # Turbo cache
494
+ - name: Cache Turbo
495
+ uses: actions/cache@v3
496
+ with:
497
+ path: .turbo
498
+ key: ${{ runner.os }}-turbo-${{ github.sha }}
499
+ restore-keys: |
500
+ ${{ runner.os }}-turbo-
501
+ ```
502
+
503
+ ## Monitoring and Observability
504
+
505
+ ### Application Monitoring
506
+
507
+ ```typescript
508
+ // lib/monitoring.ts
509
+ import * as Sentry from '@sentry/nextjs';
510
+
511
+ export function initMonitoring() {
512
+ Sentry.init({
513
+ dsn: process.env.SENTRY_DSN,
514
+ environment: process.env.NODE_ENV,
515
+ tracesSampleRate: 0.1,
516
+ profilesSampleRate: 0.1,
517
+ });
518
+ }
519
+
520
+ export function trackError(error: Error, context?: Record<string, any>) {
521
+ Sentry.captureException(error, { extra: context });
522
+ }
523
+
524
+ export function trackEvent(name: string, data?: Record<string, any>) {
525
+ Sentry.captureMessage(name, { extra: data });
526
+ }
527
+ ```
528
+
529
+ ### Logging
530
+
531
+ ```typescript
532
+ // lib/logger.ts
533
+ import pino from 'pino';
534
+
535
+ export const logger = pino({
536
+ level: process.env.LOG_LEVEL || 'info',
537
+ formatters: {
538
+ level: (label) => {
539
+ return { level: label };
540
+ },
541
+ },
542
+ ...(process.env.NODE_ENV === 'production'
543
+ ? {}
544
+ : {
545
+ transport: {
546
+ target: 'pino-pretty',
547
+ options: {
548
+ colorize: true,
549
+ },
550
+ },
551
+ }),
552
+ });
553
+
554
+ // Usage
555
+ logger.info({ userId: '123' }, 'User logged in');
556
+ logger.error({ error }, 'Failed to process payment');
557
+ ```
558
+
559
+ ### Metrics and Alerts
560
+
561
+ ```yaml
562
+ # Prometheus metrics
563
+ # prometheus.yml
564
+ global:
565
+ scrape_interval: 15s
566
+
567
+ scrape_configs:
568
+ - job_name: 'nextjs-app'
569
+ static_configs:
570
+ - targets: ['localhost:3000']
571
+ ```
572
+
573
+ ```typescript
574
+ // Metrics endpoint
575
+ import { register } from 'prom-client';
576
+
577
+ export async function GET() {
578
+ const metrics = await register.metrics();
579
+ return new Response(metrics, {
580
+ headers: { 'Content-Type': register.contentType },
581
+ });
582
+ }
583
+ ```
584
+
585
+ ## Security Best Practices
586
+
587
+ ### Secrets Management
588
+
589
+ ```yaml
590
+ # GitHub Actions secrets
591
+ - name: Deploy
592
+ env:
593
+ DATABASE_URL: ${{ secrets.DATABASE_URL }}
594
+ API_KEY: ${{ secrets.API_KEY }}
595
+ run: pnpm deploy
596
+
597
+ # Terraform secrets
598
+ variable "database_password" {
599
+ description = "Database password"
600
+ type = string
601
+ sensitive = true
602
+ }
603
+
604
+ # Never commit:
605
+ # .env
606
+ # *.tfvars
607
+ # secrets.yaml
608
+ ```
609
+
610
+ ### Security Scanning
611
+
612
+ ```yaml
613
+ # .github/workflows/security.yml
614
+ name: Security Scan
615
+
616
+ on:
617
+ schedule:
618
+ - cron: '0 0 * * *' # Daily
619
+ pull_request:
620
+
621
+ jobs:
622
+ scan:
623
+ runs-on: ubuntu-latest
624
+ steps:
625
+ - uses: actions/checkout@v4
626
+
627
+ - name: Run Snyk security scan
628
+ uses: snyk/actions/node@master
629
+ env:
630
+ SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
631
+
632
+ - name: Run Trivy container scan
633
+ uses: aquasecurity/trivy-action@master
634
+ with:
635
+ image-ref: 'my-image:latest'
636
+ format: 'sarif'
637
+ output: 'trivy-results.sarif'
638
+ ```
639
+
640
+ ## Common Infrastructure Patterns
641
+
642
+ ### Blue-Green Deployment
643
+
644
+ ```yaml
645
+ # Two identical environments
646
+ # Route traffic to blue (current production)
647
+ # Deploy to green (new version)
648
+ # Test green
649
+ # Switch traffic to green
650
+ # Keep blue as rollback
651
+
652
+ resource "aws_lb_target_group" "blue" {
653
+ name = "app-blue"
654
+ # ... config
655
+ }
656
+
657
+ resource "aws_lb_target_group" "green" {
658
+ name = "app-green"
659
+ # ... config
660
+ }
661
+
662
+ # Switch between blue and green
663
+ resource "aws_lb_listener_rule" "main" {
664
+ listener_arn = aws_lb_listener.main.arn
665
+
666
+ action {
667
+ type = "forward"
668
+ target_group_arn = var.active_target_group # blue or green
669
+ }
670
+ }
671
+ ```
672
+
673
+ ### Auto-Scaling
674
+
675
+ ```hcl
676
+ # Auto-scaling group
677
+ resource "aws_autoscaling_group" "app" {
678
+ name = "${var.environment}-app-asg"
679
+ vpc_zone_identifier = var.subnet_ids
680
+ target_group_arns = [aws_lb_target_group.app.arn]
681
+
682
+ min_size = var.min_instances
683
+ max_size = var.max_instances
684
+ desired_capacity = var.desired_instances
685
+
686
+ health_check_type = "ELB"
687
+ health_check_grace_period = 300
688
+
689
+ launch_template {
690
+ id = aws_launch_template.app.id
691
+ version = "$Latest"
692
+ }
693
+
694
+ tag {
695
+ key = "Name"
696
+ value = "${var.environment}-app-instance"
697
+ propagate_at_launch = true
698
+ }
699
+ }
700
+
701
+ # Auto-scaling policy
702
+ resource "aws_autoscaling_policy" "cpu_scale_up" {
703
+ name = "${var.environment}-cpu-scale-up"
704
+ scaling_adjustment = 1
705
+ adjustment_type = "ChangeInCapacity"
706
+ cooldown = 300
707
+ autoscaling_group_name = aws_autoscaling_group.app.name
708
+ }
709
+
710
+ resource "aws_cloudwatch_metric_alarm" "cpu_high" {
711
+ alarm_name = "${var.environment}-cpu-high"
712
+ comparison_operator = "GreaterThanThreshold"
713
+ evaluation_periods = 2
714
+ metric_name = "CPUUtilization"
715
+ namespace = "AWS/EC2"
716
+ period = 120
717
+ statistic = "Average"
718
+ threshold = 70
719
+
720
+ alarm_actions = [aws_autoscaling_policy.cpu_scale_up.arn]
721
+ }
722
+ ```
723
+
724
+ ## Anti-Patterns
725
+
726
+ ### ❌ Manual Infrastructure Changes
727
+
728
+ ```bash
729
+ # ❌ Bad - manual changes via console/CLI
730
+ aws ec2 create-instance ...
731
+
732
+ # ✅ Good - infrastructure as code
733
+ terraform apply
734
+ ```
735
+
736
+ ### ❌ Hardcoded Secrets
737
+
738
+ ```hcl
739
+ # ❌ Bad - secrets in code
740
+ resource "aws_db_instance" "main" {
741
+ password = "SuperSecret123" # NO!
742
+ }
743
+
744
+ # ✅ Good - use variables/secrets management
745
+ variable "db_password" {
746
+ sensitive = true
747
+ }
748
+
749
+ resource "aws_db_instance" "main" {
750
+ password = var.db_password
751
+ }
752
+ ```
753
+
754
+ ### ❌ No Rollback Strategy
755
+
756
+ ```yaml
757
+ # ❌ Bad - no rollback plan
758
+ - name: Deploy
759
+ run: deploy-to-production
760
+
761
+ # ✅ Good - versioned deployment with rollback
762
+ - name: Deploy version
763
+ run: deploy --version=${{ github.sha }}
764
+
765
+ - name: Health check
766
+ run: check-health
767
+
768
+ - name: Rollback on failure
769
+ if: failure()
770
+ run: deploy --version=${{ env.PREVIOUS_VERSION }}
771
+ ```
772
+
773
+ ## When to Use This Skill
774
+
775
+ - Setting up CI/CD pipelines for BOSS projects
776
+ - Provisioning infrastructure with Terraform
777
+ - Containerizing applications with Docker
778
+ - Implementing monitoring and alerting
779
+ - Managing deployments and rollbacks
780
+ - Configuring auto-scaling and load balancing
781
+
782
+ ## Related Skills
783
+
784
+ - `security-best-practices.md` - Security in infrastructure
785
+ - `nextjs-turbo-stack.md` - Application stack to deploy
786
+
787
+ ## Key Takeaways
788
+
789
+ 1. **Everything as Code** - All infrastructure defined in version control
790
+ 2. **Immutable Infrastructure** - Replace, don't modify
791
+ 3. **Automated Deployments** - No manual steps
792
+ 4. **Monitoring First** - Observability from day one
793
+ 5. **Security by Default** - Secrets management, scanning, least privilege
794
+ 6. **Rollback Strategy** - Always have a way back