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
@@ -52,3 +52,5 @@ jobs:
52
52
  createGithubReleases: true
53
53
  env:
54
54
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
55
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
56
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @basementstudio/cli
2
2
 
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#29](https://github.com/basementstudio/basement-cli/pull/29) [`e30588e`](https://github.com/basementstudio/basement-cli/commit/e30588e8609835add7314cbbfc4453ca6d47c195) Thanks [@BertovDev](https://github.com/BertovDev)! - Restructure project into a bun workspaces monorepo with two packages: @basementstudio/cli and @basementstudio/create-basement-app.
8
+
9
+ Split CLI entry point and commands into packages/cli
10
+
11
+ Move template scaffolding, mergers, integrations, hooks, and plugins into packages/create-basement-app
12
+
13
+ Replace remote tiged template downloads with local standalone templates (default, webgl, webgpu, experiment)
14
+
15
+ Move Sanity and BaseHub integration files locally with declarative config manifests (config.js)
16
+
17
+ Centralize animation and hook dependency configs in create-basement-app/src/configs/
18
+
19
+ Update CI workflow and changeset config for workspace publishing
20
+
21
+ Remove old root-level bin/, src/, layers/, and dead
22
+ code
23
+
3
24
  ## 0.0.2
4
25
 
5
26
  ### Patch Changes
package/CLAUDE.md CHANGED
@@ -10,8 +10,8 @@ This is **basement**, a CLI tool that scaffolds Next.js projects with AI agent i
10
10
 
11
11
  ### CLI Development
12
12
  ```bash
13
- npm link # Install CLI locally for testing
14
- basement # Run the CLI
13
+ cd packages/cli && npm link # Install CLI locally for testing
14
+ basement # Run the CLI
15
15
  ```
16
16
 
17
17
  ### Generated Project Commands
@@ -34,28 +34,46 @@ bun sanity:typegen # Generate TS types from Sanity schema
34
34
 
35
35
  ## Architecture
36
36
 
37
+ This project is a **bun workspaces monorepo** with two packages:
38
+
37
39
  ```
38
40
  basement-starter-cli/
39
- ├── bin/index.js # CLI entry point (basement command)
40
- ├── src/commands/create.js # Main project creation logic
41
- ├── layers/ # Technology layer overlays (applied on top of next-starter)
42
- ├── webgl/ # Three.js WebGL components (page, canvas, scene)
43
- │ ├── webgpu/ # WebGPU (deps-only, .gitkeep)
44
- └── experiment/ # Creative coding (header, navigation, utils)
45
- ├── integrations/ # CMS integrations (injected on top of templates)
46
- │ └── sanity/ # Sanity CMS files
47
- ├── template-hooks/ # Reusable React hooks (selected during setup)
48
- └── plugins/ # Biome linting rules (Grit patterns)
41
+ ├── packages/
42
+ ├── cli/ # @basementstudio/cli
43
+ │ │ ├── bin/index.js # CLI entry point (basement command)
44
+ │ └── src/commands/
45
+ ├── create.js # Main project creation logic
46
+ │ ├── add-integration.js # Add CMS to existing projects
47
+ │ │ ├── worktree.js # Git worktree management
48
+ └── setup-sanity.js # Sanity project provisioning
49
+ │ └── create-basement-app/ # @basementstudio/create-basement-app
50
+ │ ├── src/
51
+ │ │ ├── index.js # Barrel exports (public API)
52
+ │ │ ├── mergers/ # File merge logic (layout, sitemap, config)
53
+ │ │ └── configs/animations.js # Animation dependency configs
54
+ │ ├── templates/ # Standalone project templates
55
+ │ │ ├── default/ # Next.js 16 + React 19 + Tailwind v4
56
+ │ │ ├── webgl/ # + React Three Fiber + Three.js
57
+ │ │ ├── webgpu/ # + R3F WebGPU renderer (alpha)
58
+ │ │ └── experiment/ # + Creative coding navigation UI
59
+ │ ├── integrations/ # CMS integration files + config manifests
60
+ │ │ ├── sanity/ # Sanity files, mergers, config.js
61
+ │ │ └── basehub/ # BaseHub files, config.js
62
+ │ ├── template-hooks/ # Reusable React hooks + config.js
63
+ │ └── plugins/ # Biome linting rules (Grit patterns)
64
+ ├── .changeset/ # Changeset config for versioning
65
+ ├── .github/workflows/release.yml # CI: publish both packages to npm
66
+ ├── biome.json # Shared Biome config (root-level)
67
+ └── package.json # Workspace root (private, no runtime deps)
49
68
  ```
50
69
 
51
- ### CLI Flow (src/commands/create.js)
70
+ ### CLI Flow (packages/cli/src/commands/create.js)
52
71
  1. **Prompts**: Collect project name, template type, CMS, animation library, agent preference, hooks
