bsmnt 0.0.2 → 0.1.1

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 (346) hide show
  1. package/.github/workflows/release.yml +2 -0
  2. package/CHANGELOG.md +31 -0
  3. package/CLAUDE.md +42 -24
  4. package/README.md +33 -12
  5. package/biome.json +1 -0
  6. package/bun.lock +2 -1
  7. package/docs/architecture.drawio +250 -0
  8. package/docs/architecture.mermaid +85 -0
  9. package/package.json +42 -42
  10. package/{bin → packages/cli/bin}/index.js +28 -31
  11. package/packages/cli/package.json +16 -0
  12. package/{src → packages/cli/src}/commands/add-integration.js +22 -37
  13. package/{src → packages/cli/src}/commands/create.js +125 -131
  14. package/packages/create-basement-app/integrations/sanity/config.js +46 -0
  15. package/{src → packages/create-basement-app/integrations/sanity}/mergers/check-integration-merger.js +1 -1
  16. package/{src → packages/create-basement-app/integrations/sanity}/mergers/layout-merger.js +1 -1
  17. package/{src → packages/create-basement-app/integrations/sanity}/mergers/sitemap-merger.js +1 -1
  18. package/packages/create-basement-app/package.json +10 -0
  19. package/packages/create-basement-app/src/configs/animations.js +28 -0
  20. package/packages/create-basement-app/src/index.js +15 -0
  21. package/packages/create-basement-app/src/mergers/check-integration-merger.js +105 -0
  22. package/{src → packages/create-basement-app/src}/mergers/config.js +5 -33
  23. package/{src → packages/create-basement-app/src}/mergers/index.js +89 -98
  24. package/packages/create-basement-app/src/mergers/layout-merger.js +223 -0
  25. package/packages/create-basement-app/src/mergers/sitemap-merger.js +121 -0
  26. package/packages/create-basement-app/template-hooks/config.js +38 -0
  27. package/packages/create-basement-app/templates/default/.biome/plugins/README.md +21 -0
  28. package/packages/create-basement-app/templates/default/.biome/plugins/no-anchor-element.grit +12 -0
  29. package/packages/create-basement-app/templates/default/.biome/plugins/no-relative-parent-imports.grit +10 -0
  30. package/packages/create-basement-app/templates/default/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  31. package/packages/create-basement-app/templates/default/.cursor/rules/README.md +184 -0
  32. package/packages/create-basement-app/templates/default/.cursor/rules/architecture.mdc +437 -0
  33. package/packages/create-basement-app/templates/default/.cursor/rules/components.mdc +436 -0
  34. package/packages/create-basement-app/templates/default/.cursor/rules/integrations.mdc +447 -0
  35. package/packages/create-basement-app/templates/default/.cursor/rules/main.mdc +278 -0
  36. package/packages/create-basement-app/templates/default/.cursor/rules/styling.mdc +433 -0
  37. package/packages/create-basement-app/templates/default/.editorconfig +40 -0
  38. package/packages/create-basement-app/templates/default/.env.example +81 -0
  39. package/packages/create-basement-app/templates/default/.gitattributes +19 -0
  40. package/packages/create-basement-app/templates/default/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  41. package/packages/create-basement-app/templates/default/.github/workflows/lighthouse-to-slack.yml +136 -0
  42. package/packages/create-basement-app/templates/default/.vscode/extensions.json +20 -0
  43. package/packages/create-basement-app/templates/default/.vscode/settings.json +105 -0
  44. package/packages/create-basement-app/templates/default/README.md +221 -0
  45. package/packages/create-basement-app/templates/default/_gitignore +67 -0
  46. package/packages/create-basement-app/templates/default/app/favicon.ico +0 -0
  47. package/packages/create-basement-app/templates/default/app/layout.tsx +104 -0
  48. package/packages/create-basement-app/templates/default/app/page.tsx +275 -0
  49. package/packages/create-basement-app/templates/default/app/robots.ts +15 -0
  50. package/packages/create-basement-app/templates/default/app/sitemap.ts +16 -0
  51. package/packages/create-basement-app/templates/default/biome.json +250 -0
  52. package/packages/create-basement-app/templates/default/components/basement.svg +1 -0
  53. package/packages/create-basement-app/templates/default/components/layout/footer/index.tsx +27 -0
  54. package/packages/create-basement-app/templates/default/components/layout/header/index.tsx +11 -0
  55. package/packages/create-basement-app/templates/default/components/layout/theme/index.tsx +66 -0
  56. package/packages/create-basement-app/templates/default/components/layout/wrapper/index.tsx +65 -0
  57. package/packages/create-basement-app/templates/default/components/ui/README.md +77 -0
  58. package/packages/create-basement-app/templates/default/components/ui/image/README.md +37 -0
  59. package/packages/create-basement-app/templates/default/components/ui/image/index.tsx +224 -0
  60. package/packages/create-basement-app/templates/default/components/ui/link/index.tsx +146 -0
  61. package/packages/create-basement-app/templates/default/lib/README.md +33 -0
  62. package/packages/create-basement-app/templates/default/lib/hooks/index.ts +12 -0
  63. package/packages/create-basement-app/templates/default/lib/hooks/use-device-detection.ts +81 -0
  64. package/packages/create-basement-app/templates/default/lib/hooks/use-media-breakpoint.ts +15 -0
  65. package/packages/create-basement-app/templates/default/lib/hooks/use-prefetch.ts +74 -0
  66. package/packages/create-basement-app/templates/default/lib/scripts/dev.ts +52 -0
  67. package/packages/create-basement-app/templates/default/lib/scripts/generate-component.ts +322 -0
  68. package/packages/create-basement-app/templates/default/lib/scripts/generate-page.ts +193 -0
  69. package/packages/create-basement-app/templates/default/lib/scripts/generate.ts +79 -0
  70. package/packages/create-basement-app/templates/default/lib/scripts/utils.ts +246 -0
  71. package/packages/create-basement-app/templates/default/lib/store/app.ts +11 -0
  72. package/packages/create-basement-app/templates/default/lib/store/index.ts +11 -0
  73. package/packages/create-basement-app/templates/default/lib/styles/README.md +64 -0
  74. package/packages/create-basement-app/templates/default/lib/styles/cn.ts +7 -0
  75. package/packages/create-basement-app/templates/default/lib/styles/colors.ts +63 -0
  76. package/packages/create-basement-app/templates/default/lib/styles/config.ts +34 -0
  77. package/packages/create-basement-app/templates/default/lib/styles/css/global.css +85 -0
  78. package/packages/create-basement-app/templates/default/lib/styles/css/index.css +6 -0
  79. package/packages/create-basement-app/templates/default/lib/styles/css/reset.css +166 -0
  80. package/packages/create-basement-app/templates/default/lib/styles/css/root.css +68 -0
  81. package/packages/create-basement-app/templates/default/lib/styles/css/tailwind.css +132 -0
  82. package/packages/create-basement-app/templates/default/lib/styles/easings.ts +21 -0
  83. package/packages/create-basement-app/templates/default/lib/styles/fonts.ts +28 -0
  84. package/packages/create-basement-app/templates/default/lib/styles/index.ts +12 -0
  85. package/packages/create-basement-app/templates/default/lib/styles/layout.mjs +27 -0
  86. package/packages/create-basement-app/templates/default/lib/styles/scripts/README.md +29 -0
  87. package/packages/create-basement-app/templates/default/lib/styles/scripts/generate-root.ts +57 -0
  88. package/packages/create-basement-app/templates/default/lib/styles/scripts/generate-tailwind.ts +162 -0
  89. package/packages/create-basement-app/templates/default/lib/styles/scripts/postcss-functions.mjs +168 -0
  90. package/packages/create-basement-app/templates/default/lib/styles/scripts/setup-styles.ts +24 -0
  91. package/packages/create-basement-app/templates/default/lib/styles/scripts/utils.ts +20 -0
  92. package/packages/create-basement-app/templates/default/lib/styles/typography.ts +36 -0
  93. package/packages/create-basement-app/templates/default/lib/utils/README.md +40 -0
  94. package/packages/create-basement-app/templates/default/lib/utils/css.d.ts +21 -0
  95. package/packages/create-basement-app/templates/default/lib/utils/easings.ts +240 -0
  96. package/packages/create-basement-app/templates/default/lib/utils/fetch.ts +84 -0
  97. package/packages/create-basement-app/templates/default/lib/utils/math.test.ts +221 -0
  98. package/packages/create-basement-app/templates/default/lib/utils/math.ts +236 -0
  99. package/packages/create-basement-app/templates/default/lib/utils/metadata.ts +126 -0
  100. package/packages/create-basement-app/templates/default/lib/utils/strings.test.ts +166 -0
  101. package/packages/create-basement-app/templates/default/lib/utils/strings.ts +246 -0
  102. package/packages/create-basement-app/templates/default/lib/utils/types.d.ts +15 -0
  103. package/packages/create-basement-app/templates/default/lib/utils/viewport.test.ts +256 -0
  104. package/packages/create-basement-app/templates/default/lib/utils/viewport.ts +193 -0
  105. package/packages/create-basement-app/templates/default/next.config.ts +142 -0
  106. package/packages/create-basement-app/templates/default/package.json +62 -0
  107. package/packages/create-basement-app/templates/default/postcss.config.mjs +42 -0
  108. package/packages/create-basement-app/templates/default/public/fonts/geist/Geist-Mono.woff2 +0 -0
  109. package/packages/create-basement-app/templates/default/tsconfig.json +43 -0
  110. package/packages/create-basement-app/templates/experiment/.biome/plugins/README.md +21 -0
  111. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-anchor-element.grit +12 -0
  112. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-relative-parent-imports.grit +10 -0
  113. package/packages/create-basement-app/templates/experiment/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  114. package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +184 -0
  115. package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +437 -0
  116. package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +436 -0
  117. package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +447 -0
  118. package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +278 -0
  119. package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +433 -0
  120. package/packages/create-basement-app/templates/experiment/.editorconfig +40 -0
  121. package/packages/create-basement-app/templates/experiment/.env.example +81 -0
  122. package/packages/create-basement-app/templates/experiment/.gitattributes +19 -0
  123. package/packages/create-basement-app/templates/experiment/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  124. package/packages/create-basement-app/templates/experiment/.github/workflows/lighthouse-to-slack.yml +136 -0
  125. package/packages/create-basement-app/templates/experiment/.vscode/extensions.json +20 -0
  126. package/packages/create-basement-app/templates/experiment/.vscode/settings.json +105 -0
  127. package/packages/create-basement-app/templates/experiment/README.md +221 -0
  128. package/packages/create-basement-app/templates/experiment/_gitignore +67 -0
  129. package/packages/create-basement-app/templates/experiment/app/favicon.ico +0 -0
  130. package/packages/create-basement-app/templates/experiment/app/layout.tsx +104 -0
  131. package/packages/create-basement-app/templates/experiment/app/page.tsx +275 -0
  132. package/packages/create-basement-app/templates/experiment/app/robots.ts +15 -0
  133. package/packages/create-basement-app/templates/experiment/app/sitemap.ts +16 -0
  134. package/packages/create-basement-app/templates/experiment/biome.json +250 -0
  135. package/packages/create-basement-app/templates/experiment/components/basement.svg +1 -0
  136. package/packages/create-basement-app/templates/experiment/components/layout/footer/index.tsx +27 -0
  137. package/packages/create-basement-app/templates/experiment/components/layout/header/index.tsx +58 -0
  138. package/packages/create-basement-app/templates/experiment/components/layout/navigation-menu.tsx +127 -0
  139. package/packages/create-basement-app/templates/experiment/components/layout/theme/index.tsx +66 -0
  140. package/packages/create-basement-app/templates/experiment/components/layout/wrapper/index.tsx +65 -0
  141. package/packages/create-basement-app/templates/experiment/components/ui/README.md +77 -0
  142. package/packages/create-basement-app/templates/experiment/components/ui/image/README.md +37 -0
  143. package/packages/create-basement-app/templates/experiment/components/ui/image/index.tsx +224 -0
  144. package/packages/create-basement-app/templates/experiment/components/ui/link/index.tsx +146 -0
  145. package/packages/create-basement-app/templates/experiment/lib/README.md +33 -0
  146. package/packages/create-basement-app/templates/experiment/lib/constants.ts +12 -0
  147. package/packages/create-basement-app/templates/experiment/lib/hooks/index.ts +12 -0
  148. package/packages/create-basement-app/templates/experiment/lib/hooks/use-device-detection.ts +81 -0
  149. package/packages/create-basement-app/templates/experiment/lib/hooks/use-media-breakpoint.ts +15 -0
  150. package/packages/create-basement-app/templates/experiment/lib/hooks/use-prefetch.ts +74 -0
  151. package/packages/create-basement-app/templates/experiment/lib/integrations/.gitkeep +0 -0
  152. package/packages/create-basement-app/templates/experiment/lib/scripts/dev.ts +52 -0
  153. package/packages/create-basement-app/templates/experiment/lib/scripts/generate-component.ts +322 -0
  154. package/packages/create-basement-app/templates/experiment/lib/scripts/generate-page.ts +193 -0
  155. package/packages/create-basement-app/templates/experiment/lib/scripts/generate.ts +79 -0
  156. package/packages/create-basement-app/templates/experiment/lib/scripts/utils.ts +246 -0
  157. package/packages/create-basement-app/templates/experiment/lib/store/app.ts +11 -0
  158. package/packages/create-basement-app/templates/experiment/lib/store/index.ts +11 -0
  159. package/packages/create-basement-app/templates/experiment/lib/styles/README.md +64 -0
  160. package/packages/create-basement-app/templates/experiment/lib/styles/cn.ts +7 -0
  161. package/packages/create-basement-app/templates/experiment/lib/styles/colors.ts +63 -0
  162. package/packages/create-basement-app/templates/experiment/lib/styles/config.ts +34 -0
  163. package/packages/create-basement-app/templates/experiment/lib/styles/css/global.css +85 -0
  164. package/packages/create-basement-app/templates/experiment/lib/styles/css/index.css +6 -0
  165. package/packages/create-basement-app/templates/experiment/lib/styles/css/reset.css +166 -0
  166. package/packages/create-basement-app/templates/experiment/lib/styles/css/root.css +68 -0
  167. package/packages/create-basement-app/templates/experiment/lib/styles/css/tailwind.css +132 -0
  168. package/packages/create-basement-app/templates/experiment/lib/styles/easings.ts +21 -0
  169. package/packages/create-basement-app/templates/experiment/lib/styles/fonts.ts +28 -0
  170. package/packages/create-basement-app/templates/experiment/lib/styles/index.ts +12 -0
  171. package/packages/create-basement-app/templates/experiment/lib/styles/layout.mjs +27 -0
  172. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/README.md +29 -0
  173. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/generate-root.ts +57 -0
  174. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/generate-tailwind.ts +162 -0
  175. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/postcss-functions.mjs +168 -0
  176. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/setup-styles.ts +24 -0
  177. package/packages/create-basement-app/templates/experiment/lib/styles/scripts/utils.ts +20 -0
  178. package/packages/create-basement-app/templates/experiment/lib/styles/typography.ts +36 -0
  179. package/packages/create-basement-app/templates/experiment/lib/utils/README.md +40 -0
  180. package/packages/create-basement-app/templates/experiment/lib/utils/css.d.ts +21 -0
  181. package/packages/create-basement-app/templates/experiment/lib/utils/easings.ts +240 -0
  182. package/packages/create-basement-app/templates/experiment/lib/utils/fetch.ts +84 -0
  183. package/packages/create-basement-app/templates/experiment/lib/utils/math.test.ts +221 -0
  184. package/packages/create-basement-app/templates/experiment/lib/utils/math.ts +236 -0
  185. package/packages/create-basement-app/templates/experiment/lib/utils/metadata.ts +126 -0
  186. package/packages/create-basement-app/templates/experiment/lib/utils/strings.test.ts +166 -0
  187. package/packages/create-basement-app/templates/experiment/lib/utils/strings.ts +246 -0
  188. package/packages/create-basement-app/templates/experiment/lib/utils/types.d.ts +15 -0
  189. package/packages/create-basement-app/templates/experiment/lib/utils/viewport.test.ts +256 -0
  190. package/packages/create-basement-app/templates/experiment/lib/utils/viewport.ts +193 -0
  191. package/packages/create-basement-app/templates/experiment/next.config.ts +142 -0
  192. package/packages/create-basement-app/templates/experiment/package.json +69 -0
  193. package/packages/create-basement-app/templates/experiment/postcss.config.mjs +42 -0
  194. package/packages/create-basement-app/templates/experiment/public/fonts/geist/Geist-Mono.woff2 +0 -0
  195. package/packages/create-basement-app/templates/experiment/tsconfig.json +43 -0
  196. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +21 -0
  197. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +12 -0
  198. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +10 -0
  199. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  200. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +184 -0
  201. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +437 -0
  202. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +436 -0
  203. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +447 -0
  204. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +278 -0
  205. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +433 -0
  206. package/packages/create-basement-app/templates/webgl/.editorconfig +40 -0
  207. package/packages/create-basement-app/templates/webgl/.env.example +81 -0
  208. package/packages/create-basement-app/templates/webgl/.gitattributes +19 -0
  209. package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  210. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +136 -0
  211. package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +20 -0
  212. package/packages/create-basement-app/templates/webgl/.vscode/settings.json +105 -0
  213. package/packages/create-basement-app/templates/webgl/README.md +221 -0
  214. package/packages/create-basement-app/templates/webgl/_gitignore +67 -0
  215. package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
  216. package/packages/create-basement-app/templates/webgl/app/layout.tsx +104 -0
  217. package/packages/create-basement-app/templates/webgl/app/page.tsx +10 -0
  218. package/packages/create-basement-app/templates/webgl/app/robots.ts +15 -0
  219. package/packages/create-basement-app/templates/webgl/app/sitemap.ts +16 -0
  220. package/packages/create-basement-app/templates/webgl/biome.json +250 -0
  221. package/packages/create-basement-app/templates/webgl/components/basement.svg +1 -0
  222. package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +27 -0
  223. package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +11 -0
  224. package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +66 -0
  225. package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +65 -0
  226. package/packages/create-basement-app/templates/webgl/components/ui/README.md +77 -0
  227. package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +37 -0
  228. package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +224 -0
  229. package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +146 -0
  230. package/packages/create-basement-app/templates/webgl/components/webgl/canvas/dynamic.tsx +34 -0
  231. package/packages/create-basement-app/templates/webgl/components/webgl/canvas/index.tsx +38 -0
  232. package/packages/create-basement-app/templates/webgl/components/webgl/components/scene/index.tsx +29 -0
  233. package/packages/create-basement-app/templates/webgl/lib/README.md +33 -0
  234. package/packages/create-basement-app/templates/webgl/lib/hooks/index.ts +12 -0
  235. package/packages/create-basement-app/templates/webgl/lib/hooks/use-device-detection.ts +81 -0
  236. package/packages/create-basement-app/templates/webgl/lib/hooks/use-media-breakpoint.ts +15 -0
  237. package/packages/create-basement-app/templates/webgl/lib/hooks/use-prefetch.ts +74 -0
  238. package/packages/create-basement-app/templates/webgl/lib/integrations/.gitkeep +0 -0
  239. package/packages/create-basement-app/templates/webgl/lib/renderer.ts +7 -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/tasks/.last-branch +1 -0
  285. package/tasks/CLAUDE.md +104 -0
  286. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/prd.json +153 -0
  287. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/progress.txt +115 -0
  288. package/tasks/prd-project-restructure.md +375 -0
  289. package/tasks/prd.json +227 -91
  290. package/tasks/progress.txt +281 -87
  291. package/tasks/ralph.sh +113 -0
  292. package/integrations/basehub/README.md +0 -3
  293. package/layers/experiment/components/layout/header/index.tsx +0 -58
  294. package/layers/experiment/components/layout/navigation-menu.tsx +0 -127
  295. package/layers/experiment/lib/constants.ts +0 -12
  296. package/layers/webgl/app/page.tsx +0 -10
  297. package/layers/webgl/components/webgl/canvas/dynamic.tsx +0 -34
  298. package/layers/webgl/components/webgl/canvas/index.tsx +0 -43
  299. package/layers/webgl/components/webgl/components/scene/index.tsx +0 -21
  300. package/src/mergers/next-config-merger.js +0 -63
  301. /package/{src → packages/cli/src}/commands/setup-sanity.js +0 -0
  302. /package/{src → packages/cli/src}/commands/worktree.js +0 -0
  303. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/draft-mode/disable/route.ts +0 -0
  304. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/draft-mode/enable/route.ts +0 -0
  305. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/api/revalidate/route.ts +0 -0
  306. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/layout.tsx +0 -0
  307. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/sitemap.ts +0 -0
  308. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/studio/[[...tool]]/page.tsx +0 -0
  309. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/app/studio/layout.tsx +0 -0
  310. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/components/ui/sanity-image/index.tsx +0 -0
  311. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/README.md +0 -0
  312. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/check-integration.ts +0 -0
  313. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/README.md +0 -0
  314. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/client.ts +0 -0
  315. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -0
  316. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/components/rich-text.tsx +0 -0
  317. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/env.ts +0 -0
  318. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/live/index.tsx +0 -0
  319. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/queries.ts +0 -0
  320. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.cli.ts +0 -0
  321. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.config.ts +0 -0
  322. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/sanity.types.ts +0 -0
  323. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schema.json +0 -0
  324. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/article.ts +0 -0
  325. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/example.ts +0 -0
  326. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/index.ts +0 -0
  327. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/link.ts +0 -0
  328. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/metadata.ts +0 -0
  329. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/navigation.ts +0 -0
  330. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/page.ts +0 -0
  331. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/schemas/richText.ts +0 -0
  332. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/structure.ts +0 -0
  333. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/utils/image.ts +0 -0
  334. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/integrations/sanity/utils/link.ts +0 -0
  335. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/scripts/copy-sanity-mcp.ts +0 -0
  336. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/scripts/generate-page.ts +0 -0
  337. /package/{integrations/sanity → packages/create-basement-app/integrations/sanity/files}/lib/utils/metadata.ts +0 -0
  338. /package/{plugins → packages/create-basement-app/plugins}/README.md +0 -0
  339. /package/{plugins → packages/create-basement-app/plugins}/no-anchor-element.grit +0 -0
  340. /package/{plugins → packages/create-basement-app/plugins}/no-relative-parent-imports.grit +0 -0
  341. /package/{plugins → packages/create-basement-app/plugins}/no-unnecessary-forwardref.grit +0 -0
  342. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-battery.ts +0 -0
  343. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-device-perf.ts +0 -0
  344. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-intersection-observer.ts +0 -0
  345. /package/{template-hooks → packages/create-basement-app/template-hooks}/use-media.ts +0 -0
  346. /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,36 @@
