bsmnt 0.0.2 → 0.1.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 (430) hide show
  1. package/.github/workflows/release.yml +2 -0
  2. package/CHANGELOG.md +21 -0
  3. package/CLAUDE.md +42 -23
  4. package/README.md +33 -11
  5. package/biome.json +1 -0
  6. package/bun.lock +1 -1
  7. package/docs/architecture.drawio +266 -0
  8. package/docs/architecture.mermaid +91 -0
  9. package/package.json +1 -1
  10. package/{bin → packages/cli/bin}/index.js +28 -27
  11. package/packages/cli/package.json +16 -0
  12. package/{src → packages/cli/src}/commands/add-integration.js +23 -25
  13. package/{src → packages/cli/src}/commands/create.js +104 -133
  14. package/packages/create-basement-app/integrations/basehub/config.js +21 -0
  15. package/packages/create-basement-app/integrations/sanity/config.js +46 -0
  16. package/{src → packages/create-basement-app/integrations/sanity}/mergers/check-integration-merger.js +1 -1
  17. package/{src → packages/create-basement-app/integrations/sanity}/mergers/layout-merger.js +1 -1
  18. package/{src → packages/create-basement-app/integrations/sanity}/mergers/sitemap-merger.js +1 -1
  19. package/packages/create-basement-app/package.json +10 -0
  20. package/packages/create-basement-app/src/configs/animations.js +28 -0
  21. package/packages/create-basement-app/src/index.js +15 -0
  22. package/packages/create-basement-app/src/mergers/check-integration-merger.js +105 -0
  23. package/{src → packages/create-basement-app/src}/mergers/config.js +1 -7
  24. package/{src → packages/create-basement-app/src}/mergers/index.js +87 -93
  25. package/packages/create-basement-app/src/mergers/layout-merger.js +223 -0
  26. package/packages/create-basement-app/src/mergers/sitemap-merger.js +121 -0
  27. package/packages/create-basement-app/template-hooks/config.js +38 -0
  28. package/packages/create-basement-app/templates/default/.biome/plugins/README.md +21 -0
  29. package/packages/create-basement-app/templates/default/.biome/plugins/no-anchor-element.grit +12 -0
  30. package/packages/create-basement-app/templates/default/.biome/plugins/no-relative-parent-imports.grit +10 -0
  31. package/packages/create-basement-app/templates/default/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  32. package/packages/create-basement-app/templates/default/.cursor/rules/README.md +184 -0
  33. package/packages/create-basement-app/templates/default/.cursor/rules/architecture.mdc +437 -0
  34. package/packages/create-basement-app/templates/default/.cursor/rules/components.mdc +436 -0
  35. package/packages/create-basement-app/templates/default/.cursor/rules/integrations.mdc +447 -0
  36. package/packages/create-basement-app/templates/default/.cursor/rules/main.mdc +278 -0
  37. package/packages/create-basement-app/templates/default/.cursor/rules/styling.mdc +433 -0
  38. package/packages/create-basement-app/templates/default/.editorconfig +40 -0
  39. package/packages/create-basement-app/templates/default/.env.example +81 -0
  40. package/packages/create-basement-app/templates/default/.gitattributes +19 -0
  41. package/packages/create-basement-app/templates/default/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  42. package/packages/create-basement-app/templates/default/.github/workflows/lighthouse-to-slack.yml +136 -0
  43. package/packages/create-basement-app/templates/default/.vscode/extensions.json +20 -0
  44. package/packages/create-basement-app/templates/default/.vscode/settings.json +105 -0
  45. package/packages/create-basement-app/templates/default/README.md +221 -0
  46. package/packages/create-basement-app/templates/default/_gitignore +67 -0
  47. package/packages/create-basement-app/templates/default/app/favicon.ico +0 -0
  48. package/packages/create-basement-app/templates/default/app/layout.tsx +104 -0
  49. package/packages/create-basement-app/templates/default/app/page.tsx +275 -0
  50. package/packages/create-basement-app/templates/default/app/robots.ts +15 -0
  51. package/packages/create-basement-app/templates/default/app/sitemap.ts +16 -0
  52. package/packages/create-basement-app/templates/default/biome.json +250 -0
  53. package/packages/create-basement-app/templates/default/components/basement.svg +1 -0
  54. package/packages/create-basement-app/templates/default/components/layout/footer/index.tsx +27 -0
  55. package/packages/create-basement-app/templates/default/components/layout/header/index.tsx +11 -0
  56. package/packages/create-basement-app/templates/default/components/layout/theme/index.tsx +66 -0
  57. package/packages/create-basement-app/templates/default/components/layout/wrapper/index.tsx +65 -0
  58. package/packages/create-basement-app/templates/default/components/ui/README.md +77 -0
  59. package/packages/create-basement-app/templates/default/components/ui/image/README.md +37 -0
  60. package/packages/create-basement-app/templates/default/components/ui/image/index.tsx +224 -0
  61. package/packages/create-basement-app/templates/default/components/ui/link/index.tsx +146 -0
  62. package/packages/create-basement-app/templates/default/lib/README.md +33 -0
  63. package/packages/create-basement-app/templates/default/lib/hooks/index.ts +12 -0
  64. package/packages/create-basement-app/templates/default/lib/hooks/use-device-detection.ts +81 -0
  65. package/packages/create-basement-app/templates/default/lib/hooks/use-media-breakpoint.ts +15 -0
  66. package/packages/create-basement-app/templates/default/lib/hooks/use-prefetch.ts +74 -0
  67. package/packages/create-basement-app/templates/default/lib/scripts/dev.ts +52 -0
  68. package/packages/create-basement-app/templates/default/lib/scripts/generate-component.ts +322 -0
  69. package/packages/create-basement-app/templates/default/lib/scripts/generate-page.ts +193 -0
  70. package/packages/create-basement-app/templates/default/lib/scripts/generate.ts +79 -0
  71. package/packages/create-basement-app/templates/default/lib/scripts/utils.ts +246 -0
  72. package/packages/create-basement-app/templates/default/lib/store/app.ts +11 -0
  73. package/packages/create-basement-app/templates/default/lib/store/index.ts +11 -0
  74. package/packages/create-basement-app/templates/default/lib/styles/README.md +64 -0
  75. package/packages/create-basement-app/templates/default/lib/styles/cn.ts +7 -0
  76. package/packages/create-basement-app/templates/default/lib/styles/colors.ts +63 -0
  77. package/packages/create-basement-app/templates/default/lib/styles/config.ts +34 -0
  78. package/packages/create-basement-app/templates/default/lib/styles/css/global.css +85 -0
  79. package/packages/create-basement-app/templates/default/lib/styles/css/index.css +6 -0
  80. package/packages/create-basement-app/templates/default/lib/styles/css/reset.css +166 -0
  81. package/packages/create-basement-app/templates/default/lib/styles/css/root.css +68 -0
  82. package/packages/create-basement-app/templates/default/lib/styles/css/tailwind.css +132 -0
  83. package/packages/create-basement-app/templates/default/lib/styles/easings.ts +21 -0
  84. package/packages/create-basement-app/templates/default/lib/styles/fonts.ts +28 -0
  85. package/packages/create-basement-app/templates/default/lib/styles/index.ts +12 -0
  86. package/packages/create-basement-app/templates/default/lib/styles/layout.mjs +27 -0
  87. package/packages/create-basement-app/templates/default/lib/styles/scripts/README.md +29 -0
  88. package/packages/create-basement-app/templates/default/lib/styles/scripts/generate-root.ts +57 -0
  89. package/packages/create-basement-app/templates/default/lib/styles/scripts/generate-tailwind.ts +162 -0
  90. package/packages/create-basement-app/templates/default/lib/styles/scripts/postcss-functions.mjs +168 -0
  91. package/packages/create-basement-app/templates/default/lib/styles/scripts/setup-styles.ts +24 -0
  92. package/packages/create-basement-app/templates/default/lib/styles/scripts/utils.ts +20 -0
  93. package/packages/create-basement-app/templates/default/lib/styles/typography.ts +36 -0
  94. package/packages/create-basement-app/templates/default/lib/utils/README.md +40 -0
  95. package/packages/create-basement-app/templates/default/lib/utils/css.d.ts +21 -0
  96. package/packages/create-basement-app/templates/default/lib/utils/easings.ts +240 -0
  97. package/packages/create-basement-app/templates/default/lib/utils/fetch.ts +84 -0
  98. package/packages/create-basement-app/templates/default/lib/utils/math.test.ts +221 -0
  99. package/packages/create-basement-app/templates/default/lib/utils/math.ts +236 -0
  100. package/packages/create-basement-app/templates/default/lib/utils/metadata.ts +126 -0
  101. package/packages/create-basement-app/templates/default/lib/utils/strings.test.ts +166 -0
  102. package/packages/create-basement-app/templates/default/lib/utils/strings.ts +246 -0
  103. package/packages/create-basement-app/templates/default/lib/utils/types.d.ts +15 -0
  104. package/packages/create-basement-app/templates/default/lib/utils/viewport.test.ts +256 -0
  105. package/packages/create-basement-app/templates/default/lib/utils/viewport.ts +193 -0
  106. package/packages/create-basement-app/templates/default/next.config.ts +142 -0
  107. package/packages/create-basement-app/templates/default/package.json +62 -0
  108. package/packages/create-basement-app/templates/default/postcss.config.mjs +42 -0
  109. package/packages/create-basement-app/templates/default/public/fonts/geist/Geist-Mono.woff2 +0 -0
  110. package/packages/create-basement-app/templates/default/tsconfig.json +43 -0
  111. package/packages/create-basement-app/templates/experiment/.biome/plugins/README.md +21 -0
  112. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-anchor-element.grit +12 -0
  113. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-relative-parent-imports.grit +10 -0
  114. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  115. package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +184 -0
  116. package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +437 -0
  117. package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +436 -0
  118. package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +447 -0
  119. package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +278 -0
  120. package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +433 -0
  121. package/packages/create-basement-app/templates/experiment/.editorconfig +40 -0
  122. package/packages/create-basement-app/templates/experiment/.env.example +81 -0
  123. package/packages/create-basement-app/templates/experiment/.gitattributes +19 -0
  124. package/packages/create-basement-app/templates/experiment/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  125. package/packages/create-basement-app/templates/experiment/.github/workflows/lighthouse-to-slack.yml +136 -0
  126. package/packages/create-basement-app/templates/experiment/.vscode/extensions.json +20 -0
  127. package/packages/create-basement-app/templates/experiment/.vscode/settings.json +105 -0
  128. package/packages/create-basement-app/templates/experiment/README.md +221 -0
  129. package/packages/create-basement-app/templates/experiment/_gitignore +67 -0
  130. package/packages/create-basement-app/templates/experiment/app/favicon.ico +0 -0
  131. package/packages/create-basement-app/templates/experiment/app/layout.tsx +104 -0
  132. package/packages/create-basement-app/templates/experiment/app/page.tsx +275 -0
  133. package/packages/create-basement-app/templates/experiment/app/robots.ts +15 -0
  134. package/packages/create-basement-app/templates/experiment/app/sitemap.ts +16 -0
  135. package/packages/create-basement-app/templates/experiment/biome.json +250 -0
  136. package/packages/create-basement-app/templates/experiment/components/basement.svg +1 -0
  137. package/packages/create-basement-app/templates/experiment/components/layout/footer/index.tsx +27 -0
  138. package/packages/create-basement-app/templates/experiment/components/layout/header/index.tsx +58 -0
  139. package/packages/create-basement-app/templates/experiment/components/layout/navigation-menu.tsx +127 -0
  140. package/packages/create-basement-app/templates/experiment/components/layout/theme/index.tsx +66 -0
  141. package/packages/create-basement-app/templates/experiment/components/layout/wrapper/index.tsx +65 -0
  142. package/packages/create-basement-app/templates/experiment/components/ui/README.md +77 -0
  143. package/packages/create-basement-app/templates/experiment/components/ui/image/README.md +37 -0
  144. package/packages/create-basement-app/templates/experiment/components/ui/image/index.tsx +224 -0
  145. package/packages/create-basement-app/templates/experiment/components/ui/link/index.tsx +146 -0
  146. package/packages/create-basement-app/templates/experiment/lib/README.md +33 -0
  147. package/packages/create-basement-app/templates/experiment/lib/constants.ts +12 -0
  148. package/packages/create-basement-app/templates/experiment/lib/hooks/index.ts +12 -0
  149. package/packages/create-basement-app/templates/experiment/lib/hooks/use-device-detection.ts +81 -0
  150. package/packages/create-basement-app/templates/experiment/lib/hooks/use-media-breakpoint.ts +15 -0
  151. package/packages/create-basement-app/templates/experiment/lib/hooks/use-prefetch.ts +74 -0
  152. package/packages/create-basement-app/templates/experiment/lib/integrations/.gitkeep +0 -0
  153. package/packages/create-basement-app/templates/experiment/lib/scripts/dev.ts +52 -0
  154. package/packages/create-basement-app/templates/experiment/lib/scripts/generate-component.ts +322 -0
  155. package/packages/create-basement-app/templates/experiment/lib/scripts/generate-page.ts +193 -0
  156. package/packages/create-basement-app/templates/experiment/lib/scripts/generate.ts +79 -0
  157. package/packages/create-basement-app/templates/experiment/lib/scripts/utils.ts +246 -0
  158. package/packages/create-basement-app/templates/experiment/lib/store/app.ts +11 -0
  159. package/packages/create-basement-app/templates/experiment/lib/store/index.ts +11 -0
  160. package/packages/create-basement-app/templates/experiment/lib/styles/README.md +64 -0
  161. package/packages/create-basement-app/templates/experiment/lib/styles/cn.ts +7 -0
  162. package/packages/create-basement-app/templates/experiment/lib/styles/colors.ts +63 -0
  163. package/packages/create-basement-app/templates/experiment/lib/styles/config.ts +34 -0
  164. package/packages/create-basement-app/templates/experiment/lib/styles/css/global.css +85 -0
  165. package/packages/create-basement-app/templates/experiment/lib/styles/css/index.css +6 -0
  166. package/packages/create-basement-app/templates/experiment/lib/styles/css/reset.css +166 -0
  167. package/packages/create-basement-app/templates/experiment/lib/styles/css/root.css +68 -0
  168. package/packages/create-basement-app/templates/experiment/lib/styles/css/tailwind.css +132 -0
  169. package/packages/create-basement-app/templates/experiment/lib/styles/easings.ts +21 -0
  170. package/packages/create-basement-app/templates/experiment/lib/styles/fonts.ts +28 -0
  171. package/packages/create-basement-app/templates/experiment/lib/styles/index.ts +12 -0
  172. package/packages/create-basement-app/templates/experiment/lib/styles/layout.mjs +27 -0
  173. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/README.md +29 -0
  174. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/generate-root.ts +57 -0
  175. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/generate-tailwind.ts +162 -0
  176. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/postcss-functions.mjs +168 -0
  177. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/setup-styles.ts +24 -0
  178. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/utils.ts +20 -0
  179. package/packages/create-basement-app/templates/experiment/lib/styles/typography.ts +36 -0
  180. package/packages/create-basement-app/templates/experiment/lib/utils/README.md +40 -0
  181. package/packages/create-basement-app/templates/experiment/lib/utils/css.d.ts +21 -0
  182. package/packages/create-basement-app/templates/experiment/lib/utils/easings.ts +240 -0
  183. package/packages/create-basement-app/templates/experiment/lib/utils/fetch.ts +84 -0
  184. package/packages/create-basement-app/templates/experiment/lib/utils/math.test.ts +221 -0
  185. package/packages/create-basement-app/templates/experiment/lib/utils/math.ts +236 -0
  186. package/packages/create-basement-app/templates/experiment/lib/utils/metadata.ts +126 -0
  187. package/packages/create-basement-app/templates/experiment/lib/utils/strings.test.ts +166 -0
  188. package/packages/create-basement-app/templates/experiment/lib/utils/strings.ts +246 -0
  189. package/packages/create-basement-app/templates/experiment/lib/utils/types.d.ts +15 -0
  190. package/packages/create-basement-app/templates/experiment/lib/utils/viewport.test.ts +256 -0
  191. package/packages/create-basement-app/templates/experiment/lib/utils/viewport.ts +193 -0
  192. package/packages/create-basement-app/templates/experiment/next.config.ts +142 -0
  193. package/packages/create-basement-app/templates/experiment/package.json +69 -0
  194. package/packages/create-basement-app/templates/experiment/postcss.config.mjs +42 -0
  195. package/packages/create-basement-app/templates/experiment/public/fonts/geist/Geist-Mono.woff2 +0 -0
  196. package/packages/create-basement-app/templates/experiment/tsconfig.json +43 -0
  197. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +21 -0
  198. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +12 -0
  199. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +10 -0
  200. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  201. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +184 -0
  202. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +437 -0
  203. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +436 -0
  204. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +447 -0
  205. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +278 -0
  206. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +433 -0
  207. package/packages/create-basement-app/templates/webgl/.editorconfig +40 -0
  208. package/packages/create-basement-app/templates/webgl/.env.example +81 -0
  209. package/packages/create-basement-app/templates/webgl/.gitattributes +19 -0
  210. package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  211. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +136 -0
  212. package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +20 -0
  213. package/packages/create-basement-app/templates/webgl/.vscode/settings.json +105 -0
  214. package/packages/create-basement-app/templates/webgl/README.md +221 -0
  215. package/packages/create-basement-app/templates/webgl/_gitignore +67 -0
  216. package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
  217. package/packages/create-basement-app/templates/webgl/app/layout.tsx +104 -0
  218. package/packages/create-basement-app/templates/webgl/app/page.tsx +10 -0
  219. package/packages/create-basement-app/templates/webgl/app/robots.ts +15 -0
  220. package/packages/create-basement-app/templates/webgl/app/sitemap.ts +16 -0
  221. package/packages/create-basement-app/templates/webgl/biome.json +250 -0
  222. package/packages/create-basement-app/templates/webgl/components/basement.svg +1 -0
  223. package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +27 -0
  224. package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +11 -0
  225. package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +66 -0
  226. package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +65 -0
  227. package/packages/create-basement-app/templates/webgl/components/ui/README.md +77 -0
  228. package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +37 -0
  229. package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +224 -0
  230. package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +146 -0
  231. package/packages/create-basement-app/templates/webgl/components/webgl/canvas/dynamic.tsx +34 -0
  232. package/packages/create-basement-app/templates/webgl/components/webgl/canvas/index.tsx +43 -0
  233. package/packages/create-basement-app/templates/webgl/components/webgl/components/scene/index.tsx +21 -0
  234. package/packages/create-basement-app/templates/webgl/lib/README.md +33 -0
  235. package/packages/create-basement-app/templates/webgl/lib/hooks/index.ts +12 -0
  236. package/packages/create-basement-app/templates/webgl/lib/hooks/use-device-detection.ts +81 -0
  237. package/packages/create-basement-app/templates/webgl/lib/hooks/use-media-breakpoint.ts +15 -0
  238. package/packages/create-basement-app/templates/webgl/lib/hooks/use-prefetch.ts +74 -0
  239. package/packages/create-basement-app/templates/webgl/lib/integrations/.gitkeep +0 -0
  240. package/packages/create-basement-app/templates/webgl/lib/scripts/dev.ts +52 -0
  241. package/packages/create-basement-app/templates/webgl/lib/scripts/generate-component.ts +322 -0
  242. package/packages/create-basement-app/templates/webgl/lib/scripts/generate-page.ts +193 -0
  243. package/packages/create-basement-app/templates/webgl/lib/scripts/generate.ts +79 -0
  244. package/packages/create-basement-app/templates/webgl/lib/scripts/utils.ts +246 -0
  245. package/packages/create-basement-app/templates/webgl/lib/store/app.ts +11 -0
  246. package/packages/create-basement-app/templates/webgl/lib/store/index.ts +11 -0
  247. package/packages/create-basement-app/templates/webgl/lib/styles/README.md +64 -0
  248. package/packages/create-basement-app/templates/webgl/lib/styles/cn.ts +7 -0
  249. package/packages/create-basement-app/templates/webgl/lib/styles/colors.ts +63 -0
  250. package/packages/create-basement-app/templates/webgl/lib/styles/config.ts +34 -0
  251. package/packages/create-basement-app/templates/webgl/lib/styles/css/global.css +85 -0
  252. package/packages/create-basement-app/templates/webgl/lib/styles/css/index.css +6 -0
  253. package/packages/create-basement-app/templates/webgl/lib/styles/css/reset.css +166 -0
  254. package/packages/create-basement-app/templates/webgl/lib/styles/css/root.css +68 -0
  255. package/packages/create-basement-app/templates/webgl/lib/styles/css/tailwind.css +132 -0
  256. package/packages/create-basement-app/templates/webgl/lib/styles/easings.ts +21 -0
  257. package/packages/create-basement-app/templates/webgl/lib/styles/fonts.ts +28 -0
  258. package/packages/create-basement-app/templates/webgl/lib/styles/index.ts +12 -0
  259. package/packages/create-basement-app/templates/webgl/lib/styles/layout.mjs +27 -0
  260. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/README.md +29 -0
  261. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/generate-root.ts +57 -0
  262. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/generate-tailwind.ts +162 -0
  263. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/postcss-functions.mjs +168 -0
  264. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/setup-styles.ts +24 -0
  265. package/packages/create-basement-app/templates/webgl/lib/styles/scripts/utils.ts +20 -0
  266. package/packages/create-basement-app/templates/webgl/lib/styles/typography.ts +36 -0
  267. package/packages/create-basement-app/templates/webgl/lib/utils/README.md +40 -0
  268. package/packages/create-basement-app/templates/webgl/lib/utils/css.d.ts +21 -0
  269. package/packages/create-basement-app/templates/webgl/lib/utils/easings.ts +240 -0
  270. package/packages/create-basement-app/templates/webgl/lib/utils/fetch.ts +84 -0
  271. package/packages/create-basement-app/templates/webgl/lib/utils/math.test.ts +221 -0
  272. package/packages/create-basement-app/templates/webgl/lib/utils/math.ts +236 -0
  273. package/packages/create-basement-app/templates/webgl/lib/utils/metadata.ts +126 -0
  274. package/packages/create-basement-app/templates/webgl/lib/utils/strings.test.ts +166 -0
  275. package/packages/create-basement-app/templates/webgl/lib/utils/strings.ts +246 -0
  276. package/packages/create-basement-app/templates/webgl/lib/utils/types.d.ts +15 -0
  277. package/packages/create-basement-app/templates/webgl/lib/utils/viewport.test.ts +256 -0
  278. package/packages/create-basement-app/templates/webgl/lib/utils/viewport.ts +193 -0
  279. package/packages/create-basement-app/templates/webgl/next.config.ts +142 -0
  280. package/packages/create-basement-app/templates/webgl/package.json +68 -0
  281. package/packages/create-basement-app/templates/webgl/postcss.config.mjs +42 -0
  282. package/packages/create-basement-app/templates/webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
  283. package/packages/create-basement-app/templates/webgl/tsconfig.json +43 -0
  284. package/packages/create-basement-app/templates/webgpu/.biome/plugins/README.md +21 -0
  285. package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-anchor-element.grit +12 -0
  286. package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-relative-parent-imports.grit +10 -0
  287. package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  288. package/packages/create-basement-app/templates/webgpu/.cursor/rules/README.md +184 -0
  289. package/packages/create-basement-app/templates/webgpu/.cursor/rules/architecture.mdc +437 -0
  290. package/packages/create-basement-app/templates/webgpu/.cursor/rules/components.mdc +436 -0
  291. package/packages/create-basement-app/templates/webgpu/.cursor/rules/integrations.mdc +447 -0
  292. package/packages/create-basement-app/templates/webgpu/.cursor/rules/main.mdc +278 -0
  293. package/packages/create-basement-app/templates/webgpu/.cursor/rules/styling.mdc +433 -0
  294. package/packages/create-basement-app/templates/webgpu/.editorconfig +40 -0
  295. package/packages/create-basement-app/templates/webgpu/.env.example +81 -0
  296. package/packages/create-basement-app/templates/webgpu/.gitattributes +19 -0
  297. package/packages/create-basement-app/templates/webgpu/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  298. package/packages/create-basement-app/templates/webgpu/.github/workflows/lighthouse-to-slack.yml +136 -0
  299. package/packages/create-basement-app/templates/webgpu/.vscode/extensions.json +20 -0
  300. package/packages/create-basement-app/templates/webgpu/.vscode/settings.json +105 -0
  301. package/packages/create-basement-app/templates/webgpu/README.md +221 -0
  302. package/packages/create-basement-app/templates/webgpu/_gitignore +67 -0
  303. package/packages/create-basement-app/templates/webgpu/app/favicon.ico +0 -0
  304. package/packages/create-basement-app/templates/webgpu/app/layout.tsx +104 -0
  305. package/packages/create-basement-app/templates/webgpu/app/page.tsx +275 -0
  306. package/packages/create-basement-app/templates/webgpu/app/robots.ts +15 -0
  307. package/packages/create-basement-app/templates/webgpu/app/sitemap.ts +16 -0
  308. package/packages/create-basement-app/templates/webgpu/biome.json +250 -0
  309. package/packages/create-basement-app/templates/webgpu/components/basement.svg +1 -0
  310. package/packages/create-basement-app/templates/webgpu/components/layout/footer/index.tsx +27 -0
  311. package/packages/create-basement-app/templates/webgpu/components/layout/header/index.tsx +11 -0
  312. package/packages/create-basement-app/templates/webgpu/components/layout/theme/index.tsx +66 -0
  313. package/packages/create-basement-app/templates/webgpu/components/layout/wrapper/index.tsx +65 -0
  314. package/packages/create-basement-app/templates/webgpu/components/ui/README.md +77 -0
  315. package/packages/create-basement-app/templates/webgpu/components/ui/image/README.md +37 -0
  316. package/packages/create-basement-app/templates/webgpu/components/ui/image/index.tsx +224 -0
  317. package/packages/create-basement-app/templates/webgpu/components/ui/link/index.tsx +146 -0
  318. package/packages/create-basement-app/templates/webgpu/lib/README.md +33 -0
  319. package/packages/create-basement-app/templates/webgpu/lib/hooks/index.ts +12 -0
  320. package/packages/create-basement-app/templates/webgpu/lib/hooks/use-device-detection.ts +81 -0
  321. package/packages/create-basement-app/templates/webgpu/lib/hooks/use-media-breakpoint.ts +15 -0
  322. package/packages/create-basement-app/templates/webgpu/lib/hooks/use-prefetch.ts +74 -0
  323. package/packages/create-basement-app/templates/webgpu/lib/integrations/.gitkeep +0 -0
  324. package/packages/create-basement-app/templates/webgpu/lib/scripts/dev.ts +52 -0
  325. package/packages/create-basement-app/templates/webgpu/lib/scripts/generate-component.ts +322 -0
  326. package/packages/create-basement-app/templates/webgpu/lib/scripts/generate-page.ts +193 -0
  327. package/packages/create-basement-app/templates/webgpu/lib/scripts/generate.ts +79 -0
  328. package/packages/create-basement-app/templates/webgpu/lib/scripts/utils.ts +246 -0
  329. package/packages/create-basement-app/templates/webgpu/lib/store/app.ts +11 -0
  330. package/packages/create-basement-app/templates/webgpu/lib/store/index.ts +11 -0
  331. package/packages/create-basement-app/templates/webgpu/lib/styles/README.md +64 -0
  332. package/packages/create-basement-app/templates/webgpu/lib/styles/cn.ts +7 -0
  333. package/packages/create-basement-app/templates/webgpu/lib/styles/colors.ts +63 -0
  334. package/packages/create-basement-app/templates/webgpu/lib/styles/config.ts +34 -0
  335. package/packages/create-basement-app/templates/webgpu/lib/styles/css/global.css +85 -0
  336. package/packages/create-basement-app/templates/webgpu/lib/styles/css/index.css +6 -0
  337. package/packages/create-basement-app/templates/webgpu/lib/styles/css/reset.css +166 -0
  338. package/packages/create-basement-app/templates/webgpu/lib/styles/css/root.css +68 -0
  339. package/packages/create-basement-app/templates/webgpu/lib/styles/css/tailwind.css +132 -0
  340. package/packages/create-basement-app/templates/webgpu/lib/styles/easings.ts +21 -0
  341. package/packages/create-basement-app/templates/webgpu/lib/styles/fonts.ts +28 -0
  342. package/packages/create-basement-app/templates/webgpu/lib/styles/index.ts +12 -0
  343. package/packages/create-basement-app/templates/webgpu/lib/styles/layout.mjs +27 -0
  344. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/README.md +29 -0
  345. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/generate-root.ts +57 -0
  346. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/generate-tailwind.ts +162 -0
  347. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/postcss-functions.mjs +168 -0
  348. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/setup-styles.ts +24 -0
  349. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/utils.ts +20 -0
  350. package/packages/create-basement-app/templates/webgpu/lib/styles/typography.ts +36 -0
  351. package/packages/create-basement-app/templates/webgpu/lib/utils/README.md +40 -0
  352. package/packages/create-basement-app/templates/webgpu/lib/utils/css.d.ts +21 -0
  353. package/packages/create-basement-app/templates/webgpu/lib/utils/easings.ts +240 -0
  354. package/packages/create-basement-app/templates/webgpu/lib/utils/fetch.ts +84 -0
  355. package/packages/create-basement-app/templates/webgpu/lib/utils/math.test.ts +221 -0
  356. package/packages/create-basement-app/templates/webgpu/lib/utils/math.ts +236 -0
  357. package/packages/create-basement-app/templates/webgpu/lib/utils/metadata.ts +126 -0
  358. package/packages/create-basement-app/templates/webgpu/lib/utils/strings.test.ts +166 -0
  359. package/packages/create-basement-app/templates/webgpu/lib/utils/strings.ts +246 -0
  360. package/packages/create-basement-app/templates/webgpu/lib/utils/types.d.ts +15 -0
  361. package/packages/create-basement-app/templates/webgpu/lib/utils/viewport.test.ts +256 -0
  362. package/packages/create-basement-app/templates/webgpu/lib/utils/viewport.ts +193 -0
  363. package/packages/create-basement-app/templates/webgpu/next.config.ts +142 -0
  364. package/packages/create-basement-app/templates/webgpu/package.json +69 -0
  365. package/packages/create-basement-app/templates/webgpu/postcss.config.mjs +42 -0
  366. package/packages/create-basement-app/templates/webgpu/public/fonts/geist/Geist-Mono.woff2 +0 -0
  367. package/packages/create-basement-app/templates/webgpu/tsconfig.json +43 -0
  368. package/tasks/.last-branch +1 -0
  369. package/tasks/CLAUDE.md +104 -0
  370. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/prd.json +153 -0
  371. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/progress.txt +115 -0
  372. package/tasks/prd-project-restructure.md +375 -0
  373. package/tasks/prd.json +227 -91
  374. package/tasks/progress.txt +281 -87
  375. package/tasks/ralph.sh +113 -0
  376. package/layers/experiment/components/layout/header/index.tsx +0 -58
  377. package/layers/experiment/components/layout/navigation-menu.tsx +0 -127
  378. package/layers/experiment/lib/constants.ts +0 -12
  379. package/layers/webgl/app/page.tsx +0 -10
  380. package/layers/webgl/components/webgl/canvas/dynamic.tsx +0 -34
  381. package/layers/webgl/components/webgl/canvas/index.tsx +0 -43
  382. package/layers/webgl/components/webgl/components/scene/index.tsx +0 -21
  383. package/src/mergers/next-config-merger.js +0 -63
  384. /package/{src → packages/cli/src}/commands/setup-sanity.js +0 -0
  385. /package/{src → packages/cli/src}/commands/worktree.js +0 -0
  386. /package/{integrations/basehub → packages/create-basement-app/integrations/basehub/files}/README.md +0 -0
  387. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/draft-mode/disable/route.ts +0 -0
  388. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/draft-mode/enable/route.ts +0 -0
  389. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/revalidate/route.ts +0 -0
  390. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/layout.tsx +0 -0
  391. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/sitemap.ts +0 -0
  392. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/studio/[[...tool]]/page.tsx +0 -0
  393. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/studio/layout.tsx +0 -0
  394. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/components/ui/sanity-image/index.tsx +0 -0
  395. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/README.md +0 -0
  396. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/check-integration.ts +0 -0
  397. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/README.md +0 -0
  398. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/client.ts +0 -0
  399. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -0
  400. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/components/rich-text.tsx +0 -0
  401. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/env.ts +0 -0
  402. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/live/index.tsx +0 -0
  403. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/queries.ts +0 -0
  404. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.cli.ts +0 -0
  405. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.config.ts +0 -0
  406. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.types.ts +0 -0
  407. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schema.json +0 -0
  408. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/article.ts +0 -0
  409. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/example.ts +0 -0
  410. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/index.ts +0 -0
  411. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/link.ts +0 -0
  412. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/metadata.ts +0 -0
  413. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/navigation.ts +0 -0
  414. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/page.ts +0 -0
  415. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/richText.ts +0 -0
  416. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/structure.ts +0 -0
  417. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/utils/image.ts +0 -0
  418. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/utils/link.ts +0 -0
  419. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/scripts/copy-sanity-mcp.ts +0 -0
  420. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/scripts/generate-page.ts +0 -0
  421. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/utils/metadata.ts +0 -0
  422. /package/{plugins → packages/create-basement-app/plugins}/README.md +0 -0
  423. /package/{plugins → packages/create-basement-app/plugins}/no-anchor-element.grit +0 -0
  424. /package/{plugins → packages/create-basement-app/plugins}/no-relative-parent-imports.grit +0 -0
  425. /package/{plugins → packages/create-basement-app/plugins}/no-unnecessary-forwardref.grit +0 -0
  426. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-battery.ts +0 -0
  427. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-device-perf.ts +0 -0
  428. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-intersection-observer.ts +0 -0
  429. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-media.ts +0 -0
  430. /package/{layers/webgpu → packages/create-basement-app/templates/default/lib/integrations}/.gitkeep +0 -0