53
- 2. **Template Download**: Clone from `basementstudio/next-starter#main`
54
- 3. **Layer Injection**: Overlay technology layer files from local `layers/{type}/` directory
55
- 4. **Integration Injection**: Overlay CMS files from `basementstudio/basement/integrations/{cms}#sanity-integration`
56
- 5. **Package Hydration**: Inject layer deps (from LAYER_CONFIG), CMS deps, animation deps, and scripts
57
- 6. **Agent Skills**: Install AI agent skills via `bunx skills add`
58
- 7. **Hooks**: Copy selected hooks from `template-hooks/`
72
+ 2. **Template Copy**: Copy standalone template from `create-basement-app/templates/{type}/` (instant, no network)
73
+ 3. **Integration Injection**: Merge CMS files from local `create-basement-app/integrations/{cms}/files/`
74
+ 4. **Package Hydration**: Inject CMS deps, animation deps, hook deps, and scripts (all from config manifests)
75
+ 5. **Agent Skills**: Install AI agent skills via `bunx skills add`
76
+ 6. **Hooks**: Copy selected hooks from `create-basement-app/template-hooks/`
59
77
 
60
78
  ## Generated Project Stack
61
79
 
@@ -120,9 +138,10 @@ import { cn } from '@/styles/cn'
120
138
  - Root layouts should have ZERO dynamic function calls — encapsulate all dynamic behavior in child components with proper Suspense boundaries
121
139
 
122
140
  ### Integration File Sources
123
- - **Technology layers** (`layers/`) are LOCAL files in this CLI repo
124
- - **CMS integrations** (`integrations/`) are downloaded from REMOTE GitHub branches via `tiged` the local `integrations/` directory is only a reference copy
125
- - Files that need to exist in generated projects but aren't on the remote branch must be **generated inline by the merger** (e.g., `SanityStudioGuard` component is written by `layout-merger.js`)
141
+ - **Templates** (`packages/create-basement-app/templates/`) are standalone, complete Next.js projects (no layer overlay needed)
142
+ - **CMS integrations** (`packages/create-basement-app/integrations/`) are LOCAL files with config manifestsno remote GitHub cloning
143
+ - **Config manifests** (`config.js` in each integration) declare deps, scripts, additivePaths, and mergeFiles
144
+ - Files that need to exist in generated projects but aren't in the integration directory must be **generated inline by the merger** (e.g., `SanityStudioGuard` component is written by `layout-merger.js`)
126
145
 
127
146
  ### Debug Components
128
147
  Always gate debug UI (not auto-removed in production):
@@ -132,7 +151,7 @@ Always gate debug UI (not auto-removed in production):
132
151
 
133
152
  ## Biome Plugins
134
153
 
135
- Custom linting rules in `plugins/`:
154
+ Custom linting rules in `packages/create-basement-app/plugins/`:
136
155
  - `no-anchor-element.grit` - Enforce Next.js `<Link>` over `<a>`
137
156
  - `no-unnecessary-forwardref.grit` - Prevent forwardRef with React 19
138
157
  - `no-relative-parent-imports.grit` - Enforce `@/` alias imports
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # basement `1.0.0`
1
+ # bsmnt `1.0.0`
2
2
 
3
3
  Your project starts here. One command to go from zero to a fully configured Next.js project with our stack, CMS, agent skills, and everything wired up.
4
4
 
5
5
  ```bash
6
- basement
6
+ bsmnt
7
7
  ```
8
8
 
9
9
  ## What's in 1.0
@@ -40,7 +40,7 @@ Already have a project running? The `--add` command injects Sanity into it. It d
40
40
  Real-world validated — this is how we integrated Sanity into the ROX project.
41
41
 
42
42
  ```bash
43
- basement --add
43
+ bsmnt --add
44
44
  ```
45
45
 
46
46
  ### Agent skills out of the box
@@ -60,23 +60,45 @@ For Claude Code + Sanity, it also registers the Sanity MCP server automatically.
60
60
  Run multiple Claude Code instances on separate branches without conflicts. The CLI manages worktree creation, switching, and cleanup.
61
61
 
62
62
  ```bash
63
- basement -wc -b=feature/auth,feature/dashboard,fix/bug-123
63
+ bsmnt -wc -b=feature/auth,feature/dashboard,fix/bug-123
64
64
  ```
65
65
 
66
66
  Creates three isolated worktrees with dependencies auto-installed. Each one is a full working copy your agent can run in independently.
67
67
 
68
68
  ---
69
69
 
70
+ ## Project Structure
71
+
72
+ This is a **bun workspaces monorepo** with two publishable packages:
73
+
74
+ | Package | npm | Description |
75
+ |---------|-----|-------------|
76
+ | `packages/cli` | `@basementstudio/cli` | CLI binary — prompts, argument parsing, command routing |
77
+ | `packages/create-basement-app` | `@basementstudio/create-basement-app` | Templates, integrations, mergers, hooks, plugins |
78
+
79
+ ```
80
+ packages/
81
+ ├── cli/ # CLI entry point and commands
82
+ │ ├── bin/index.js
83
+ │ └── src/commands/
84
+ └── create-basement-app/ # Scaffolding assets and merge logic
85
+ ├── templates/{default,webgl,webgpu,experiment}/
86
+ ├── integrations/{sanity,basehub}/
87
+ ├── template-hooks/
88
+ └── plugins/
89
+ ```
90
+
70
91
  ## (SOON) Installation