1
1
  # @basementstudio/cli
2
2
 
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#39](https://github.com/basementstudio/basement-cli/pull/39) [`43a5857`](https://github.com/basementstudio/basement-cli/commit/43a5857a33350e344494d85c70a2400ac038695c) Thanks [@BertovDev](https://github.com/BertovDev)! - Add WebGPU template support
8
+
9
+ - [#33](https://github.com/basementstudio/basement-cli/pull/33) [`9bef7ca`](https://github.com/basementstudio/basement-cli/commit/9bef7ca91ba7fa5928263c76adcc9f6bf77c3143) Thanks [@BertovDev](https://github.com/BertovDev)! - Remove BaseHub CMS integration. BaseHub was a stub that was never fully implemented. Sanity remains as the only CMS option.
10
+
11
+ - [#36](https://github.com/basementstudio/basement-cli/pull/36) [`ffa1407`](https://github.com/basementstudio/basement-cli/commit/ffa1407c299a50dbf27c4472e3e8d89bf66ed4fa) Thanks [@mustache-dev](https://github.com/mustache-dev)! - One r3f canvas for webgl-webgpu avoids redundancy
12
+
13
+ ## 0.1.0
14
+
15
+ ### Minor Changes
16
+
17
+ - [#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.
18
+
19
+ Split CLI entry point and commands into packages/cli
20
+
21
+ Move template scaffolding, mergers, integrations, hooks, and plugins into packages/create-basement-app
22
+
23
+ Replace remote tiged template downloads with local standalone templates (default, webgl, webgpu, experiment)
24
+
25
+ Move Sanity and BaseHub integration files locally with declarative config manifests (config.js)
26
+
27
+ Centralize animation and hook dependency configs in create-basement-app/src/configs/
28
+
29
+ Update CI workflow and changeset config for workspace publishing
30
+
31
+ Remove old root-level bin/, src/, layers/, and dead
32
+ code
33
+
3
34
  ## 0.0.2
4
35
 
5
36
  ### Patch Changes
package/CLAUDE.md CHANGED
@@ -4,14 +4,14 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
4
4
 
5
5
  ## Project Overview
6
6
 
7
- This is **basement**, a CLI tool that scaffolds Next.js projects with AI agent integration. It creates projects from templates (Default, WebGL, WebGPU, Experiment) and optionally injects CMS integrations (Sanity, BaseHub) and animation libraries (GSAP, Framer Motion).
7
+ This is **basement**, a CLI tool that scaffolds Next.js projects with AI agent integration. It creates projects from templates (Default, WebGL, WebGPU, Experiment) and optionally injects CMS integrations (Sanity) and animation libraries (GSAP, Framer Motion).
8
8
 
9
9
  ## Commands
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,45 @@ 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
+ │ ├── template-hooks/ # Reusable React hooks + config.js
62
+ │ └── plugins/ # Biome linting rules (Grit patterns)
63
+ ├── .changeset/ # Changeset config for versioning
64
+ ├── .github/workflows/release.yml # CI: publish both packages to npm
65
+ ├── biome.json # Shared Biome config (root-level)
66
+ └── package.json # Workspace root (private, no runtime deps)
49
67
  ```
50
68
 
51
- ### CLI Flow (src/commands/create.js)
69
+ ### CLI Flow (packages/cli/src/commands/create.js)
52
70
  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/`
71
+ 2. **Template Copy**: Copy standalone template from `create-basement-app/templates/{type}/` (instant, no network)
72
+ 3. **Integration Injection**: Merge CMS files from local `create-basement-app/integrations/{cms}/files/`
73
+ 4. **Package Hydration**: Inject CMS deps, animation deps, hook deps, and scripts (all from config manifests)
74
+ 5. **Agent Skills**: Install AI agent skills via `bunx skills add`
75
+ 6. **Hooks**: Copy selected hooks from `create-basement-app/template-hooks/`
59
76
 
60
77
  ## Generated Project Stack
61
78
 
@@ -120,9 +137,10 @@ import { cn } from '@/styles/cn'
120
137
  - Root layouts should have ZERO dynamic function calls — encapsulate all dynamic behavior in child components with proper Suspense boundaries
121
138
 
122
139
  ### 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`)
140
+ - **Templates** (`packages/create-basement-app/templates/`) are standalone, complete Next.js projects (no layer overlay needed)
141
+ - **CMS integrations** (`packages/create-basement-app/integrations/`) are LOCAL files with config manifestsno remote GitHub cloning
142
+ - **Config manifests** (`config.js` in each integration) declare deps, scripts, additivePaths, and mergeFiles
143
+ - 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
144
 
127
145
  ### Debug Components
128
146
  Always gate debug UI (not auto-removed in production):
@@ -132,7 +150,7 @@ Always gate debug UI (not auto-removed in production):
132
150
 
133
151
  ## Biome Plugins
134
152
 
135
- Custom linting rules in `plugins/`:
153
+ Custom linting rules in `packages/create-basement-app/plugins/`:
136
154
  - `no-anchor-element.grit` - Enforce Next.js `<Link>` over `<a>`
137
155
  - `no-unnecessary-forwardref.grit` - Prevent forwardRef with React 19
138
156
  - `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}/
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
@@ -123,7 +145,6 @@ Templates:
123
145
 
124
146
  CMS:
125
147
  --sanity Sanity CMS
126
- --basehub BaseHub CMS
127
148
  --no-cms No CMS
128
149
 
129
150
  Animation:
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
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "lockfileVersion": 1,
3
+ "configVersion": 0,
3
4
  "workspaces": {
4
5
  "": {
5
- "name": "@basementstudio/cli",
6
+ "name": "bsmnt",
6
7
  "dependencies": {
7
8
  "chalk": "^5.6.2",
8
9
  "dotenv": "^17.2.3",
@@ -0,0 +1,250 @@
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
+ <!-- HOOKS -->
155
+ <mxCell id="hooks" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1a3a4a;strokeColor=#4ecdc4;arcSize=6;" vertex="1" parent="1">
156
+ <mxGeometry x="980" y="530" width="560" height="170" as="geometry" />
157
+ </mxCell>
158
+ <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">
159
+ <mxGeometry x="990" y="535" width="380" height="25" as="geometry" />
160
+ </mxCell>
161
+
162
+ <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">
163
+ <mxGeometry x="1000" y="570" width="120" height="55" as="geometry" />
164
+ </mxCell>
165
+
166
+ <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">
167
+ <mxGeometry x="1135" y="570" width="100" height="40" as="geometry" />
168
+ </mxCell>
169
+
170
+ <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">
171
+ <mxGeometry x="1250" y="570" width="130" height="55" as="geometry" />
172
+ </mxCell>
173
+
174
+ <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">
175
+ <mxGeometry x="1395" y="570" width="100" height="50" as="geometry" />
176
+ </mxCell>
177
+
178
+ <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">
179
+ <mxGeometry x="1135" y="625" width="100" height="35" as="geometry" />
180
+ </mxCell>
181
+
182
+ <!-- PLUGINS -->
183
+ <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">
184
+ <mxGeometry x="980" y="720" width="220" height="70" as="geometry" />
185
+ </mxCell>
186
+
187
+ <!-- ARROWS: CLI -> CBA -->
188
+ <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">
189
+ <mxGeometry relative="1" as="geometry" />
190
+ </mxCell>
191
+ <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">
192
+ <mxGeometry x="-0.2" relative="1" as="geometry">
193
+ <mxPoint as="offset" />
194
+ </mxGeometry>
195
+ </mxCell>
196
+
197
+ <!-- ARROW: CLI create -> templates -->
198
+ <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">
199
+ <mxGeometry relative="1" as="geometry" />
200
+ </mxCell>
201
+ <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">
202
+ <mxGeometry x="-0.2" relative="1" as="geometry">
203
+ <mxPoint as="offset" />
204
+ </mxGeometry>
205
+ </mxCell>
206
+
207
+ <!-- ARROW: CLI create -> integrations -->
208
+ <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">
209
+ <mxGeometry relative="1" as="geometry" />
210
+ </mxCell>
211
+ <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">
212
+ <mxGeometry x="-0.3" relative="1" as="geometry">
213
+ <mxPoint as="offset" />
214
+ </mxGeometry>
215
+ </mxCell>
216
+
217
+ <!-- ARROW: mergers -> sanity mergers -->
218
+ <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">
219
+ <mxGeometry relative="1" as="geometry" />
220
+ </mxCell>
221
+ <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">
222
+ <mxGeometry x="-0.2" relative="1" as="geometry">
223
+ <mxPoint as="offset" />
224
+ </mxGeometry>
225
+ </mxCell>
226
+
227
+ <!-- DATA FLOW LEGEND -->
228
+ <mxCell id="legend" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1a1a2e;strokeColor=#555;arcSize=8;" vertex="1" parent="1">
229
+ <mxGeometry x="440" y="730" width="500" height="110" as="geometry" />
230
+ </mxCell>
231
+ <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">
232
+ <mxGeometry x="455" y="735" width="80" height="22" as="geometry" />
233
+ </mxCell>
234
+ <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">
235
+ <mxGeometry x="455" y="758" width="340" height="22" as="geometry" />
236
+ </mxCell>
237
+ <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">
238
+ <mxGeometry x="455" y="778" width="380" height="22" as="geometry" />
239
+ </mxCell>
240
+ <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">
241
+ <mxGeometry x="455" y="798" width="350" height="22" as="geometry" />
242
+ </mxCell>
243
+ <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">
244
+ <mxGeometry x="455" y="818" width="420" height="22" as="geometry" />
245
+ </mxCell>
246
+
247
+ </root>
248
+ </mxGraphModel>
249
+ </diagram>
250
+ </mxfile>
@@ -0,0 +1,85 @@
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
+ end
44
+
45
+ subgraph HOOKS["template-hooks/"]
46
+ H_CONFIG["config.js<br/><i>hook metadata + deps</i>"]
47
+ H_BATTERY["use-battery.ts"]
48
+ H_PERF["use-device-perf.ts"]
49
+ H_OBSERVER["use-intersection-observer.ts"]
50
+ H_MEDIA["use-media.ts"]
51
+ end
52
+
53
+ PLUGINS["plugins/<br/><i>3 Biome Grit rules</i>"]
54
+ end
55
+
56
+ %% Dependencies
57
+ CLI_BIN --> CLI_CREATE
58
+ CLI_BIN --> CLI_ADD
59
+ CLI_BIN --> CLI_WORKTREE
60
+ CLI_CREATE --> CBA_INDEX
61
+ CLI_CREATE --> S_CONFIG
62
+ CLI_CREATE --> H_CONFIG
63
+ CLI_ADD --> CBA_INDEX
64
+ CLI_ADD --> S_CONFIG
65
+ CBA_INDEX --> MERGER_INDEX
66
+ CBA_INDEX --> ANIM_CONFIG
67
+ MERGER_INDEX --> MERGER_CONFIG
68
+ MERGER_INDEX --> S_MERGERS
69
+ CLI_CREATE --> TEMPLATES
70
+ CLI_CREATE --> CLI_SANITY
71
+
72
+ %% Styling
73
+ classDef root fill:#1a1a2e,stroke:#e94560,color:#fff
74
+ classDef cli fill:#16213e,stroke:#0f3460,color:#fff
75
+ classDef cba fill:#0f3460,stroke:#533483,color:#fff
76
+ classDef template fill:#533483,stroke:#e94560,color:#fff
77
+ classDef integration fill:#e94560,stroke:#fff,color:#fff
78
+ classDef hook fill:#0f3460,stroke:#e94560,color:#fff
79
+
80
+ class ROOT root
81
+ class CLI cli
82
+ class CBA cba
83
+ class TEMPLATES,T_DEFAULT,T_WEBGL,T_WEBGPU,T_EXPERIMENT template
84
+ class INTEGRATIONS,SANITY integration
85
+ class HOOKS hook