package/tasks/prd.json CHANGED
@@ -1,22 +1,24 @@
1
1
  {
2
2
  "project": "basement-cli",
3
- "branchName": "ralph/next-starter-dynamic-layers",
4
- "description": "Replace 4 static templates with next-starter clone + dynamic technology layers to eliminate maintenance burden",
3
+ "branchName": "BertovDev/project-restructure",
4
+ "description": "Restructure basement-cli into a bun workspaces monorepo with separated CLI and template scaffolding packages",
5
5
  "userStories": [
6
6
  {
7
7
  "id": "US-001",
8
- "title": "Create layer configuration system",
9
- "description": "As a CLI maintainer, I want technology layers defined in a config file so that adding or modifying layers only requires changing one file.",
8
+ "title": "Create monorepo skeleton with workspace config",
9
+ "description": "As a maintainer, I want the project organized as a bun workspaces monorepo so packages are properly isolated.",
10
10
  "acceptanceCriteria": [
11
- "Add LAYER_CONFIG export to src/mergers/config.js alongside existing CMS_CONFIG",
12
- "Each layer config defines: replaceFiles, additivePaths, dependencies, devDependencies",
13
- "Add getLayerConfig(layer) helper function export",
14
- "Config contains entries for webgl, webgpu, and experiment",
15
- "webgpu is a deps-only layer (empty replaceFiles and additivePaths arrays)",
16
- "webgl dependencies: @react-three/fiber ^9.5.0, @react-three/drei ^10.7.7, three ^0.182.0, @gsap/react ^2.0.0, @radix-ui/react-navigation-menu ^1.2.5, leva ^0.9.35, devDeps: @types/three ^0.182.0",
17
- "webgpu dependencies: @react-three/fiber 10.0.0-alpha.2, @react-three/drei ^11.0.0-alpha.4, three ^0.182.0, leva ^0.9.35, lucide-react ^0.474.0, @radix-ui/react-navigation-menu ^1.2.5, devDeps: @types/three ^0.182.0",
18
- "experiment dependencies: @react-three/fiber ^9.5.0, @react-three/drei ^10.7.7, three ^0.172.0, leva ^0.9.35, lucide-react ^0.474.0, @radix-ui/react-navigation-menu ^1.2.5, devDeps: @types/three ^0.182.0",
19
- "Typecheck passes"
11
+ "Create packages/cli/ directory",
12
+ "Create packages/create-basement-app/ directory",
13
+ "Create packages/create-basement-app/templates/ directory",
14
+ "Create packages/create-basement-app/integrations/ directory",
15
+ "Create packages/create-basement-app/template-hooks/ directory",
16
+ "Create packages/create-basement-app/plugins/ directory",
17
+ "Update root package.json: add \"workspaces\": [\"packages/*\"], keep existing name/version/type/scripts",
18
+ "Root biome.json stays at root (shared across all packages)",
19
+ "Create packages/cli/package.json with name @basementstudio/cli, bin basement pointing to ./bin/index.js, type module",
20
+ "Create packages/create-basement-app/package.json with name @basementstudio/create-basement-app, type module",
21
+ "Typecheck passes (no syntax errors in JS files)"
20
22
  ],
21
23
  "priority": 1,
22
24
  "passes": true,
@@ -24,130 +26,264 @@
24
26
  },
25
27
  {
26
28
  "id": "US-002",
27
- "title": "Extract layer files from templates",
28
- "description": "As a CLI maintainer, I need the unique files from each template extracted into a layers/ directory so they can be overlaid on next-starter.",
29
+ "title": "Move CLI code to packages/cli",
30
+ "description": "As a developer, I want CLI argument parsing and command routing isolated in its own package.",
29
31
  "acceptanceCriteria": [
30
- "Create layers/webgl/app/page.tsx copied from template/webgl/app/page.tsx (the one that imports DynamicCanvas)",
31
- "Create layers/webgl/components/webgl/canvas/dynamic.tsx from template/webgl/components/webgl/canvas/dynamic.tsx",
32
- "Create layers/webgl/components/webgl/canvas/index.tsx from template/webgl/components/webgl/canvas/index.tsx",
33
- "Create layers/webgl/components/webgl/components/scene/index.tsx from template/webgl/components/webgl/components/scene/index.tsx",
34
- "Create layers/experiment/components/layout/header/index.tsx from template/experiment/components/layout/header/index.tsx",
35
- "Create layers/experiment/components/layout/navigation-menu.tsx from template/experiment/components/layout/navigation-menu.tsx",
36
- "Create layers/experiment/lib/constats.ts from template/experiment/lib/constats.ts",
37
- "Create layers/experiment/lib/utils/cn.ts from template/experiment/lib/utils/cn.ts",
38
- "Create empty layers/webgpu/ directory with a .gitkeep file",
39
- "All copied files are byte-for-byte identical to their template source files",
40
- "Typecheck passes"
32
+ "Move bin/index.js to packages/cli/bin/index.js",
33
+ "Move src/commands/create.js to packages/cli/src/commands/create.js",
34
+ "Move src/commands/add-integration.js to packages/cli/src/commands/add-integration.js",
35
+ "Move src/commands/worktree.js to packages/cli/src/commands/worktree.js",
36
+ "Move src/commands/setup-sanity.js to packages/cli/src/commands/setup-sanity.js",
37
+ "Update all import paths in bin/index.js to reference new ../src/commands/ locations",
38
+ "Update packages/cli/package.json dependencies: add fs-extra, ora, picocolors, prompts, tiged, dotenv from root package.json",
39
+ "Remove chalk from packages/cli dependencies (standardize on picocolors)",
40
+ "Replace any chalk usage in bin/index.js with picocolors",
41
+ "Verify: node packages/cli/bin/index.js --help shows help text without errors",
42
+ "Typecheck passes (no syntax errors)"
41
43
  ],
42
44
  "priority": 2,
43
45
  "passes": true,
44
- "notes": ""
46
+ "notes": "bin/index.js uses chalk for banner - replace with picocolors. All src/commands/ files use picocolors already."
45
47
  },
46
48
  {
47
49
  "id": "US-003",
48
- "title": "Implement layer injection function",
49
- "description": "As the CLI system, I need to overlay layer-specific files on top of the next-starter base so that WebGL/WebGPU/Experiment projects get their unique components.",
50
+ "title": "Move merger code to create-basement-app package",
51
+ "description": "As a maintainer, I want all scaffolding and merge logic in the create-basement-app package.",
50
52
  "acceptanceCriteria": [
51
- "Add injectLayer(targetDir, layer, spinner) function to src/mergers/index.js",
52
- "Function resolves layer directory from CLI repo's layers/{type}/ path using __dirname",
53
- "Function calls existing detectPathPrefix() to handle src/ directory structure",
54
- "Function copies additive files from local layers/ directory (no tiged clone needed)",
55
- "Function replaces files listed in replaceFiles config (overwrites base version with overwrite: true)",
56
- "Function uses existing transformPath() for path prefix support",
57
- "Function returns results object with replaced, copied, skipped, and failed arrays",
58
- "When layer is 'default' or not found in config, function returns early with skipped result (no error)",
59
- "Extend formatMergeResults() to display replaced entries with checkmark prefix",
60
- "Typecheck passes"
53
+ "Move src/mergers/index.js to packages/create-basement-app/src/mergers/index.js",
54
+ "Move src/mergers/config.js to packages/create-basement-app/src/mergers/config.js",
55
+ "Move src/mergers/layout-merger.js to packages/create-basement-app/src/mergers/layout-merger.js",
56
+ "Move src/mergers/sitemap-merger.js to packages/create-basement-app/src/mergers/sitemap-merger.js",
57
+ "Move src/mergers/check-integration-merger.js to packages/create-basement-app/src/mergers/check-integration-merger.js",
58
+ "Delete orphaned src/mergers/next-config-merger.js (defined but never registered in CMS_MERGERS)",
59
+ "Update import paths in packages/cli/src/commands/create.js to reference create-basement-app mergers",
60
+ "Update import paths in packages/cli/src/commands/add-integration.js similarly",
61
+ "Add fs-extra, picocolors, tiged as dependencies in packages/create-basement-app/package.json",
62
+ "Create packages/create-basement-app/src/index.js that re-exports injectLayer, injectIntegration, formatMergeResults, getLayerConfig, getCmsConfig",
63
+ "Typecheck passes (no syntax errors)"
61
64
  ],
62
65
  "priority": 3,
63
66
  "passes": true,
64
- "notes": "Reuses existing detectPathPrefix() and transformPath() from src/mergers/index.js. Layer files are local (no network request)."
67
+ "notes": "next-config-merger.js is orphaned (not in CMS_MERGERS) - delete it. Merger functions use __dirname to resolve layers/ path - this will need updating in later stories."
65
68
  },
66
69
  {
67
70
  "id": "US-004",
68
- "title": "Change create.js to clone next-starter instead of template",
69
- "description": "As a developer using the CLI, I want my project scaffolded from the latest next-starter repo so I always get the most up-to-date base.",
71
+ "title": "Generate default template from next-starter",
72
+ "description": "As a contributor, I want a complete default template so I can preview and test it independently.",
70
73
  "acceptanceCriteria": [
71
- "Change tiged source on line 124 of src/commands/create.js from 'github:basementstudio/basement-cli/template/${type}#${branch}' to 'github:basementstudio/next-starter#main'",
72
- "Remove the BASEMENT_CLI_BRANCH env var usage for template (keep if used elsewhere)",
73
- "Delete bun.lock file after clone if it exists (since dependencies will be modified)",
74
- "Update download spinner text to say 'Downloading next-starter from GitHub...' instead of mentioning template type",
75
- "Update error/troubleshooting message in catch block to reference basementstudio/next-starter instead of basementstudio/basement-cli/template/{type}",
76
- "Typecheck passes"
74
+ "Clone basementstudio/next-starter#main into packages/create-basement-app/templates/default/ using tiged",
75
+ "Rename .gitignore to _gitignore in the template (npm strips dotfiles from published packages)",
76
+ "Template has a valid package.json with next, react, react-dom dependencies",
77
+ "Template directory contains app/, components/, lib/ directories",
78
+ "Delete any bun.lock or package-lock.json from the template",
79
+ "The template is a complete Next.js project (not a partial overlay)",
80
+ "Typecheck passes (no syntax errors)"
77
81
  ],
78
82
  "priority": 4,
79
83
  "passes": true,
80
- "notes": ""
84
+ "notes": "Used gh repo clone (private repo requires auth). Cloned next-starter#main, removed .git, renamed .gitignore to _gitignore, deleted bun.lock, removed .tldr cache."
81
85
  },
82
86
  {
83
87
  "id": "US-005",
84
- "title": "Wire layer injection into create flow",
85
- "description": "As the CLI system, I need the layer injection step between template download and CMS integration so layers are applied at the right time.",
88
+ "title": "Generate webgl template from default plus layer",
89
+ "description": "As a contributor, I want a standalone WebGL template with R3F components and dependencies pre-configured.",
86
90
  "acceptanceCriteria": [
87
- "Add new step between template download (step 3) and CMS integration (step 3.5) in src/commands/create.js",
88
- "Layer injection only runs when type !== 'default'",
89
- "Import injectLayer and formatMergeResults from src/mergers/index.js",
90
- "Show ora spinner with layer name during injection (e.g. 'Applying webgl layer...')",
91
- "Display injection results to user using formatMergeResults",
92
- "On failure, show warning (not hard error) and continue with project creation",
93
- "Typecheck passes"
91
+ "Copy packages/create-basement-app/templates/default/ to packages/create-basement-app/templates/webgl/",
92
+ "Copy layers/webgl/app/page.tsx to templates/webgl/app/page.tsx (overwrite the default page)",
93
+ "Copy layers/webgl/components/webgl/ directory into templates/webgl/components/webgl/",
94
+ "Merge WebGL dependencies into templates/webgl/package.json: @react-three/fiber ^9.5.0, @react-three/drei ^10.7.7, three ^0.182.0, @radix-ui/react-navigation-menu ^1.2.5, leva ^0.9.35",
95
+ "Merge WebGL devDependencies: @types/three ^0.182.0",
96
+ "Rename .gitignore to _gitignore if not already done",
97
+ "Template webgl/ is a complete Next.js project with WebGL components included",
98
+ "Typecheck passes (no syntax errors)"
94
99
  ],
95
100
  "priority": 5,
96
101
  "passes": true,
97
- "notes": "Must run BEFORE CMS integration because layers don't modify layout.tsx, and CMS mergers need the base layout intact."
102
+ "notes": "Copied default template, overlaid WebGL page.tsx + 3 component files (canvas/dynamic.tsx, canvas/index.tsx, components/scene/index.tsx), injected 5 deps + 1 devDep into package.json."
98
103
  },
99
104
  {
100
105
  "id": "US-006",
101
- "title": "Config-driven dependency injection in package.json hydration",
102
- "description": "As the CLI system, I need package.json hydration to read layer dependencies from LAYER_CONFIG instead of being hardcoded.",
106
+ "title": "Generate webgpu template from default plus deps",
107
+ "description": "As a contributor, I want a standalone WebGPU template with alpha R3F dependencies pre-configured.",
103
108
  "acceptanceCriteria": [
104
- "Import getLayerConfig from src/mergers/config.js in create.js",
105
- "Read layer dependencies from LAYER_CONFIG and merge into package.json: pkg.dependencies = { ...pkg.dependencies, ...layerConfig.dependencies }",
106
- "Also merge devDependencies from layer config",
107
- "CMS dependency injection (Sanity/BaseHub) still works unchanged",
108
- "Animation library injection (GSAP/Framer Motion) still works unchanged",
109
- "Simplify package.json handling: next-starter uses package.json directly (not package.template.json), remove the rename logic",
110
- "Project name still set to user-provided name, version still set to 0.1.0",
111
- "Typecheck passes"
109
+ "Copy packages/create-basement-app/templates/default/ to packages/create-basement-app/templates/webgpu/",
110
+ "Merge WebGPU dependencies into templates/webgpu/package.json: @react-three/fiber 10.0.0-alpha.2, @react-three/drei ^11.0.0-alpha.4, three ^0.182.0, leva ^0.9.35, lucide-react ^0.474.0, @radix-ui/react-navigation-menu ^1.2.5",
111
+ "Merge WebGPU devDependencies: @types/three ^0.182.0",
112
+ "Rename .gitignore to _gitignore if not already done",
113
+ "WebGPU template has no additional component files (deps-only, matching current behavior)",
114
+ "Template webgpu/ is a complete Next.js project",
115
+ "Typecheck passes (no syntax errors)"
112
116
  ],
113
117
  "priority": 6,
114
118
  "passes": true,
115
- "notes": "next-starter uses package.json not package.template.json, so the existsSync check for package.template.json can be simplified."
119
+ "notes": "Copied default template, injected 6 deps + 1 devDep into package.json. Deps-only (no overlay files). Uses alpha R3F versions."
116
120
  },
117
121
  {
118
122
  "id": "US-007",
119
- "title": "Delete template directory",
120
- "description": "As a CLI maintainer, I want the template/ directory removed so there's no duplicated code to maintain.",
123
+ "title": "Generate experiment template from default plus layer",
124
+ "description": "As a contributor, I want a standalone experiment template with navigation components and dependencies.",
121
125
  "acceptanceCriteria": [
122
- "Delete template/default/ directory and all contents",
123
- "Delete template/webgl/ directory and all contents",
124
- "Delete template/webgpu/ directory and all contents",
125
- "Delete template/experiment/ directory and all contents",
126
- "Grep source code for any remaining references to 'template/' paths and remove them",
127
- "Grep source code for any remaining references to 'basementstudio/basement-cli/template/' and remove them",
128
- "Typecheck passes"
126
+ "Copy packages/create-basement-app/templates/default/ to packages/create-basement-app/templates/experiment/",
127
+ "Copy layers/experiment/components/layout/header/index.tsx to templates/experiment/components/layout/header/index.tsx (overwrite default header)",
128
+ "Copy layers/experiment/components/layout/navigation-menu.tsx to templates/experiment/components/layout/navigation-menu.tsx",
129
+ "Copy layers/experiment/lib/constants.ts to templates/experiment/lib/constants.ts",
130
+ "Merge experiment dependencies into templates/experiment/package.json: @react-three/fiber ^9.5.0, @react-three/drei ^10.7.7, three ^0.172.0, class-variance-authority latest, leva ^0.9.35, lucide-react ^0.474.0, @radix-ui/react-navigation-menu ^1.2.5",
131
+ "Merge experiment devDependencies: @types/three ^0.182.0",
132
+ "Rename .gitignore to _gitignore if not already done",
133
+ "Template experiment/ is a complete Next.js project with experiment navigation",
134
+ "Typecheck passes (no syntax errors)"
129
135
  ],
130
136
  "priority": 7,
131
137
  "passes": true,
132
- "notes": ""
138
+ "notes": "Copied default template, overlaid 3 files (header/index.tsx replace, navigation-menu.tsx additive, constants.ts additive), injected 6 deps + 1 devDep. Used actual LAYER_CONFIG values (three ^0.182.0, cva ^0.7.0 already satisfied by ^0.7.1)."
133
139
  },
134
140
  {
135
141
  "id": "US-008",
136
- "title": "End-to-end verification of all template types",
137
- "description": "As a CLI maintainer, I need to verify all template + CMS + animation combinations produce working projects.",
142
+ "title": "Move Sanity integration files locally with config manifest",
143
+ "description": "As a maintainer, I want Sanity integration files local to create-basement-app with a single config manifest.",
138
144
  "acceptanceCriteria": [
139
- "Run npm link to install CLI locally",
140
- "Run: basement -c test-default -d -no-cms -no-animation -claude -no-hooks project creates successfully",
141
- "Run: basement -c test-webgl -webgl -no-cms -no-animation -claude -no-hooks project has R3F components in components/webgl/",
142
- "Run: basement -c test-webgpu -webgpu -no-cms -no-animation -claude -no-hooks project has WebGPU deps in package.json",
143
- "Run: basement -c test-experiment -exp -no-cms -no-animation -claude -no-hooks project has custom header with NavigationMenu",
144
- "Run: basement -c test-sanity -webgl -sanity -gsap -claude -no-hooks — project has CMS + animation + layer deps",
145
- "All generated projects pass bun install without errors",
146
- "Typecheck passes"
145
+ "Copy all files from integrations/sanity/ to packages/create-basement-app/integrations/sanity/files/",
146
+ "Move merger files to packages/create-basement-app/integrations/sanity/mergers/: layout-merger.js, sitemap-merger.js, check-integration-merger.js (copy from packages/create-basement-app/src/mergers/)",
147
+ "Create packages/create-basement-app/integrations/sanity/config.js with single-source-of-truth config containing: name, dependencies (@sanity/asset-utils, @sanity/image-url, @sanity/visual-editing, next-sanity), devDependencies (sanity, @sanity/vision), scripts (sanity:extract, sanity:typegen), additivePaths, mergeFiles",
148
+ "Sanity dependencies come from what is currently hardcoded in create.js lines 239-266",
149
+ "Sanity scripts come from what is currently hardcoded in create.js lines 254-259",
150
+ "Config additivePaths and mergeFiles match current CMS_CONFIG.sanity in config.js",
151
+ "Typecheck passes (no syntax errors)"
147
152
  ],
148
153
  "priority": 8,
149
154
  "passes": true,
150
- "notes": "This is the final validation step. Each test project should be cleaned up after verification."
155
+ "notes": "Copied 35 integration files to integrations/sanity/files/, 3 mergers to integrations/sanity/mergers/, created config.js with deps/devDeps/scripts/additivePaths/mergeFiles unified from create.js + CMS_CONFIG."
156
+ },
157
+ {
158
+ "id": "US-009",
159
+ "title": "Move BaseHub integration, template-hooks, and plugins",
160
+ "description": "As a maintainer, I want all scaffolding assets co-located in create-basement-app.",
161
+ "acceptanceCriteria": [
162
+ "Copy integrations/basehub/ to packages/create-basement-app/integrations/basehub/files/",
163
+ "Create packages/create-basement-app/integrations/basehub/config.js with: name, dependencies (basehub ^3.0.0), additivePaths",
164
+ "Move template-hooks/*.ts to packages/create-basement-app/template-hooks/",
165
+ "Create packages/create-basement-app/template-hooks/config.js exporting array of hook configs with: name, file, dependencies (e.g. use-battery needs lodash-es, use-device-perf needs detect-gpu + react-device-detect + zustand)",
166
+ "Move plugins/*.grit to packages/create-basement-app/plugins/",
167
+ "Typecheck passes (no syntax errors)"
168
+ ],
169
+ "priority": 9,
170
+ "passes": true,
171
+ "notes": "Copied basehub README to integrations/basehub/files/, created config.js with deps. Copied 4 hooks to template-hooks/ with config.js declaring npm deps. Copied 3 grit plugins + README to plugins/."
172
+ },
173
+ {
174
+ "id": "US-010",
175
+ "title": "Update merger paths to use create-basement-app locations",
176
+ "description": "As a maintainer, I want the merger system to resolve files from create-basement-app paths instead of old root-relative paths.",
177
+ "acceptanceCriteria": [
178
+ "Update packages/create-basement-app/src/mergers/index.js: change layer path resolution from path.resolve(__dirname, '../../layers', layer) to path.resolve(__dirname, '../../templates', layer)",
179
+ "Update injectIntegration to read integration files from local packages/create-basement-app/integrations/{cms}/files/ instead of cloning from remote GitHub branch via tiged",
180
+ "Update CMS_MERGERS to import mergers from integrations/{cms}/mergers/ instead of co-located merger files",
181
+ "Update packages/create-basement-app/src/mergers/config.js: CMS_CONFIG no longer needs 'branch' field (files are local now)",
182
+ "Update packages/cli/src/commands/create.js: read CMS deps/scripts from integration config.js instead of hardcoded values",
183
+ "Remove tiged dependency from create-basement-app if no longer needed (check if anything else uses it)",
184
+ "Verify injectLayer still works by checking path resolution against templates/ directory structure",
185
+ "Verify injectIntegration still works by checking path resolution against integrations/ directory structure",
186
+ "Typecheck passes (no syntax errors)"
187
+ ],
188
+ "priority": 10,
189
+ "passes": true,
190
+ "notes": "Updated injectIntegration to use local fs.copy from integrations/{cms}/files/ instead of tiged remote clone. Updated injectLayer path from ../../layers to ../../templates. CMS_MERGERS now import from integrations/sanity/mergers/. Removed branch field from CMS_CONFIG. CLI create.js and add-integration.js now read CMS deps/scripts from integration config manifests. Removed tiged dep from create-basement-app."
191
+ },
192
+ {
193
+ "id": "US-011",
194
+ "title": "Update CLI create command to use centralized configs",
195
+ "description": "As a maintainer, I want create.js to read all dependency info from config manifests with zero hardcoded versions.",
196
+ "acceptanceCriteria": [
197
+ "In packages/cli/src/commands/create.js: replace hardcoded Sanity deps (lines 239-266 equivalent) with import from integrations/sanity/config.js",
198
+ "Replace hardcoded BaseHub deps with import from integrations/basehub/config.js",
199
+ "Replace hardcoded animation deps with a new configs/animations.js manifest in create-basement-app: gsap -> {gsap: ^3.12.0, @gsap/react: ^2.0.0}, motion -> {motion: ^12.0.0}",
200
+ "Replace hardcoded CMS scripts with import from integration config.js",
201
+ "Hook copying reads from template-hooks/config.js for hook dependencies to inject",
202
+ "Template prompt reads available template names by listing packages/create-basement-app/templates/ directory",
203
+ "Zero hardcoded dependency version strings remain in create.js",
204
+ "Remove unused inquirer from root package.json dependencies",
205
+ "Remove dotenv if only used for CLI development (move to devDependencies or remove)",
206
+ "Typecheck passes (no syntax errors)"
207
+ ],
208
+ "priority": 11,
209
+ "passes": true,
210
+ "notes": "Created animations.js config manifest. Animation deps, hook deps, CMS deps/scripts all config-driven. Template prompt dynamic from templates/ dir. Removed inquirer and chalk from root. dotenv kept (used at runtime in create.js for .env loading)."
211
+ },
212
+ {
213
+ "id": "US-012",
214
+ "title": "Update template download to copy local templates",
215
+ "description": "As a maintainer, I want the CLI to copy templates from local create-basement-app instead of cloning from GitHub.",
216
+ "acceptanceCriteria": [
217
+ "In packages/cli/src/commands/create.js: replace tiged clone of basementstudio/next-starter#main with fs-extra copy from packages/create-basement-app/templates/{type}/",
218
+ "Remove the separate layer injection step (step 3.2) since templates are already complete standalone projects",
219
+ "Keep CMS integration injection step (step 3.5) since integrations still use the merge approach",
220
+ "Rename _gitignore back to .gitignore after copying template to target dir",
221
+ "Update spinner text from 'Downloading next-starter...' to 'Copying template...'",
222
+ "Template copy is instant (no network call) which improves CLI speed",
223
+ "Verify: running the CLI with each template type produces a valid project directory",
224
+ "Typecheck passes (no syntax errors)"
225
+ ],
226
+ "priority": 12,
227
+ "passes": true,
228
+ "notes": "Replaced tiged remote clone with fs.copy from local templates. Removed layer injection step 3.2 (templates are standalone). Added _gitignore->. gitignore rename. Removed layer dep injection from hydration (already in template package.json). Removed tiged dep from CLI package."
229
+ },
230
+ {
231
+ "id": "US-013",
232
+ "title": "Clean up old root directories and dead code",
233
+ "description": "As a maintainer, I want all old root-level directories removed since content has moved to packages.",
234
+ "acceptanceCriteria": [
235
+ "Delete root layers/ directory (files now in templates)",
236
+ "Delete root integrations/ directory (files now in packages/create-basement-app/integrations/)",
237
+ "Delete root template-hooks/ directory (files now in packages/create-basement-app/template-hooks/)",
238
+ "Delete root plugins/ directory (files now in packages/create-basement-app/plugins/)",
239
+ "Delete root src/ directory (code moved to packages/cli/src/ and packages/create-basement-app/src/)",
240
+ "Delete root bin/ directory (moved to packages/cli/bin/)",
241
+ "Remove chalk from root package.json dependencies",
242
+ "Remove inquirer from root package.json dependencies",
243
+ "Remove fs-extra, ora, picocolors, prompts, tiged, dotenv from root package.json (they're now in workspace packages)",
244
+ "Root package.json only has: workspaces config, shared scripts (build, lint, typecheck), devDependencies (biome, changesets)",
245
+ "Grep entire codebase for any remaining references to old paths (../../layers, ../../template-hooks, etc.) and fix them",
246
+ "Typecheck passes (no syntax errors)"
247
+ ],
248
+ "priority": 13,
249
+ "passes": true,
250
+ "notes": "Deleted 6 root dirs (layers, integrations, template-hooks, plugins, src, bin). Cleaned root package.json: renamed to basement-starter-cli, added private:true, removed bin field, removed test script, removed all runtime deps (now in workspace packages). Removed dotenv from CLI. Added workspace:* dep. Added main field to create-basement-app. 8605 lines deleted."
251
+ },
252
+ {
253
+ "id": "US-014",
254
+ "title": "Update changeset config and CI for workspaces",
255
+ "description": "As a maintainer, I want the release pipeline to publish both packages independently.",
256
+ "acceptanceCriteria": [
257
+ "Update .changeset/config.json for workspace-aware publishing (add access: public if scoped packages)",
258
+ "Update .github/workflows/release.yml to build both packages before publishing",
259
+ "Each package has its own changeset-compatible version field",
260
+ "packages/cli/package.json has @basementstudio/create-basement-app as workspace dependency: workspace:*",
261
+ "CLAUDE.md at project root updated to reflect new architecture (packages/, no more layers/, templates in create-basement-app/)",
262
+ "README.md updated with new project structure overview",
263
+ "Typecheck passes (no syntax errors)"
264
+ ],
265
+ "priority": 14,
266
+ "passes": true,
267
+ "notes": "Changeset config already workspace-ready (access: public, updateInternalDependencies: patch). Added NPM_TOKEN/NODE_AUTH_TOKEN to CI for npm publishing. Updated CLAUDE.md architecture, CLI flow, integration sources, plugin paths. Updated README.md with monorepo structure overview."
268
+ },
269
+ {
270
+ "id": "US-015",
271
+ "title": "End-to-end verification of restructured CLI",
272
+ "description": "As a maintainer, I need to verify the restructured CLI produces working projects identical to the old version.",
273
+ "acceptanceCriteria": [
274
+ "Run npm link from packages/cli/ to install CLI locally",
275
+ "Run: basement -c /tmp/test-default -d -no-cms -claude -no-hooks — project creates successfully with default template",
276
+ "Run: basement -c /tmp/test-webgl -webgl -no-cms -claude -no-hooks — project has R3F components and deps",
277
+ "Run: basement -c /tmp/test-webgpu -webgpu -no-cms -claude -no-hooks — project has WebGPU deps in package.json",
278
+ "Run: basement -c /tmp/test-experiment -experiment -no-cms -claude -no-hooks — project has experiment header and nav",
279
+ "All generated projects have valid package.json with correct dependencies",
280
+ "All generated projects pass bun install without errors",
281
+ "Clean up test projects after verification",
282
+ "Typecheck passes (no syntax errors)"
283
+ ],
284
+ "priority": 15,
285
+ "passes": true,
286
+ "notes": "All 4 templates verified: default, webgl, webgpu, experiment. npm link + basement -c works for all. 26/26 checks pass (deps, .gitignore rename, template-specific files). bun install succeeds on generated projects."
151
287
  }
152
288
  ]
153
289
  }