71
92
 
72
93
  ```bash
73
- npm install -g basement
94
+ npm install -g @basementstudio/cli
74
95
  ```
75
96
 
76
97
  For local development — clone the repo and run:
77
98
 
78
99
  ```bash
79
- npm link
100
+ bun install
101
+ cd packages/cli && npm link
80
102
  ```
81
103
 
82
104
  ## Usage
@@ -84,31 +106,31 @@ npm link
84
106
  Interactive mode — answer prompts step by step:
85
107
 
86
108
  ```bash
87
- basement
109
+ bsmnt
88
110
  ```
89
111
 
90
112
  Skip everything with flags:
91
113
 
92
114
  ```bash
93
- basement --create my-app --webgpu --sanity --gsap --claude
115
+ bsmnt --create my-app --webgpu --sanity --gsap --claude
94
116
  ```
95
117
 
96
118
  Add Sanity to an existing project:
97
119
 
98
120
  ```bash
99
- basement --add
121
+ bsmnt --add
100
122
  ```
101
123
 
102
124
  Manage worktrees:
103
125
 
104
126
  ```bash
105
- basement --worktree
127
+ bsmnt --worktree
106
128
  ```
107
129
 
108
130
  ## All Flags
109
131
 
110
132
  ```
111
- basement [mode] [project-name] [flags]
133
+ bsmnt [mode] [project-name] [flags]
112
134
 
113
135
  Modes:
114
136
  -c, --create Setup a new project
package/biome.json CHANGED
@@ -14,6 +14,7 @@
14
14
  "layers/**",
15
15
  "template-hooks/**",
16
16
  "plugins/**",
17
+ "packages/**",
17
18
  "biome.json",
18
19
  "package.json"
19
20
  ]
package/bun.lock CHANGED
@@ -2,7 +2,7 @@
2
2
  "lockfileVersion": 1,
3
3
  "workspaces": {
4
4
  "": {
5
- "name": "@basementstudio/cli",
5
+ "name": "bsmnt",
6
6
  "dependencies": {
7
7
  "chalk": "^5.6.2",
8
8
  "dotenv": "^17.2.3",
@@ -0,0 +1,266 @@
1
+ <mxfile host="app.diagrams.net" modified="2026-02-12T00:00:00.000Z" agent="Claude Code" version="24.0.0" type="device">
2
+ <diagram id="architecture" name="Project Structure">
3
+ <mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1200" math="0" shadow="0">
4
+ <root>
5
+ <mxCell id="0" />
6
+ <mxCell id="1" parent="0" />
7
+
8
+ <!-- ROOT -->
9
+ <mxCell id="root" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1a1a2e;strokeColor=#e94560;arcSize=8;" vertex="1" parent="1">
10
+ <mxGeometry x="20" y="20" width="1560" height="1160" as="geometry" />
11
+ </mxCell>
12
+ <mxCell id="root_label" value="&lt;b&gt;basement-starter-cli&lt;/b&gt; (root)" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#e94560;fontSize=16;" vertex="1" parent="1">
13
+ <mxGeometry x="40" y="30" width="250" height="30" as="geometry" />
14
+ </mxCell>
15
+
16
+ <!-- Root files -->
17
+ <mxCell id="root_pkg" value="package.json&#xa;workspaces: [packages/*]" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2d2d44;strokeColor=#e94560;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
18
+ <mxGeometry x="40" y="70" width="160" height="40" as="geometry" />
19
+ </mxCell>
20
+ <mxCell id="root_biome" value="biome.json&#xa;shared linting" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2d2d44;strokeColor=#e94560;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
21
+ <mxGeometry x="210" y="70" width="120" height="40" as="geometry" />
22
+ </mxCell>
23
+ <mxCell id="root_changeset" value=".changeset/&#xa;versioning" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2d2d44;strokeColor=#e94560;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
24
+ <mxGeometry x="340" y="70" width="120" height="40" as="geometry" />
25
+ </mxCell>
26
+ <mxCell id="root_ci" value=".github/workflows/&#xa;release pipeline" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2d2d44;strokeColor=#e94560;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
27
+ <mxGeometry x="470" y="70" width="140" height="40" as="geometry" />
28
+ </mxCell>
29
+
30
+ <!-- CLI PACKAGE -->
31
+ <mxCell id="cli" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#16213e;strokeColor=#0f3460;arcSize=6;" vertex="1" parent="1">
32
+ <mxGeometry x="40" y="140" width="360" height="420" as="geometry" />
33
+ </mxCell>
34
+ <mxCell id="cli_label" value="&lt;b&gt;packages/cli&lt;/b&gt;&#xa;@basementstudio/cli" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#4da6ff;fontSize=14;" vertex="1" parent="1">
35
+ <mxGeometry x="55" y="150" width="200" height="40" as="geometry" />
36
+ </mxCell>
37
+
38
+ <mxCell id="cli_bin" value="&lt;b&gt;bin/index.js&lt;/b&gt;&#xa;CLI entry point&#xa;&#x27;basement&#x27; command&#xa;arg parsing + routing" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e3a5f;strokeColor=#4da6ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
39
+ <mxGeometry x="60" y="200" width="150" height="70" as="geometry" />
40
+ </mxCell>
41
+
42
+ <mxCell id="cli_create" value="&lt;b&gt;src/commands/create.js&lt;/b&gt;&#xa;Orchestrates scaffolding&#xa;Calls create-basement-app" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e3a5f;strokeColor=#4da6ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
43
+ <mxGeometry x="60" y="285" width="160" height="60" as="geometry" />
44
+ </mxCell>
45
+
46
+ <mxCell id="cli_add" value="&lt;b&gt;src/commands/&#xa;add-integration.js&lt;/b&gt;&#xa;Add CMS to existing project" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e3a5f;strokeColor=#4da6ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
47
+ <mxGeometry x="230" y="285" width="155" height="60" as="geometry" />
48
+ </mxCell>
49
+
50
+ <mxCell id="cli_worktree" value="&lt;b&gt;src/commands/&#xa;worktree.js&lt;/b&gt;&#xa;Git worktree mgmt" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e3a5f;strokeColor=#4da6ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
51
+ <mxGeometry x="60" y="360" width="130" height="55" as="geometry" />
52
+ </mxCell>
53
+
54
+ <mxCell id="cli_sanity" value="&lt;b&gt;src/commands/&#xa;setup-sanity.js&lt;/b&gt;&#xa;Sanity project setup" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e3a5f;strokeColor=#4da6ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
55
+ <mxGeometry x="200" y="360" width="140" height="55" as="geometry" />
56
+ </mxCell>
57
+
58
+ <mxCell id="cli_pkg" value="&lt;b&gt;package.json&lt;/b&gt;&#xa;deps: fs-extra, ora, picocolors,&#xa;prompts, dotenv" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e3a5f;strokeColor=#4da6ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
59
+ <mxGeometry x="60" y="430" width="200" height="50" as="geometry" />
60
+ </mxCell>
61
+
62
+ <mxCell id="cli_dep_label" value="depends on&#xa;create-basement-app&#xa;(workspace:*)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#ff6b6b;fontSize=10;fontStyle=2;" vertex="1" parent="1">
63
+ <mxGeometry x="60" y="490" width="130" height="50" as="geometry" />
64
+ </mxCell>
65
+
66
+ <!-- CREATE-BASEMENT-APP PACKAGE -->
67
+ <mxCell id="cba" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#0f3460;strokeColor=#533483;arcSize=4;" vertex="1" parent="1">
68
+ <mxGeometry x="420" y="140" width="1140" height="1020" as="geometry" />
69
+ </mxCell>
70
+ <mxCell id="cba_label" value="&lt;b&gt;packages/create-basement-app&lt;/b&gt;&#xa;@basementstudio/create-basement-app" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#b388ff;fontSize=14;" vertex="1" parent="1">
71
+ <mxGeometry x="440" y="150" width="350" height="40" as="geometry" />
72
+ </mxCell>
73
+
74
+ <!-- SRC -->
75
+ <mxCell id="cba_src" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1a2744;strokeColor=#533483;arcSize=6;" vertex="1" parent="1">
76
+ <mxGeometry x="440" y="200" width="520" height="200" as="geometry" />
77
+ </mxCell>
78
+ <mxCell id="cba_src_label" value="&lt;b&gt;src/&lt;/b&gt; — scaffolding logic" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#b388ff;fontSize=12;" vertex="1" parent="1">
79
+ <mxGeometry x="450" y="205" width="180" height="25" as="geometry" />
80
+ </mxCell>
81
+
82
+ <mxCell id="cba_index" value="&lt;b&gt;index.js&lt;/b&gt;&#xa;Public API&#xa;barrel export" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2a3f5f;strokeColor=#b388ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
83
+ <mxGeometry x="455" y="235" width="100" height="55" as="geometry" />
84
+ </mxCell>
85
+
86
+ <mxCell id="cba_mergers" value="&lt;b&gt;mergers/&lt;/b&gt;&#xa;index.js — injectLayer, injectIntegration&#xa;config.js — CMS_CONFIG, LAYER_CONFIG" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2a3f5f;strokeColor=#b388ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
87
+ <mxGeometry x="570" y="235" width="250" height="55" as="geometry" />
88
+ </mxCell>
89
+
90
+ <mxCell id="cba_configs" value="&lt;b&gt;configs/&lt;/b&gt;&#xa;animations.js&#xa;GSAP + Motion deps" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2a3f5f;strokeColor=#b388ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
91
+ <mxGeometry x="835" y="235" width="110" height="55" as="geometry" />
92
+ </mxCell>
93
+
94
+ <mxCell id="cba_pkg" value="&lt;b&gt;package.json&lt;/b&gt; — deps: fs-extra, picocolors" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2a3f5f;strokeColor=#b388ff;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
95
+ <mxGeometry x="455" y="310" width="280" height="30" as="geometry" />
96
+ </mxCell>
97
+
98
+ <!-- TEMPLATES -->
99
+ <mxCell id="templates" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3d1f6d;strokeColor=#e94560;arcSize=6;" vertex="1" parent="1">
100
+ <mxGeometry x="440" y="420" width="520" height="280" as="geometry" />
101
+ </mxCell>
102
+ <mxCell id="templates_label" value="&lt;b&gt;templates/&lt;/b&gt; — full standalone Next.js projects" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#ff6b9d;fontSize=12;" vertex="1" parent="1">
103
+ <mxGeometry x="450" y="425" width="330" height="25" as="geometry" />
104
+ </mxCell>
105
+
106
+ <mxCell id="t_default" value="&lt;b&gt;default/&lt;/b&gt;&#xa;84 files&#xa;Base next-starter&#xa;&#xa;next 16.1.4&#xa;react 19.2.4&#xa;tailwindcss v4&#xa;zustand&#xa;biome" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#4a2080;strokeColor=#ff6b9d;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
107
+ <mxGeometry x="455" y="460" width="110" height="130" as="geometry" />
108
+ </mxCell>
109
+
110
+ <mxCell id="t_webgl" value="&lt;b&gt;webgl/&lt;/b&gt;&#xa;87 files&#xa;default + R3F&#xa;&#xa;@react-three/fiber&#xa;@react-three/drei&#xa;three ^0.182.0&#xa;+ canvas/scene" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#4a2080;strokeColor=#ff6b9d;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
111
+ <mxGeometry x="580" y="460" width="115" height="130" as="geometry" />
112
+ </mxCell>
113
+
114
+ <mxCell id="t_webgpu" value="&lt;b&gt;webgpu/&lt;/b&gt;&#xa;84 files&#xa;default + alpha R3F&#xa;&#xa;fiber 10.0.0-alpha&#xa;drei ^11.0.0-alpha&#xa;(deps only,&#xa;no extra files)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#4a2080;strokeColor=#ff6b9d;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
115
+ <mxGeometry x="710" y="460" width="115" height="130" as="geometry" />
116
+ </mxCell>
117
+
118
+ <mxCell id="t_experiment" value="&lt;b&gt;experiment/&lt;/b&gt;&#xa;86 files&#xa;default + nav&#xa;&#xa;Radix NavMenu&#xa;CVA styling&#xa;+ header/nav&#xa;+ constants.ts" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#4a2080;strokeColor=#ff6b9d;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
119
+ <mxGeometry x="840" y="460" width="110" height="130" as="geometry" />
120
+ </mxCell>
121
+
122
+ <mxCell id="t_note" value="Each template is independently runnable:&#xa;cd templates/webgl &amp;&amp; bun install &amp;&amp; bun dev" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#ff6b9d;fontSize=10;fontStyle=2;" vertex="1" parent="1">
123
+ <mxGeometry x="455" y="605" width="280" height="35" as="geometry" />
124
+ </mxCell>
125
+
126
+ <!-- INTEGRATIONS -->
127
+ <mxCell id="integrations" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#5c1a1a;strokeColor=#ff4d4d;arcSize=6;" vertex="1" parent="1">
128
+ <mxGeometry x="980" y="200" width="560" height="310" as="geometry" />
129
+ </mxCell>
130
+ <mxCell id="int_label" value="&lt;b&gt;integrations/&lt;/b&gt; — CMS overlays (applied on top of any template)" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#ff6b6b;fontSize=12;" vertex="1" parent="1">
131
+ <mxGeometry x="990" y="205" width="400" height="25" as="geometry" />
132
+ </mxCell>
133
+
134
+ <!-- Sanity -->
135
+ <mxCell id="sanity" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6b2020;strokeColor=#ff4d4d;arcSize=8;" vertex="1" parent="1">
136
+ <mxGeometry x="995" y="240" width="340" height="250" as="geometry" />
137
+ </mxCell>
138
+ <mxCell id="sanity_label" value="&lt;b&gt;sanity/&lt;/b&gt;" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#ff8a8a;fontSize=11;" vertex="1" parent="1">
139
+ <mxGeometry x="1005" y="245" width="70" height="22" as="geometry" />
140
+ </mxCell>
141
+
142
+ <mxCell id="s_config" value="&lt;b&gt;config.js&lt;/b&gt;&#xa;Single source of truth&#xa;deps: @sanity/*, next-sanity&#xa;devDeps: sanity&#xa;scripts: extract, typegen&#xa;additivePaths: 9&#xa;mergeFiles: 3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#7a2a2a;strokeColor=#ff8a8a;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
143
+ <mxGeometry x="1010" y="270" width="150" height="100" as="geometry" />
144
+ </mxCell>
145
+
146
+ <mxCell id="s_files" value="&lt;b&gt;files/&lt;/b&gt;&#xa;35 Sanity files&#xa;app/ components/&#xa;lib/integrations/sanity/" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#7a2a2a;strokeColor=#ff8a8a;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
147
+ <mxGeometry x="1175" y="270" width="145" height="70" as="geometry" />
148
+ </mxCell>
149
+
150
+ <mxCell id="s_mergers" value="&lt;b&gt;mergers/&lt;/b&gt;&#xa;layout-merger.js&#xa;sitemap-merger.js&#xa;check-integration-merger.js" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#7a2a2a;strokeColor=#ff8a8a;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
151
+ <mxGeometry x="1175" y="355" width="145" height="70" as="geometry" />
152
+ </mxCell>
153
+
154
+ <!-- BaseHub -->
155
+ <mxCell id="basehub" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#6b2020;strokeColor=#ff4d4d;arcSize=8;" vertex="1" parent="1">
156
+ <mxGeometry x="1350" y="240" width="175" height="120" as="geometry" />
157
+ </mxCell>
158
+ <mxCell id="basehub_label" value="&lt;b&gt;basehub/&lt;/b&gt;" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#ff8a8a;fontSize=11;" vertex="1" parent="1">
159
+ <mxGeometry x="1360" y="245" width="80" height="22" as="geometry" />
160
+ </mxCell>
161
+
162
+ <mxCell id="b_config" value="&lt;b&gt;config.js&lt;/b&gt;&#xa;basehub: ^3.0.0&#xa;(minimal)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#7a2a2a;strokeColor=#ff8a8a;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
163
+ <mxGeometry x="1360" y="275" width="100" height="50" as="geometry" />
164
+ </mxCell>
165
+
166
+ <mxCell id="b_files" value="&lt;b&gt;files/&lt;/b&gt;&#xa;README.md" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#7a2a2a;strokeColor=#ff8a8a;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
167
+ <mxGeometry x="1468" y="275" width="50" height="50" as="geometry" />
168
+ </mxCell>
169
+
170
+ <!-- HOOKS -->
171
+ <mxCell id="hooks" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1a3a4a;strokeColor=#4ecdc4;arcSize=6;" vertex="1" parent="1">
172
+ <mxGeometry x="980" y="530" width="560" height="170" as="geometry" />
173
+ </mxCell>
174
+ <mxCell id="hooks_label" value="&lt;b&gt;template-hooks/&lt;/b&gt; — optional hooks copied during scaffolding" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#4ecdc4;fontSize=12;" vertex="1" parent="1">
175
+ <mxGeometry x="990" y="535" width="380" height="25" as="geometry" />
176
+ </mxCell>
177
+
178
+ <mxCell id="h_config" value="&lt;b&gt;config.js&lt;/b&gt;&#xa;Hook metadata&#xa;+ npm deps per hook" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e4a5a;strokeColor=#4ecdc4;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
179
+ <mxGeometry x="1000" y="570" width="120" height="55" as="geometry" />
180
+ </mxCell>
181
+
182
+ <mxCell id="h_battery" value="use-battery.ts&#xa;deps: lodash-es" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e4a5a;strokeColor=#4ecdc4;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
183
+ <mxGeometry x="1135" y="570" width="100" height="40" as="geometry" />
184
+ </mxCell>
185
+
186
+ <mxCell id="h_perf" value="use-device-perf.ts&#xa;deps: detect-gpu,&#xa;react-device-detect, zustand" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e4a5a;strokeColor=#4ecdc4;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
187
+ <mxGeometry x="1250" y="570" width="130" height="55" as="geometry" />
188
+ </mxCell>
189
+
190
+ <mxCell id="h_observer" value="use-intersection-&#xa;observer.ts&#xa;(no deps)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e4a5a;strokeColor=#4ecdc4;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
191
+ <mxGeometry x="1395" y="570" width="100" height="50" as="geometry" />
192
+ </mxCell>
193
+
194
+ <mxCell id="h_media" value="use-media.ts&#xa;(no deps)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1e4a5a;strokeColor=#4ecdc4;fontColor=#fff;fontSize=9;align=center;" vertex="1" parent="1">
195
+ <mxGeometry x="1135" y="625" width="100" height="35" as="geometry" />
196
+ </mxCell>
197
+
198
+ <!-- PLUGINS -->
199
+ <mxCell id="plugins" value="&lt;b&gt;plugins/&lt;/b&gt;&#xa;no-anchor-element.grit&#xa;no-unnecessary-forwardref.grit&#xa;no-relative-parent-imports.grit" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2a3a2a;strokeColor=#66bb6a;fontColor=#fff;fontSize=10;align=center;" vertex="1" parent="1">
200
+ <mxGeometry x="980" y="720" width="220" height="70" as="geometry" />
201
+ </mxCell>
202
+
203
+ <!-- ARROWS: CLI -> CBA -->
204
+ <mxCell id="arrow1" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#ff6b6b;strokeWidth=2;entryX=0;entryY=0.5;exitX=1;exitY=0.5;" edge="1" parent="1" source="cli_create" target="cba_index">
205
+ <mxGeometry relative="1" as="geometry" />
206
+ </mxCell>
207
+ <mxCell id="arrow1_label" value="imports" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#ff6b6b;fontSize=10;" vertex="1" connectable="0" parent="arrow1">
208
+ <mxGeometry x="-0.2" relative="1" as="geometry">
209
+ <mxPoint as="offset" />
210
+ </mxGeometry>
211
+ </mxCell>
212
+
213
+ <!-- ARROW: CLI create -> templates -->
214
+ <mxCell id="arrow2" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#ff6b9d;strokeWidth=2;dashed=1;exitX=1;exitY=1;entryX=0;entryY=0;" edge="1" parent="1" source="cli_create" target="templates">
215
+ <mxGeometry relative="1" as="geometry" />
216
+ </mxCell>
217
+ <mxCell id="arrow2_label" value="fs.copy" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#ff6b9d;fontSize=10;" vertex="1" connectable="0" parent="arrow2">
218
+ <mxGeometry x="-0.2" relative="1" as="geometry">
219
+ <mxPoint as="offset" />
220
+ </mxGeometry>
221
+ </mxCell>
222
+
223
+ <!-- ARROW: CLI create -> integrations -->
224
+ <mxCell id="arrow3" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#ff4d4d;strokeWidth=2;dashed=1;exitX=1;exitY=0.3;entryX=0;entryY=0.5;" edge="1" parent="1" source="cli" target="integrations">
225
+ <mxGeometry relative="1" as="geometry" />
226
+ </mxCell>
227
+ <mxCell id="arrow3_label" value="merge + copy" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#ff4d4d;fontSize=10;" vertex="1" connectable="0" parent="arrow3">
228
+ <mxGeometry x="-0.3" relative="1" as="geometry">
229
+ <mxPoint as="offset" />
230
+ </mxGeometry>
231
+ </mxCell>
232
+
233
+ <!-- ARROW: mergers -> sanity mergers -->
234
+ <mxCell id="arrow4" value="" style="endArrow=block;endFill=1;html=1;strokeColor=#ff8a8a;strokeWidth=1;dashed=1;" edge="1" parent="1" source="cba_mergers" target="s_mergers">
235
+ <mxGeometry relative="1" as="geometry" />
236
+ </mxCell>
237
+ <mxCell id="arrow4_label" value="imports" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#ff8a8a;fontSize=9;" vertex="1" connectable="0" parent="arrow4">
238
+ <mxGeometry x="-0.2" relative="1" as="geometry">
239
+ <mxPoint as="offset" />
240
+ </mxGeometry>
241
+ </mxCell>
242
+
243
+ <!-- DATA FLOW LEGEND -->
244
+ <mxCell id="legend" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1a1a2e;strokeColor=#555;arcSize=8;" vertex="1" parent="1">
245
+ <mxGeometry x="440" y="730" width="500" height="110" as="geometry" />
246
+ </mxCell>
247
+ <mxCell id="legend_title" value="&lt;b&gt;Data Flow&lt;/b&gt;" style="text;html=1;align=left;verticalAlign=top;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#fff;fontSize=11;" vertex="1" parent="1">
248
+ <mxGeometry x="455" y="735" width="80" height="22" as="geometry" />
249
+ </mxCell>
250
+ <mxCell id="legend1" value="1. User runs &lt;b&gt;basement&lt;/b&gt; → CLI parses args, prompts for choices" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#4da6ff;fontSize=10;" vertex="1" parent="1">
251
+ <mxGeometry x="455" y="758" width="340" height="22" as="geometry" />
252
+ </mxCell>
253
+ <mxCell id="legend2" value="2. CLI copies selected &lt;b&gt;template&lt;/b&gt; to target dir (instant, no network)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#ff6b9d;fontSize=10;" vertex="1" parent="1">
254
+ <mxGeometry x="455" y="778" width="380" height="22" as="geometry" />
255
+ </mxCell>
256
+ <mxCell id="legend3" value="3. CLI applies CMS &lt;b&gt;integration&lt;/b&gt; via merge + copy (if selected)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#ff4d4d;fontSize=10;" vertex="1" parent="1">
257
+ <mxGeometry x="455" y="798" width="350" height="22" as="geometry" />
258
+ </mxCell>
259
+ <mxCell id="legend4" value="4. CLI hydrates package.json from &lt;b&gt;config manifests&lt;/b&gt; (zero hardcoded deps)" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#b388ff;fontSize=10;" vertex="1" parent="1">
260
+ <mxGeometry x="455" y="818" width="420" height="22" as="geometry" />
261
+ </mxCell>
262
+
263
+ </root>
264
+ </mxGraphModel>
265
+ </diagram>
266
+ </mxfile>
@@ -0,0 +1,91 @@
1
+ graph TD
2
+ subgraph ROOT["basement-starter-cli (root)"]
3
+ PKG_ROOT["package.json<br/><i>workspaces: packages/*</i>"]
4
+ BIOME["biome.json<br/><i>shared linting</i>"]
5
+ CHANGESET[".changeset/<br/><i>versioning</i>"]
6
+ CI[".github/workflows/<br/><i>release pipeline</i>"]
7
+ end
8
+
9
+ subgraph CLI["packages/cli — @basementstudio/cli"]
10
+ CLI_BIN["bin/index.js<br/><i>CLI entry point</i><br/><i>basement command</i>"]
11
+ CLI_CREATE["src/commands/create.js<br/><i>orchestrates scaffolding</i>"]
12
+ CLI_ADD["src/commands/add-integration.js<br/><i>add CMS to existing project</i>"]
13
+ CLI_WORKTREE["src/commands/worktree.js<br/><i>git worktree management</i>"]
14
+ CLI_SANITY["src/commands/setup-sanity.js<br/><i>automated Sanity setup</i>"]
15
+ CLI_PKG["package.json<br/><i>depends on create-basement-app</i>"]
16
+ end
17
+
18
+ subgraph CBA["packages/create-basement-app — @basementstudio/create-basement-app"]
19
+ CBA_INDEX["src/index.js<br/><i>public API barrel export</i>"]
20
+
21
+ subgraph MERGERS["src/mergers/"]
22
+ MERGER_INDEX["index.js<br/><i>injectLayer, injectIntegration</i>"]
23
+ MERGER_CONFIG["config.js<br/><i>CMS_CONFIG, LAYER_CONFIG</i>"]
24
+ end
25
+
26
+ subgraph CONFIGS["src/configs/"]
27
+ ANIM_CONFIG["animations.js<br/><i>GSAP, Motion deps</i>"]
28
+ end
29
+
30
+ subgraph TEMPLATES["templates/ — standalone Next.js projects"]
31
+ T_DEFAULT["default/<br/><i>84 files, base starter</i>"]
32
+ T_WEBGL["webgl/<br/><i>87 files, R3F + canvas</i>"]
33
+ T_WEBGPU["webgpu/<br/><i>84 files, alpha R3F deps</i>"]
34
+ T_EXPERIMENT["experiment/<br/><i>86 files, nav components</i>"]
35
+ end
36
+
37
+ subgraph INTEGRATIONS["integrations/ — CMS overlays"]
38
+ subgraph SANITY["sanity/"]
39
+ S_CONFIG["config.js<br/><i>deps, scripts, paths</i>"]
40
+ S_FILES["files/<br/><i>35 Sanity files</i>"]
41
+ S_MERGERS["mergers/<br/><i>layout, sitemap, check</i>"]
42
+ end
43
+ subgraph BASEHUB["basehub/"]
44
+ B_CONFIG["config.js<br/><i>basehub ^3.0.0</i>"]
45
+ B_FILES["files/<br/><i>README.md</i>"]
46
+ end
47
+ end
48
+
49
+ subgraph HOOKS["template-hooks/"]
50
+ H_CONFIG["config.js<br/><i>hook metadata + deps</i>"]
51
+ H_BATTERY["use-battery.ts"]
52
+ H_PERF["use-device-perf.ts"]
53
+ H_OBSERVER["use-intersection-observer.ts"]
54
+ H_MEDIA["use-media.ts"]
55
+ end
56
+
57
+ PLUGINS["plugins/<br/><i>3 Biome Grit rules</i>"]
58
+ end
59
+
60
+ %% Dependencies
61
+ CLI_BIN --> CLI_CREATE
62
+ CLI_BIN --> CLI_ADD
63
+ CLI_BIN --> CLI_WORKTREE
64
+ CLI_CREATE --> CBA_INDEX
65
+ CLI_CREATE --> S_CONFIG
66
+ CLI_CREATE --> B_CONFIG
67
+ CLI_CREATE --> H_CONFIG
68
+ CLI_ADD --> CBA_INDEX
69
+ CLI_ADD --> S_CONFIG
70
+ CLI_ADD --> B_CONFIG
71
+ CBA_INDEX --> MERGER_INDEX
72
+ CBA_INDEX --> ANIM_CONFIG
73
+ MERGER_INDEX --> MERGER_CONFIG
74
+ MERGER_INDEX --> S_MERGERS
75
+ CLI_CREATE --> TEMPLATES
76
+ CLI_CREATE --> CLI_SANITY
77
+
78
+ %% Styling
79
+ classDef root fill:#1a1a2e,stroke:#e94560,color:#fff
80
+ classDef cli fill:#16213e,stroke:#0f3460,color:#fff
81
+ classDef cba fill:#0f3460,stroke:#533483,color:#fff
82
+ classDef template fill:#533483,stroke:#e94560,color:#fff
83
+ classDef integration fill:#e94560,stroke:#fff,color:#fff
84
+ classDef hook fill:#0f3460,stroke:#e94560,color:#fff
85
+
86
+ class ROOT root
87
+ class CLI cli
88
+ class CBA cba
89
+ class TEMPLATES,T_DEFAULT,T_WEBGL,T_WEBGPU,T_EXPERIMENT template
90
+ class INTEGRATIONS,SANITY,BASEHUB integration
91
+ class HOOKS hook